mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	* When used with -tempinduct mode, -seq <N> causes assertions to be ignored in the first N steps. While this has uses for reset modelling, for these test cases it is unnecessary and could lead to failures slipping through uncaught
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			913 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			913 B
		
	
	
	
		
			Text
		
	
	
	
	
	
read_verilog -sv << EOF
 | 
						|
package p;
 | 
						|
typedef struct packed {
 | 
						|
  logic a;
 | 
						|
  logic b;
 | 
						|
} struct_t;
 | 
						|
 | 
						|
typedef struct packed {
 | 
						|
  struct_t g;
 | 
						|
  logic [2:0] h;
 | 
						|
} nested_struct_t;
 | 
						|
 | 
						|
typedef union packed {
 | 
						|
  logic [4:0] x;
 | 
						|
} nested_union_t;
 | 
						|
 | 
						|
parameter struct_t c = {1'b1, 1'b0};
 | 
						|
parameter nested_struct_t x = {{1'b1, 1'b0}, 1'b1, 1'b1, 1'b1};
 | 
						|
endpackage
 | 
						|
 | 
						|
module dut ();
 | 
						|
parameter p::struct_t d = p::c;
 | 
						|
parameter p::nested_struct_t i = p::x;
 | 
						|
 | 
						|
parameter p::nested_union_t u = {5'b11001};
 | 
						|
 | 
						|
localparam e = d.a;
 | 
						|
localparam f = d.b;
 | 
						|
 | 
						|
localparam j = i.g.a;
 | 
						|
localparam k = i.g.b;
 | 
						|
localparam l = i.h;
 | 
						|
localparam m = i.g;
 | 
						|
 | 
						|
localparam o = u.x;
 | 
						|
 | 
						|
always_comb begin
 | 
						|
  assert(d == 2'b10);
 | 
						|
  assert(e == 1'b1);
 | 
						|
  assert(f == 1'b0);
 | 
						|
  assert(j == 1'b1);
 | 
						|
  assert(k == 1'b0);
 | 
						|
  assert(l == 3'b111);
 | 
						|
  assert(m == 2'b10);
 | 
						|
  assert(u == 5'b11001);
 | 
						|
end
 | 
						|
endmodule
 | 
						|
EOF
 | 
						|
hierarchy; proc; opt
 | 
						|
async2sync
 | 
						|
sat -verify -tempinduct -prove-asserts -show-all
 |