46debd51dd1509c915e2f6aae326374159afcd21
[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 String Module
33     } deriving (Show)
34
35 data Module = Module
36     { inputPorts   :: PortMap
37     , outputPorts  :: PortMap
38     , moduleInsts  :: ModuleInstMap
39     , nodeDecls    :: NodeDeclMap
40     } deriving (Show)
41
42 type PortMap = Map Identifier Integer
43 type ModuleInstMap = Map String ModuleInst
44 type NodeDeclMap = Map Identifier NodeSpec
45
46 data ModuleInst
47     = ModuleInst
48         { moduleName :: Identifier
49         , inPortMap  :: PortMappingMap
50         , outPortMap :: PortMappingMap
51         } deriving (Show)
52
53 type PortMappingMap = Map Identifier Identifier
54
55 type Identifier = String
56
57 data NodeSpec = NodeSpec
58     { nodeType  :: NodeType
59     , accept    :: [BlockSpec]
60     , translate :: [MapSpec]
61     , reserved  :: [BlockSpec]
62     , overlay   :: Maybe OverlaySpec
63     } deriving (Show)
64
65 data MapSpec 
66     = MapSpec
67         { srcBlock :: BlockSpec
68         , destNode :: !Identifier
69         , destBase :: !Address
70         } deriving (Show)
71
72 data OverlaySpec
73     = OverlaySpec
74         { over  :: !Identifier
75         , width :: !Integer
76         } deriving (Show)
77