-- Create entities and architectures for them
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
+ let units = concat $ map VHDL.getLibraryUnits funcs
return $ AST.DesignFile
[]
- []
+ units
findBind :: [CoreBind] -> String -> Maybe CoreBind
findBind binds lookfor =
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 ()
nameFlatFunction ::
HsFunction
-> FuncData
- -> FuncData
+ -> VHDLState ()
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 ->
- let s = sigs flatfunc in
- let s' = map (\(Signal id Nothing) -> Signal id (Just $ "sig_" ++ (show id))) s in
- let flatfunc' = flatfunc { sigs = s' } in
- fdata { flatFunc = Just flatfunc' }
+ let s = flat_sigs flatfunc in
+ let s' = map (\(id, (SignalInfo Nothing ty)) -> (id, SignalInfo (Just $ "sig_" ++ (show id)) ty)) s in
+ 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.