mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
Implement SV structs.
This commit is contained in:
parent
aafaeb66df
commit
0b6b47ca67
9 changed files with 508 additions and 203 deletions
39
tests/svtypes/struct_simple.sv
Normal file
39
tests/svtypes/struct_simple.sv
Normal file
|
@ -0,0 +1,39 @@
|
|||
module top;
|
||||
localparam BITS=8;
|
||||
|
||||
struct packed {
|
||||
logic a;
|
||||
logic[BITS-1:0] b;
|
||||
byte c;
|
||||
logic x, y;
|
||||
} s;
|
||||
|
||||
struct packed signed {
|
||||
integer a;
|
||||
logic[15:0] b;
|
||||
logic[7:0] c;
|
||||
bit [7:0] d;
|
||||
} pack1;
|
||||
|
||||
assign s.a = '1;
|
||||
assign s.b = '1;
|
||||
assign s.c = 8'hAA;
|
||||
assign s.x = '1;
|
||||
logic[7:0] t;
|
||||
assign t = s.b;
|
||||
assign pack1.a = 42;
|
||||
assign pack1.b = 16'hAAAA;
|
||||
assign pack1.c = '1;
|
||||
assign pack1.d = 8'h55;
|
||||
|
||||
always_comb assert(s.a == 1'b1);
|
||||
always_comb assert(s.c == 8'hAA);
|
||||
always_comb assert(s.x == 1'b1);
|
||||
always_comb assert(t == 8'hFF);
|
||||
always_comb assert(pack1.a == 42);
|
||||
always_comb assert(pack1.b == 16'hAAAA);
|
||||
always_comb assert(pack1.c == 8'hFF);
|
||||
always_comb assert(pack1[15:8] == 8'hFF);
|
||||
always_comb assert(pack1.d == 8'h55);
|
||||
|
||||
endmodule
|
42
tests/svtypes/typedef_struct.sv
Normal file
42
tests/svtypes/typedef_struct.sv
Normal file
|
@ -0,0 +1,42 @@
|
|||
package p;
|
||||
|
||||
typedef struct packed {
|
||||
byte a;
|
||||
byte b;
|
||||
} p_t;
|
||||
|
||||
endpackage
|
||||
|
||||
|
||||
module top;
|
||||
|
||||
typedef logic[7:0] t_t;
|
||||
|
||||
typedef struct packed {
|
||||
bit a;
|
||||
logic[7:0] b;
|
||||
t_t t;
|
||||
} s_t;
|
||||
|
||||
s_t s;
|
||||
s_t s1;
|
||||
|
||||
p::p_t ps;
|
||||
|
||||
assign s.a = '1;
|
||||
assign s.b = '1;
|
||||
assign s.t = 8'h55;
|
||||
assign s1 = s;
|
||||
assign ps.a = 8'hAA;
|
||||
assign ps.b = 8'h55;
|
||||
|
||||
always_comb begin
|
||||
assert(s.a == 1'b1);
|
||||
assert(s.b == 8'hFF);
|
||||
assert(s.t == 8'h55);
|
||||
assert(s1.t == 8'h55);
|
||||
assert(ps.a == 8'hAA);
|
||||
assert(ps.b == 8'h55);
|
||||
end
|
||||
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue