From 4d0d652c8677552727c6e6c92958b767b6fadcc8 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Wed, 11 Sep 2019 20:45:41 +0200 Subject: [PATCH] enum preserves alias base type dimensions --- src/Convert/Bits.hs | 2 +- src/Convert/Enum.hs | 1 + test/basic/enum.sv | 14 ++++++++++++++ test/basic/enum.v | 20 +++++++++++--------- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/Convert/Bits.hs b/src/Convert/Bits.hs index 5f01531..933de80 100644 --- a/src/Convert/Bits.hs +++ b/src/Convert/Bits.hs @@ -90,7 +90,7 @@ convertExpr info (Bits (Right e)) = Stream _ _ exprs -> convertExpr info $ Bits $ Right $ Concat exprs Number n -> case elemIndex '\'' n of - Nothing -> Bits $ Right $ Number n + Nothing -> Number "32" Just idx -> Number $ take idx n _ -> Bits $ Right e convertExpr _ other = other diff --git a/src/Convert/Enum.hs b/src/Convert/Enum.hs index f037720..8e300f1 100644 --- a/src/Convert/Enum.hs +++ b/src/Convert/Enum.hs @@ -108,6 +108,7 @@ toBaseType :: Maybe Type -> Type toBaseType Nothing = defaultType toBaseType (Just (Implicit _ rs)) = fst (typeRanges defaultType) rs +toBaseType (Just t @ (Alias _ _ _)) = t toBaseType (Just t) = if null rs then tf [(Number "0", Number "0")] diff --git a/test/basic/enum.sv b/test/basic/enum.sv index b64c436..febbda6 100644 --- a/test/basic/enum.sv +++ b/test/basic/enum.sv @@ -26,11 +26,21 @@ typedef enum [0:0] { G_1, G_2 } EnumG; +typedef logic [3:0] Foo_t; +typedef enum Foo_t { + H_1 = 'b1, H_2 = 'b0 +} EnumH; + `define PRINT(name, val) \ dummy``name = name``_``val; \ $display("%h %h %0d %0d", \ name``_``val, dummy``name, $bits(name``_``val), $bits(dummy``name)); +`define PRINT_UNSIZED(name, val) \ + dummy``name = name``_``val; \ + $display("%h %h %0d", \ + name``_``val, dummy``name, $bits(dummy``name)); + module top; EnumA dummyA; EnumB dummyB; @@ -39,6 +49,7 @@ module top; EnumE dummyE; EnumF dummyF; EnumG dummyG; + EnumH dummyH; initial begin @@ -71,5 +82,8 @@ module top; `PRINT(G, 1) `PRINT(G, 2) + `PRINT_UNSIZED(H, 1) + `PRINT_UNSIZED(H, 2) + end endmodule diff --git a/test/basic/enum.v b/test/basic/enum.v index 1bfbea2..595716d 100644 --- a/test/basic/enum.v +++ b/test/basic/enum.v @@ -1,6 +1,12 @@ `define PRINT(name, val) \ + dummy``name = val; \ $display("%h %h %0d %0d", \ - val, val, $bits(dummy``name), $bits(dummy``name)); + val, dummy``name, $bits(val), $bits(dummy``name)); + +`define PRINT_UNSIZED(name, val) \ + dummy``name = val; \ + $display("%h %h %0d", \ + val, dummy``name, $bits(dummy``name)); module top; @@ -11,17 +17,10 @@ module top; reg [31:0] dummyE; reg [0:0] dummyF; reg [0:0] dummyG; + reg [3:0] dummyH; initial begin - dummyA = 'b10; - dummyB = 'b11; - dummyC = 'b10011; - dummyD = 'b10010; - dummyE = 'b11; - dummyF = 'b1; - dummyG = 'b1; - `PRINT(A, 0) `PRINT(A, 1) `PRINT(A, 2) @@ -51,6 +50,9 @@ module top; `PRINT(G, 1'b0) `PRINT(G, 1'b1) + `PRINT_UNSIZED(H, 'b1) + `PRINT_UNSIZED(H, 'b0) + end endmodule