mirror of https://github.com/zachjs/sv2v.git
struct conversion includes exprs in decls
This commit is contained in:
parent
3baa9cbac7
commit
682620b23f
|
|
@ -31,7 +31,7 @@ convertDescription (description @ Part{}) =
|
|||
Part attrs extern kw lifetime name ports (items ++ funcs)
|
||||
where
|
||||
description' @ (Part attrs extern kw lifetime name ports items) =
|
||||
scopedConversion (traverseDeclM structs) traverseModuleItemM
|
||||
scopedConversion traverseDeclM' traverseModuleItemM
|
||||
traverseStmtM tfArgTypes description
|
||||
-- collect information about this description
|
||||
structs = execWriter $ collectModuleItemsM
|
||||
|
|
@ -45,6 +45,12 @@ convertDescription (description @ Part{}) =
|
|||
funcs = map packerFn $ filter isNeeded $ Map.keys structs
|
||||
isNeeded tf = Set.member (packerFnName tf) calledPackedFuncs
|
||||
-- helpers for the scoped traversal
|
||||
traverseDeclM' :: Decl -> State Types Decl
|
||||
traverseDeclM' decl = do
|
||||
decl' <- traverseDeclM structs decl
|
||||
res <- traverseModuleItemM $ MIPackageItem $ Decl decl'
|
||||
let MIPackageItem (Decl decl'') = res
|
||||
return decl''
|
||||
traverseModuleItemM :: ModuleItem -> State Types ModuleItem
|
||||
traverseModuleItemM item =
|
||||
traverseLHSsM traverseLHSM item >>=
|
||||
|
|
|
|||
|
|
@ -3,12 +3,22 @@ package top_pkg;
|
|||
endpackage
|
||||
|
||||
package foo_pkg;
|
||||
typedef struct packed {
|
||||
logic valid;
|
||||
logic value;
|
||||
} mask_t;
|
||||
typedef struct packed {
|
||||
logic valid;
|
||||
logic [top_pkg::AW-1:0] user;
|
||||
mask_t mask;
|
||||
} boo_t;
|
||||
endpackage
|
||||
|
||||
module top;
|
||||
foo_pkg::boo_t foo;
|
||||
assign foo = 19'b110_01001000_01110100;
|
||||
|
||||
wire [7:0] bar;
|
||||
parameter FLAG = 1;
|
||||
assign bar = FLAG ? foo.user[0+:8] : '1;
|
||||
endmodule
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
module top;
|
||||
localparam AW = 16;
|
||||
wire [16:0] foo;
|
||||
wire [AW+2:0] foo;
|
||||
assign foo = 19'b110_01001000_01110100;
|
||||
|
||||
wire [7:0] bar;
|
||||
parameter FLAG = 1;
|
||||
assign bar = FLAG ? foo[2+:8] : 8'hFF;
|
||||
endmodule
|
||||
|
|
|
|||
Loading…
Reference in New Issue