mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +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