pparch (Just _) = text "VHDL architecture present"
instance Pretty Entity where
- pPrint (Entity args res decl) =
- text "Args: " $$ nest 10 (pPrint args)
+ pPrint (Entity id args res decl) =
+ text "Entity id: " $$ nest 10 (pPrint id)
+ $+$ text "Args: " $$ nest 10 (pPrint args)
$+$ text "Result: " $$ nest 10 (pPrint res)
$+$ ppdecl decl
where
import qualified Data.Foldable as Foldable
import qualified Maybe
+import qualified Control.Monad as Monad
import qualified Type
import qualified Name
import VHDLTypes
import FlattenTypes
import TranslatorTypes
+import Pretty
-- | Create an entity for a given function
createEntity ::
args' = map (fmap (mkMap sigs)) args
res' = fmap (mkMap sigs) res
ent_decl' = createEntityAST hsfunc args' res'
- entity' = Entity args' res' (Just ent_decl')
+ AST.EntityDec entity_id _ = ent_decl'
+ entity' = Entity entity_id args' res' (Just ent_decl')
in
setEntity hsfunc entity'
where
-> VHDLState AST.CompInsSm -- | The corresponding VHDL component instantiation.
mkCompInsSm app = do
+ let hsfunc = appFunc app
+ fdata_maybe <- getFunc hsfunc
+ let fdata = Maybe.fromMaybe
+ (error $ "Using function '" ++ (prettyShow hsfunc) ++ "' that is not in the session? This should not happen!")
+ fdata_maybe
+ let entity = Maybe.fromMaybe
+ (error $ "Using function '" ++ (prettyShow hsfunc) ++ "' without entity declaration? This should not happen!")
+ (funcEntity fdata)
+ let entity_id = ent_id entity
return $ AST.CompInsSm label (AST.IUEntity (AST.NSimple entity_id)) (AST.PMapAspect portmaps)
where
- entity_id = mkVHDLId "foo"
label = mkVHDLId "app"
portmaps = []
-- info on how to map a haskell value (argument / result) on to the entity's
-- ports.
data Entity = Entity {
+ ent_id :: AST.VHDLId, -- The id of the entity
ent_args :: [VHDLSignalMap], -- A mapping of each function argument to port names
ent_res :: VHDLSignalMap, -- A mapping of the function result to port names
ent_decl :: Maybe AST.EntityDec -- The actual entity declaration. Can be empty for builtin functions.