From: Matthijs Kooijman Date: Mon, 16 Feb 2009 12:01:28 +0000 (+0100) Subject: Let mkCompInsSm look up the actual VHDL entity id. X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=b2a68b424663d5a909791080c416a54088321936;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git Let mkCompInsSm look up the actual VHDL entity id. Previously, it would always instantiate "foo". This also adds another entity id field to the "Entity" type, since builtin function don't have a VHDL EntityDec, but do need an id. --- diff --git a/Pretty.hs b/Pretty.hs index 78876b3..2bf57f7 100644 --- a/Pretty.hs +++ b/Pretty.hs @@ -74,8 +74,9 @@ instance Pretty FuncData where 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 diff --git a/VHDL.hs b/VHDL.hs index 8c0a2ec..38a3bd6 100644 --- a/VHDL.hs +++ b/VHDL.hs @@ -5,6 +5,7 @@ module VHDL where import qualified Data.Foldable as Foldable import qualified Maybe +import qualified Control.Monad as Monad import qualified Type import qualified Name @@ -16,6 +17,7 @@ import qualified ForSyDe.Backend.VHDL.AST as AST import VHDLTypes import FlattenTypes import TranslatorTypes +import Pretty -- | Create an entity for a given function createEntity :: @@ -38,7 +40,8 @@ createEntity hsfunc fdata = 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 @@ -128,9 +131,17 @@ mkCompInsSm :: -> 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 = [] diff --git a/VHDLTypes.hs b/VHDLTypes.hs index 4469647..9ae197c 100644 --- a/VHDLTypes.hs +++ b/VHDLTypes.hs @@ -13,6 +13,7 @@ type VHDLSignalMap = SignalMap (AST.VHDLId, AST.TypeMark) -- 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.