defDst :: SignalId
} deriving (Show, Eq)
+-- | Is the given SigDef a FApp?
+is_FApp :: SigDef -> Bool
+is_FApp d = case d of
+ (FApp _ _ _) -> True
+ _ -> False
+
-- | An expression on signals
data SignalExpr =
EqLit SignalId String -- ^ Is the given signal equal to the given (VHDL) literal
+ | Literal String -- ^ A literal value
+ | Eq SignalId SignalId -- ^ A comparison between to signals
deriving (Show, Eq)
-- Returns the function used by the given SigDef, if any
data SignalInfo = SignalInfo {
sigName :: Maybe String,
sigUse :: SigUse,
- sigTy :: Type.Type
+ sigTy :: Type.Type,
+ nameHints :: [String]
}
-- | A flattened function
genSignalId use ty = do
(defs, sigs, n) <- State.get
-- Generate a new numbered but unnamed signal
- let s = (n, SignalInfo Nothing use ty)
+ let s = (n, SignalInfo Nothing use ty [])
State.put (defs, s:sigs, n+1)
return n
+-- | Add a name hint to the given signal
+addNameHint :: String -> SignalId -> FlattenState ()
+addNameHint hint id = do
+ info <- getSignalInfo id
+ let hints = nameHints info
+ if hint `elem` hints
+ then do
+ return ()
+ else do
+ let hints' = (hint:hints)
+ setSignalInfo id (info {nameHints = hints'})
+
-- | Returns the SignalInfo for the given signal. Errors if the signal is not
-- known in the session.
getSignalInfo :: SignalId -> FlattenState SignalInfo
(defs, sigs, n) <- State.get
let sigs' = map (\(id, info) -> (id, if id == id' then info' else info)) sigs
State.put (defs, sigs', n)
+
+-- vim: set ts=8 sw=2 sts=2 expandtab: