mirror of https://github.com/zachjs/sv2v.git
convert unpacked parameter dimensions (closes #18)
This commit is contained in:
parent
1d216a2e0e
commit
1472ea0cfe
|
|
@ -633,11 +633,12 @@ Dimension :: { Range }
|
|||
: Range { $1 }
|
||||
| "[" Expr "]" { (simplify $ BinOp Sub $2 (Number "1"), Number "0") }
|
||||
|
||||
DeclAsgns :: { [(Identifier, Expr)] }
|
||||
DeclAsgns :: { [(Identifier, Expr, [Range])] }
|
||||
: DeclAsgn { [$1] }
|
||||
| DeclAsgns "," DeclAsgn { $1 ++ [$3] }
|
||||
DeclAsgn :: { (Identifier, Expr) }
|
||||
: Identifier "=" Expr { ($1, $3) }
|
||||
DeclAsgn :: { (Identifier, Expr, [Range]) }
|
||||
: Identifier "=" Expr { ($1, $3, []) }
|
||||
| Identifier DimensionsNonEmpty "=" Expr { ($1, $4, $2) }
|
||||
|
||||
Range :: { Range }
|
||||
: "[" Expr ":" Expr "]" { ($2, $4) }
|
||||
|
|
@ -730,10 +731,10 @@ DeclOrStmt :: { ([Decl], [Stmt]) }
|
|||
| ParameterDecl(";") { ($1, []) }
|
||||
|
||||
ParameterDecl(delim) :: { [Decl] }
|
||||
: ParameterDeclKW DeclAsgns delim { map (uncurry $ $1 (Implicit Unspecified [])) $2 }
|
||||
| ParameterDeclKW ParamType DeclAsgns delim { map (uncurry $ $1 ($2 )) $3 }
|
||||
| ParameterDeclKW Identifier Dimensions DeclAsgns delim { map (uncurry $ $1 (Alias (Nothing) $2 $3)) $4 }
|
||||
| ParameterDeclKW Identifier "::" Identifier Dimensions DeclAsgns delim { map (uncurry $ $1 (Alias (Just $2) $4 $5)) $6 }
|
||||
: ParameterDeclKW DeclAsgns delim { makeParamDecls $1 (Implicit Unspecified []) $2 }
|
||||
| ParameterDeclKW ParamType DeclAsgns delim { makeParamDecls $1 ($2 ) $3 }
|
||||
| ParameterDeclKW Identifier Dimensions DeclAsgns delim { makeParamDecls $1 (Alias (Nothing) $2 $3) $4 }
|
||||
| ParameterDeclKW Identifier "::" Identifier Dimensions DeclAsgns delim { makeParamDecls $1 (Alias (Just $2) $4 $5) $6 }
|
||||
ParameterDeclKW :: { Type -> Identifier -> Expr -> Decl }
|
||||
: "parameter" { Parameter }
|
||||
| "localparam" { Localparam }
|
||||
|
|
@ -995,4 +996,16 @@ toLHS expr =
|
|||
Just lhs -> lhs
|
||||
Nothing -> error $ "Parse error: cannot convert expression to LHS: "
|
||||
++ show expr
|
||||
|
||||
makeParamDecls
|
||||
:: (Type -> Identifier -> Expr -> Decl)
|
||||
-> Type
|
||||
-> [(Identifier, Expr, [Range])]
|
||||
-> [Decl]
|
||||
makeParamDecls kw t items =
|
||||
map mapper items
|
||||
where
|
||||
(tf, rs) = typeRanges t
|
||||
mapper (x, e, a) = kw (tf $ a ++ rs) x e
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
module top;
|
||||
localparam logic [7:0] init_val [4] = {8'd0, 8'd8, 8'd10, 8'd200};
|
||||
initial begin
|
||||
integer i, j;
|
||||
for (i = 0; i < 4; i += 1) begin
|
||||
$display(init_val[i]);
|
||||
for (j = 0; j < 8; j += 1) begin
|
||||
$display(init_val[i][j]);
|
||||
end
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
module top;
|
||||
localparam [31:0] init_val = {8'd0, 8'd8, 8'd10, 8'd200};
|
||||
initial begin : foo
|
||||
integer i, j;
|
||||
for (i = 0; i < 4; i += 1) begin
|
||||
$display(init_val[8*i+:8]);
|
||||
for (j = 0; j < 8; j += 1) begin
|
||||
$display(init_val[8*i+j]);
|
||||
end
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
Loading…
Reference in New Issue