mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Added test for dynamic indexing within struct members
This commit is contained in:
		
							parent
							
								
									0d3423ddea
								
							
						
					
					
						commit
						1af7d6121f
					
				
					 2 changed files with 71 additions and 0 deletions
				
			
		
							
								
								
									
										67
									
								
								tests/svtypes/struct_dynamic_range.sv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								tests/svtypes/struct_dynamic_range.sv
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | ||||||
|  | module range_shift_mask( | ||||||
|  |     input logic [2:0] addr_i, | ||||||
|  |     input logic [7:0] data_i, | ||||||
|  |     input logic [2:0] addr_o, | ||||||
|  |     output logic [7:0] data_o | ||||||
|  | ); | ||||||
|  |     // (* nowrshmsk = 0 *)
 | ||||||
|  |     struct packed { | ||||||
|  |         logic [7:0] msb; | ||||||
|  |         logic [0:3][7:0] data; | ||||||
|  |         logic [7:0] lsb; | ||||||
|  |     } s; | ||||||
|  | 
 | ||||||
|  |     always_comb begin | ||||||
|  |         s = '1; | ||||||
|  |         s.data[addr_i] = data_i; | ||||||
|  |         data_o = s.data[addr_o]; | ||||||
|  |     end | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | module range_case( | ||||||
|  |     input logic [2:0] addr_i, | ||||||
|  |     input logic [7:0] data_i, | ||||||
|  |     input logic [2:0] addr_o, | ||||||
|  |     output logic [7:0] data_o | ||||||
|  | ); | ||||||
|  |     // (* nowrshmsk = 1 *)
 | ||||||
|  |     struct packed { | ||||||
|  |         logic [7:0] msb; | ||||||
|  |         logic [0:3][7:0] data; | ||||||
|  |         logic [7:0] lsb; | ||||||
|  |     } s; | ||||||
|  | 
 | ||||||
|  |     always_comb begin | ||||||
|  |         s = '1; | ||||||
|  |         s.data[addr_i] = data_i; | ||||||
|  |         data_o = s.data[addr_o]; | ||||||
|  |     end | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | module top; | ||||||
|  |     logic [7:0] data_shift_mask1; | ||||||
|  |     range_shift_mask range_shift_mask1(3'd1, 8'h7e, 3'd1, data_shift_mask1); | ||||||
|  |     logic [7:0] data_shift_mask2; | ||||||
|  |     range_shift_mask range_shift_mask2(3'd1, 8'h7e, 3'd2, data_shift_mask2); | ||||||
|  |     logic [7:0] data_shift_mask3; | ||||||
|  |     range_shift_mask range_shift_mask3(3'd1, 8'h7e, 3'd4, data_shift_mask3); | ||||||
|  | 
 | ||||||
|  |     always_comb begin | ||||||
|  |         assert(data_shift_mask1 === 8'h7e); | ||||||
|  |         assert(data_shift_mask2 === 8'hff); | ||||||
|  |         assert(data_shift_mask3 === 8'hxx); | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     logic [7:0] data_case1; | ||||||
|  |     range_case range_case1(3'd1, 8'h7e, 3'd1, data_case1); | ||||||
|  |     logic [7:0] data_case2; | ||||||
|  |     range_case range_case2(3'd1, 8'h7e, 3'd2, data_case2); | ||||||
|  |     logic [7:0] data_case3; | ||||||
|  |     range_case range_case3(3'd1, 8'h7e, 3'd4, data_case3); | ||||||
|  | 
 | ||||||
|  |     always_comb begin | ||||||
|  |         assert(data_case1 === 8'h7e); | ||||||
|  |         assert(data_case2 === 8'hff); | ||||||
|  |         assert(data_case3 === 8'hxx); | ||||||
|  |     end | ||||||
|  | endmodule | ||||||
							
								
								
									
										4
									
								
								tests/svtypes/struct_dynamic_range.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tests/svtypes/struct_dynamic_range.ys
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | read_verilog -sv struct_dynamic_range.sv | ||||||
|  | prep -top top | ||||||
|  | flatten | ||||||
|  | sat -enable_undef -verify -prove-asserts | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue