projects
/
matthijs
/
master-project
/
cλash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make application names unique.
[matthijs/master-project/cλash.git]
/
Translator.hs
diff --git
a/Translator.hs
b/Translator.hs
index 78c3a6f08be46eec78cde6662c6e0c73c9ed85c9..cccac4c08047178ec368a5a992d3c0eac48f4a0d 100644
(file)
--- a/
Translator.hs
+++ b/
Translator.hs
@@
-37,6
+37,7
@@
import HsValueMap
import Pretty
import Flatten
import FlattenTypes
import Pretty
import Flatten
import FlattenTypes
+import VHDLTypes
import qualified VHDL
main =
import qualified VHDL
main =
@@
-70,6
+71,7
@@
main =
mapM processBind binds
modFuncs nameFlatFunction
modFuncs VHDL.createEntity
mapM processBind binds
modFuncs nameFlatFunction
modFuncs VHDL.createEntity
+ modFuncs VHDL.createArchitecture
-- Extract the library units generated from all the functions in the
-- session.
funcs <- getFuncs
-- Extract the library units generated from all the functions in the
-- session.
funcs <- getFuncs
@@
-115,7
+117,7
@@
flattenBind hsfunc bind@(NonRec var expr) = do
let flatfunc = flattenFunction hsfunc bind
addFunc hsfunc
setFlatFunc hsfunc flatfunc
let flatfunc = flattenFunction hsfunc bind
addFunc hsfunc
setFlatFunc hsfunc flatfunc
- let used_hsfuncs = map appFunc (apps flatfunc)
+ let used_hsfuncs = map appFunc (
flat_
apps flatfunc)
State.mapM resolvFunc used_hsfuncs
return ()
State.mapM resolvFunc used_hsfuncs
return ()
@@
-176,19
+178,19
@@
mkHsFunction f ty =
nameFlatFunction ::
HsFunction
-> FuncData
nameFlatFunction ::
HsFunction
-> FuncData
- ->
FuncData
+ ->
VHDLState ()
nameFlatFunction hsfunc fdata =
let func = flatFunc fdata in
case func of
-- Skip (builtin) functions without a FlatFunction
nameFlatFunction hsfunc fdata =
let func = flatFunc fdata in
case func of
-- Skip (builtin) functions without a FlatFunction
- Nothing ->
fdata
+ Nothing ->
do return ()
-- Name the signals in all other functions
Just flatfunc ->
-- Name the signals in all other functions
Just flatfunc ->
- let s = sigs flatfunc in
+ let s =
flat_
sigs flatfunc in
let s' = map (\(id, (SignalInfo Nothing ty)) -> (id, SignalInfo (Just $ "sig_" ++ (show id)) ty)) s in
let s' = map (\(id, (SignalInfo Nothing ty)) -> (id, SignalInfo (Just $ "sig_" ++ (show id)) ty)) s in
- let flatfunc' = flatfunc { sigs = s' } in
- fdata { flatFunc = Just flatfunc' }
+ let flatfunc' = flatfunc {
flat_
sigs = s' } in
+ setFlatFunc hsfunc flatfunc'
-- | Splits a tuple type into a list of element types, or Nothing if the type
-- is not a tuple type.
-- | Splits a tuple type into a list of element types, or Nothing if the type
-- is not a tuple type.
@@
-210,13
+212,20
@@
type PortMap = HsValueMap (String, AST.TypeMark)
-- | A consise representation of a builtin function
data BuiltIn = BuiltIn String [PortMap] PortMap
-- | A consise representation of a builtin function
data BuiltIn = BuiltIn String [PortMap] PortMap
+-- | Map a port specification of a builtin function to a VHDL Signal to put in
+-- a VHDLSignalMap
+toVHDLSignalMap :: HsValueMap (String, AST.TypeMark) -> VHDLSignalMap
+toVHDLSignalMap = fmap (\(name, ty) -> (VHDL.mkVHDLId name, ty))
+
-- | Translate a concise representation of a builtin function to something
-- that can be put into FuncMap directly.
addBuiltIn :: BuiltIn -> VHDLState ()
addBuiltIn (BuiltIn name args res) = do
addFunc hsfunc
-- | Translate a concise representation of a builtin function to something
-- that can be put into FuncMap directly.
addBuiltIn :: BuiltIn -> VHDLState ()
addBuiltIn (BuiltIn name args res) = do
addFunc hsfunc
+ setEntity hsfunc entity
where
hsfunc = HsFunction name (map useAsPort args) (useAsPort res)
where
hsfunc = HsFunction name (map useAsPort args) (useAsPort res)
+ entity = Entity (VHDL.mkVHDLId name) (map toVHDLSignalMap args) (toVHDLSignalMap res) Nothing
builtin_funcs =
[
builtin_funcs =
[