diff --git a/src/Convert/Struct.hs b/src/Convert/Struct.hs index 883f3cd..2e131a8 100644 --- a/src/Convert/Struct.hs +++ b/src/Convert/Struct.hs @@ -261,6 +261,11 @@ convertAsgn structs types (lhs, expr) = -- try expression conversion by looking at the *outermost* type first convertExpr :: Type -> Expr -> Expr + convertExpr t (Mux c e1 e2) = + Mux c e1' e2' + where + e1' = convertExpr t e1 + e2' = convertExpr t e2 -- 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 [(":default", e)]) = diff --git a/test/basic/struct_tern.sv b/test/basic/struct_tern.sv new file mode 100644 index 0000000..d8fd064 --- /dev/null +++ b/test/basic/struct_tern.sv @@ -0,0 +1,12 @@ +module Example(flag, out); + typedef struct packed { + logic a, b; + } T; + output T out; + input logic flag; + assign out = + flag + ? '{ a: 1'b1, b: 1'b0 } + : '{ a: 1'b1, b: 1'b1 } + ; +endmodule diff --git a/test/basic/struct_tern.v b/test/basic/struct_tern.v new file mode 100644 index 0000000..96a4c5e --- /dev/null +++ b/test/basic/struct_tern.v @@ -0,0 +1,5 @@ +module Example(flag, out); + output wire [1:0] out; + input wire flag; + assign out = flag ? 2'b10 : 2'b11; +endmodule diff --git a/test/basic/struct_tern_tb.v b/test/basic/struct_tern_tb.v new file mode 100644 index 0000000..37f8cfb --- /dev/null +++ b/test/basic/struct_tern_tb.v @@ -0,0 +1,12 @@ +module top; + reg flag; + wire [1:0] out; + Example example(flag, out); + initial begin + $monitor("%2d %b %b", $time, flag, out); + #1 flag = 0; + #1 flag = 1; + #1 flag = 0; + #1 flag = 1; + end +endmodule