struct conversion includes exprs in decls

This commit is contained in:
Zachary Snow 2020-06-13 22:14:53 -04:00
parent 3baa9cbac7
commit 682620b23f
3 changed files with 23 additions and 2 deletions

View File

@ -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 >>=

View File

@ -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

View File

@ -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