Sockeye: New AST for Frontend
authorDaniel Schwyn <schwyda@student.ethz.ch>
Thu, 29 Jun 2017 14:18:02 +0000 (16:18 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Thu, 29 Jun 2017 14:18:02 +0000 (16:18 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye/SockeyeASTBackend.hs [moved from tools/sockeye/SockeyeAST.hs with 98% similarity]
tools/sockeye/SockeyeASTFrontend.hs [new file with mode: 0644]

similarity index 98%
rename from tools/sockeye/SockeyeAST.hs
rename to tools/sockeye/SockeyeASTBackend.hs
index d6018ac..3389a73 100644 (file)
@@ -13,7 +13,7 @@
   Attn: Systems Group.
 -}
 
-module SockeyeAST where
+module SockeyeASTBackend where
 
 import Data.List
 import Numeric (showHex)
diff --git a/tools/sockeye/SockeyeASTFrontend.hs b/tools/sockeye/SockeyeASTFrontend.hs
new file mode 100644 (file)
index 0000000..e5b5abc
--- /dev/null
@@ -0,0 +1,94 @@
+{-
+    SockeyeAST.hs: AST for Sockeye
+
+    Part of Sockeye
+
+    Copyright (c) 2017, ETH Zurich.
+
+    All rights reserved.
+
+    This file is distributed under the terms in the attached LICENSE file.
+    If you do not find this file, copies can be found by writing to:
+    ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
+    Attn: Systems Group.
+-}
+
+module SockeyeASTFrontend where
+
+data SockeyeSpec = SockeyeSpec
+    { modules   :: [Module]
+    , nodeDecls :: [NodeDecl]
+    }
+
+data ParamType = Index | Address
+
+data ModuleParam = ModuleParam
+    { paramName :: !String
+    , paramType :: !Maybe ParamType
+    }
+
+data Module = Module
+    { inputPorts  :: [NodeId]
+    , outputPorts :: [NodeId]
+    , parameters  :: [ModuleParam]
+    , body        :: [NodeDecl]
+    }
+
+data NodeDecl = NodeDecl
+    { nodeId   :: NodeId
+    , nodeSpec :: NodeSpec
+    }
+
+data NodeIdIndex = Index
+    { index :: !Word }
+                 | Param
+    { name :: !String }
+
+data NodeId = Single
+    { prefix :: String }
+            | Indexed
+    { prefix :: !String }            
+            | Multi
+    { prefix :: !String
+    , start  :: NodeIdIndex
+    , end    :: NodeIdIndex
+    }
+
+data NodeType = Memory | Device
+
+data NodeSpec = NodeSpec
+    { nodeType  :: !Maybe NodeType
+    , accept    :: [BlockSpec]
+    , translate :: [MapSpec]
+    , overlay   :: !String
+    }
+
+data Address = Address
+    { address :: Word }
+             | Param
+    { name :: String }
+
+data BlockSpec = Singleton
+    { address :: !Address }
+               | Range
+    { base  :: !Address
+    , limit :: !Address
+    }
+               | Length
+    { base :: !Address
+    , bits :: !Word
+    }
+
+data MapDest = Direct
+    { destNode :: !NodeId }
+             | BaseAddress
+    { destNode :: !NodeId
+    , destBase :: !Address
+    }
+
+data MapSpec = MapSpec
+    { block :: BlockSpec
+    , dest  :: [MapDest]
+    }
+
+