Commit 7883e263 by Zachary Snow

several conversion bug fixes

- convert default pattern used to fill a vector
- convert Logic in parameter and localparam types
- interface conversion should happen early for type resolution later on
- interface conversion handles renaming of usages of inlined decls
parent dc759dbb
...@@ -28,7 +28,6 @@ type Phase = AST -> AST ...@@ -28,7 +28,6 @@ type Phase = AST -> AST
phases :: [Job.Exclude] -> [Phase] phases :: [Job.Exclude] -> [Phase]
phases excludes = phases excludes =
extras ++
[ Convert.AsgnOp.convert [ Convert.AsgnOp.convert
, Convert.FuncRet.convert , Convert.FuncRet.convert
, Convert.Enum.convert , Convert.Enum.convert
...@@ -40,7 +39,7 @@ phases excludes = ...@@ -40,7 +39,7 @@ phases excludes =
, Convert.Typedef.convert , Convert.Typedef.convert
, Convert.UnbasedUnsized.convert , Convert.UnbasedUnsized.convert
, Convert.Unique.convert , Convert.Unique.convert
] ] ++ extras
where where
availableExcludes = availableExcludes =
[ (Job.Interface, Convert.Interface.convert) [ (Job.Interface, Convert.Interface.convert)
......
...@@ -112,13 +112,13 @@ convertDescription interfaces (Part extern Module lifetime name ports items) = ...@@ -112,13 +112,13 @@ convertDescription interfaces (Part extern Module lifetime name ports items) =
convertExpr :: Expr -> Expr convertExpr :: Expr -> Expr
convertExpr (orig @ (Dot (Ident x) y)) = convertExpr (orig @ (Dot (Ident x) y)) =
if Map.member x modports if Map.member x modports || Map.member x instances
then Ident (x ++ "_" ++ y) then Ident (x ++ "_" ++ y)
else orig else orig
convertExpr other = other convertExpr other = other
convertLHS :: LHS -> LHS convertLHS :: LHS -> LHS
convertLHS (orig @ (LHSDot (LHSIdent x) y)) = convertLHS (orig @ (LHSDot (LHSIdent x) y)) =
if Map.member x modports if Map.member x modports || Map.member x instances
then LHSIdent (x ++ "_" ++ y) then LHSIdent (x ++ "_" ++ y)
else orig else orig
convertLHS other = other convertLHS other = other
......
...@@ -47,6 +47,10 @@ convertDescription orig = ...@@ -47,6 +47,10 @@ convertDescription orig =
convertModuleItem other = other convertModuleItem other = other
-- all other logics (i.e. inside of functions) become regs -- all other logics (i.e. inside of functions) become regs
convertDecl :: Decl -> Decl convertDecl :: Decl -> Decl
convertDecl (Parameter (IntegerVector TLogic sg rs) x e) =
Parameter (Implicit sg rs) x e
convertDecl (Localparam (IntegerVector TLogic sg rs) x e) =
Localparam (Implicit sg rs) x e
convertDecl (Variable d (IntegerVector TLogic sg rs) x a me) = convertDecl (Variable d (IntegerVector TLogic sg rs) x a me) =
Variable d (IntegerVector TReg sg rs) x a me Variable d (IntegerVector TReg sg rs) x a me
convertDecl other = other convertDecl other = other
......
...@@ -175,7 +175,14 @@ convertAsgn structs types (lhs, expr) = ...@@ -175,7 +175,14 @@ convertAsgn structs types (lhs, expr) =
-- try expression conversion by looking at the *outermost* type first -- try expression conversion by looking at the *outermost* type first
convertExpr :: Type -> Expr -> Expr convertExpr :: Type -> Expr -> Expr
convertExpr (Struct _ fields []) (Pattern [(Just "default", e)]) = -- TODO: This is really a conversion for using default patterns to
-- populate arrays. Maybe this should be somewhere else?
convertExpr (IntegerVector t sg (r:rs)) (Pattern [(Just "default", e)]) =
Repeat (rangeSize r) [e']
where e' = convertExpr (IntegerVector t sg rs) e
convertExpr (Struct (Packed sg) fields (_:rs)) (Bit e _) =
convertExpr (Struct (Packed sg) fields rs) e
convertExpr (Struct (Packed _) fields _) (Pattern [(Just "default", e)]) =
Concat $ take (length fields) (repeat e) Concat $ take (length fields) (repeat e)
convertExpr (Struct (Packed sg) fields []) (Pattern items) = convertExpr (Struct (Packed sg) fields []) (Pattern items) =
if Map.notMember structTf structs if Map.notMember structTf structs
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment