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
|
-- TODO: This is a conversion for concat array literals with elements
|
||||||
-- that are unsized numbers. This probably belongs somewhere else.
|
-- that are unsized numbers. This probably belongs somewhere else.
|
||||||
convertExpr (t @ IntegerVector{}) (Pattern items) =
|
convertExpr (t @ IntegerVector{}) (Pattern items) =
|
||||||
if all (null . fst) items
|
if all null names
|
||||||
then convertExpr t $ Concat $ map snd items
|
then convertExpr t $ Concat exprs'
|
||||||
else Pattern items
|
else Pattern items
|
||||||
|
where
|
||||||
|
(names, exprs) = unzip items
|
||||||
|
t' = dropInnerTypeRange t
|
||||||
|
exprs' = map (convertExpr t') exprs
|
||||||
convertExpr (t @ IntegerVector{}) (Concat exprs) =
|
convertExpr (t @ IntegerVector{}) (Concat exprs) =
|
||||||
if all isUnsizedNumber exprs
|
if all isUnsizedNumber exprs
|
||||||
then Concat exprs'
|
then Concat $ map (Cast $ Left t') exprs
|
||||||
else Concat exprs
|
else Concat $ map (convertExpr t') exprs
|
||||||
where
|
where
|
||||||
caster = Cast (Left $ dropInnerTypeRange t)
|
t' = dropInnerTypeRange t
|
||||||
exprs' = map caster exprs
|
|
||||||
isUnsizedNumber :: Expr -> Bool
|
isUnsizedNumber :: Expr -> Bool
|
||||||
isUnsizedNumber (Number n) = not $ numberIsSized n
|
isUnsizedNumber (Number n) = not $ numberIsSized n
|
||||||
isUnsizedNumber (UniOp UniSub e) = isUnsizedNumber e
|
isUnsizedNumber (UniOp UniSub e) = isUnsizedNumber e
|
||||||
isUnsizedNumber _ = False
|
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) =
|
convertExpr (Struct packing fields (_:rs)) (Concat exprs) =
|
||||||
Concat $ map (convertExpr (Struct packing fields rs)) exprs
|
Concat $ map (convertExpr (Struct packing fields rs)) exprs
|
||||||
convertExpr (Struct packing fields (_:rs)) (Bit e _) =
|
convertExpr (Struct packing fields (_:rs)) (Bit e _) =
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,11 @@ module top;
|
||||||
`PRINT(H);
|
`PRINT(H);
|
||||||
`PRINT(I);
|
`PRINT(I);
|
||||||
end
|
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
|
endmodule
|
||||||
|
|
|
||||||
|
|
@ -19,4 +19,11 @@ module top;
|
||||||
$display("%b %2d %2d", H, $bits(H), 8);
|
$display("%b %2d %2d", H, $bits(H), 8);
|
||||||
$display("%b %2d %2d", I, $bits(I), 1);
|
$display("%b %2d %2d", I, $bits(I), 1);
|
||||||
end
|
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
|
endmodule
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue