From 799141af42e398afb29bf10f0fc37d617e1fe0b3 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sat, 15 Feb 2020 17:14:57 -0500 Subject: [PATCH] enum conversion covers nested module items (resolves #70) --- src/Convert/Enum.hs | 5 +++-- test/basic/enum.sv | 29 +++++++++++++++++++++++++++++ test/basic/enum.v | 21 +++++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/Convert/Enum.hs b/src/Convert/Enum.hs index adacd1e..bf013de 100644 --- a/src/Convert/Enum.hs +++ b/src/Convert/Enum.hs @@ -83,8 +83,9 @@ convergeUsage items enums = (usedEnums, unusedEnums) = partition isUsed enums enumItems = map MIPackageItem $ map toItem usedEnums isUsed ((_, x), _) = Set.member x usedIdents - usedIdents = execWriter $ - mapM (collectExprsM $ collectNestedExprsM collectIdent) $ items + usedIdents = execWriter $ mapM collectModuleItemM items + collectModuleItemM = collectNestedModuleItemsM $ collectExprsM $ + collectNestedExprsM collectIdent collectIdent :: Expr -> Writer Idents () collectIdent (Ident x) = tell $ Set.singleton x collectIdent _ = return () diff --git a/test/basic/enum.sv b/test/basic/enum.sv index b48a64e..8d47efe 100644 --- a/test/basic/enum.sv +++ b/test/basic/enum.sv @@ -35,6 +35,14 @@ typedef enum int { I_1, I_2 } EnumI; +typedef enum int { + J_1, J_2, J_3 +} EnumJ; + +typedef enum int { + Z_1, Z_2, Z_3 +} EnumZ; + `define PRINT(name, val) \ dummy``name = name``_``val; \ $display("%h %h %0d %0d", \ @@ -94,4 +102,25 @@ module top; `PRINT_UNSIZED(I, 2) end + + parameter USE_J = 1; + generate + if (USE_J) begin + EnumJ dummyJ; + initial begin + `PRINT(J, 1) + `PRINT(J, 2) + `PRINT(J, 3) + end + end + else begin + EnumZ dummyZ; + initial begin + `PRINT(Z, 1) + `PRINT(Z, 2) + `PRINT(Z, 3) + end + end + endgenerate + endmodule diff --git a/test/basic/enum.v b/test/basic/enum.v index 3e876b5..a390ba6 100644 --- a/test/basic/enum.v +++ b/test/basic/enum.v @@ -58,5 +58,26 @@ module top; `PRINT_UNSIZED(I, 'b1) end + + parameter USE_J = 1; + generate + if (USE_J) begin + reg [31:0] dummyJ; + initial begin + `PRINT(J, 0) + `PRINT(J, 1) + `PRINT(J, 2) + end + end + else begin + reg [31:0] dummyZ; + initial begin + `PRINT(Z, 0) + `PRINT(Z, 1) + `PRINT(Z, 2) + end + end + endgenerate + endmodule