simplify handles shadowing via vars and genvars

This commit is contained in:
Zachary Snow 2022-12-24 00:42:12 -07:00
parent 72ab639699
commit 9de4d44305
3 changed files with 22 additions and 2 deletions

View File

@ -42,6 +42,8 @@ traverseDeclM decl = do
where t = IntegerVector TLogic sg rs
Param Localparam t x e ->
insertExpr x $ Cast (Left t) e
Variable _ _ x _ _ -> insertElem x Nil
Net _ _ _ _ x _ _ -> insertElem x Nil
_ -> return ()
return decl'
@ -66,6 +68,8 @@ isSimpleExpr (Cast Left{} e) = isSimpleExpr e
isSimpleExpr _ = False
traverseModuleItemM :: ModuleItem -> Scoper Expr ModuleItem
traverseModuleItemM (Genvar x) =
insertElem x Nil >> return (Genvar x)
traverseModuleItemM (Instance m p x rs l) = do
p' <- mapM paramBindingMapper p
traverseExprsM traverseExprM $ Instance m p' x rs l
@ -147,8 +151,8 @@ substitute scopes expr =
substitute' :: Expr -> Expr
substitute' (Ident x) =
case lookupElem scopes x of
Nothing -> Ident x
Just (_, _, e) -> e
Just (_, _, e) | e /= Nil -> e
_ -> Ident x
substitute' other =
traverseSinglyNestedExprs substitute' other

View File

@ -0,0 +1,8 @@
module top;
localparam i = 1234;
function automatic integer f;
input integer i;
f = i + 1;
endfunction
initial $display(i, f(0), f(i + 1));
endmodule

View File

@ -0,0 +1,8 @@
module top;
localparam i = 1234;
if (1) begin
genvar i;
for (i = 0; i < 10; i = i + 1)
initial $display(i > 5 ? i + 100 : i - 100);
end
endmodule