4597e8a8861e40a91795feb91e8f108f54186a04
[barrelfish] / tools / sockeye / SockeyeASTInstantiator.hs
1 {-
2   SockeyeASTInstantiator.hs: AST with instantiated modules for Sockeye
3
4   Part of Sockeye
5
6   Copyright (c) 2017, ETH Zurich.
7
8   All rights reserved.
9
10   This file is distributed under the terms in the attached LICENSE file.
11   If you do not find this file, copies can be found by writing to:
12   ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
13   Attn: Systems Group.
14 -}
15
16 module SockeyeASTInstantiator
17     ( module SockeyeASTInstantiator
18     , module SockeyeASTDecodingNet
19     ) where
20
21 import Data.Map (Map)
22
23 import SockeyeASTDecodingNet
24     ( NodeType(Other, Memory, Device)
25     , BlockSpec(BlockSpec)
26     , base, limit
27     , Address
28     )
29
30 data SockeyeSpec = SockeyeSpec
31     { root :: ModuleInst
32     , modules :: Map Identifier Module
33     } deriving (Show)
34
35 data Module = Module
36     { ports        :: [Port]
37     , moduleInsts  :: [ModuleInst]
38     , nodeDecls    :: [NodeDecl]
39     } deriving (Show)
40
41 data Port
42     = InputPort 
43         { portId    :: Identifier
44         , portWidth :: !Integer
45         }
46     | OutputPort
47         { portId    :: Identifier
48         , portWidth :: !Integer
49         }
50     deriving (Show)
51
52 data ModuleInst
53     = ModuleInst
54         { namespace  :: Identifier
55         , moduleName :: Identifier
56         , inPortMap  :: PortMap
57         , outPortMap :: PortMap
58         } deriving (Show)
59
60 type PortMap = Map Identifier Identifier
61
62 data NodeDecl
63     = NodeDecl
64         { nodeId   :: Identifier
65         , nodeSpec :: NodeSpec
66         } deriving (Show)
67
68 type Identifier = String
69
70 data NodeSpec = NodeSpec
71     { nodeType  :: NodeType
72     , accept    :: [BlockSpec]
73     , translate :: [MapSpec]
74     , reserved  :: [BlockSpec]
75     , overlay   :: Maybe OverlaySpec
76     } deriving (Show)
77
78 data MapSpec 
79     = MapSpec
80         { srcBlock :: BlockSpec
81         , destNode :: !Identifier
82         , destBase :: !Address
83         } deriving (Show)
84
85 data OverlaySpec
86     = OverlaySpec
87         { over  :: !Identifier
88         , width :: !Integer
89         } deriving (Show)