mirror of https://github.com/zachjs/sv2v.git
multipack conversion visits exprs within types
This commit is contained in:
parent
9bab0448e3
commit
4ce177c074
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed crash when converting multi-dimensional arrays or arrays of structs or
|
||||
unions used in certain expressions involving unbased unsized literals
|
||||
* Fixed module-level localparams being needlessly inlined when forming longest
|
||||
static prefixes, which could cause deep recursion and run out of memory on
|
||||
some designs
|
||||
|
|
|
|||
|
|
@ -153,7 +153,14 @@ traverseLHSM = traverseNestedLHSsM traverseLHSSingleM
|
|||
return lhs'
|
||||
|
||||
convertExprM :: Expr -> Scoper TypeInfo Expr
|
||||
convertExprM = embedScopes convertExpr
|
||||
convertExprM =
|
||||
traverseExprTypesM convertTypeM >=>
|
||||
embedScopes convertExpr
|
||||
|
||||
convertTypeM :: Type -> Scoper TypeInfo Type
|
||||
convertTypeM =
|
||||
traverseNestedTypesM $ traverseTypeExprsM $
|
||||
traverseNestedExprsM convertExprM
|
||||
|
||||
convertExpr :: Scopes TypeInfo -> Expr -> Expr
|
||||
convertExpr scopes =
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
module mod(inp, out);
|
||||
parameter COUNT = 4;
|
||||
typedef struct packed {
|
||||
logic a, b, c;
|
||||
} struct_t;
|
||||
typedef union packed {
|
||||
logic [2:0] raw;
|
||||
struct_t fields;
|
||||
} union_t;
|
||||
input union_t [COUNT - 1:0] inp;
|
||||
output logic [COUNT - 1:0] out;
|
||||
for (genvar i = 0; i < COUNT; i += 1)
|
||||
always_comb
|
||||
if ((inp[i].raw & 3'b011) != '0)
|
||||
out[i] = inp[i].fields.a ^ inp[i].fields.b;
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
module mod(inp, out);
|
||||
parameter COUNT = 1;
|
||||
input wire [COUNT * 3 - 1:0] inp;
|
||||
output reg [COUNT - 1:0] out;
|
||||
genvar i;
|
||||
generate
|
||||
for (i = 0; i < COUNT; i = i + 1)
|
||||
always @*
|
||||
if (inp[i * 3] | inp[i * 3 + 1])
|
||||
out[i] = inp[i * 3 + 2] ^ inp[i * 3 + 1];
|
||||
endgenerate
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
module top;
|
||||
localparam COUNT = 4;
|
||||
reg [COUNT * 3 - 1:0] inp;
|
||||
wire [COUNT - 1:0] out;
|
||||
mod #(COUNT) m(inp, out);
|
||||
initial begin : blk
|
||||
integer i;
|
||||
$monitor("%2d %b %b", $time, inp, out);
|
||||
for (i = 0; i < 2 ** (COUNT * 3); i = i + 1)
|
||||
#1 inp = i;
|
||||
end
|
||||
endmodule
|
||||
Loading…
Reference in New Issue