3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-23 00:55:32 +00:00

Implement SV structs.

This commit is contained in:
Peter Crozier 2020-05-08 14:40:49 +01:00
parent aafaeb66df
commit 0b6b47ca67
9 changed files with 508 additions and 203 deletions

View 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

View 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