mirror of https://github.com/zachjs/sv2v.git
fix handling of multi-dimensional integer array literals (resolves #113)
This commit is contained in:
parent
e6e62e8813
commit
7eed2fc58e
|
|
@ -199,20 +199,27 @@ convertExpr (IntegerVector t sg (r:rs)) (Pattern [(":default", e)]) =
|
|||
-- TODO: This is a conversion for concat array literals with elements
|
||||
-- that are unsized numbers. This probably belongs somewhere else.
|
||||
convertExpr (t @ IntegerVector{}) (Pattern items) =
|
||||
if all (null . fst) items
|
||||
then convertExpr t $ Concat $ map snd items
|
||||
if all null names
|
||||
then convertExpr t $ Concat exprs'
|
||||
else Pattern items
|
||||
where
|
||||
(names, exprs) = unzip items
|
||||
t' = dropInnerTypeRange t
|
||||
exprs' = map (convertExpr t') exprs
|
||||
convertExpr (t @ IntegerVector{}) (Concat exprs) =
|
||||
if all isUnsizedNumber exprs
|
||||
then Concat exprs'
|
||||
else Concat exprs
|
||||
then Concat $ map (Cast $ Left t') exprs
|
||||
else Concat $ map (convertExpr t') exprs
|
||||
where
|
||||
caster = Cast (Left $ dropInnerTypeRange t)
|
||||
exprs' = map caster exprs
|
||||
t' = dropInnerTypeRange t
|
||||
isUnsizedNumber :: Expr -> Bool
|
||||
isUnsizedNumber (Number n) = not $ numberIsSized n
|
||||
isUnsizedNumber (UniOp UniSub e) = isUnsizedNumber e
|
||||
isUnsizedNumber _ = False
|
||||
convertExpr (Implicit sg rs) expr =
|
||||
if null rs
|
||||
then expr
|
||||
else convertExpr (IntegerVector TBit sg rs) expr
|
||||
convertExpr (Struct packing fields (_:rs)) (Concat exprs) =
|
||||
Concat $ map (convertExpr (Struct packing fields rs)) exprs
|
||||
convertExpr (Struct packing fields (_:rs)) (Bit e _) =
|
||||
|
|
|
|||
|
|
@ -21,4 +21,11 @@ module top;
|
|||
`PRINT(H);
|
||||
`PRINT(I);
|
||||
end
|
||||
|
||||
localparam [1:0][0:1] P = '{'{default:'d1}, '{default:'d2}};
|
||||
localparam bit [1:0][0:1] Q = '{'{default:'d2}, '{default:'d1}};
|
||||
initial begin
|
||||
$display("%b %b %b", P, P[0], P[1]);
|
||||
$display("%b %b %b", Q, Q[0], Q[1]);
|
||||
end
|
||||
endmodule
|
||||
|
|
|
|||
|
|
@ -19,4 +19,11 @@ module top;
|
|||
$display("%b %2d %2d", H, $bits(H), 8);
|
||||
$display("%b %2d %2d", I, $bits(I), 1);
|
||||
end
|
||||
|
||||
localparam [3:0] P = 4'b1100;
|
||||
localparam [3:0] Q = 4'b0011;
|
||||
initial begin
|
||||
$display("%b %b %b", P, P[1:0], P[3:2]);
|
||||
$display("%b %b %b", Q, Q[1:0], Q[3:2]);
|
||||
end
|
||||
endmodule
|
||||
|
|
|
|||
Loading…
Reference in New Issue