mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	sv: fix size cast clipping expression width
This commit is contained in:
		
							parent
							
								
									cb17eeaf50
								
							
						
					
					
						commit
						8c509a5659
					
				
					 3 changed files with 11 additions and 1 deletions
				
			
		|  | @ -16,6 +16,8 @@ Yosys 0.11 .. Yosys 0.12 | ||||||
|     - Support parameters using struct as a wiretype |     - Support parameters using struct as a wiretype | ||||||
|     - Fixed regression preventing the use array querying functions in case |     - Fixed regression preventing the use array querying functions in case | ||||||
|       expressions and case item expressions |       expressions and case item expressions | ||||||
|  |     - Fixed static size casts inadvertently limiting the result width of binary | ||||||
|  |       operations | ||||||
| 
 | 
 | ||||||
|  * New commands and options |  * New commands and options | ||||||
|     - Added "-genlib" option to "abc" pass |     - Added "-genlib" option to "abc" pass | ||||||
|  |  | ||||||
|  | @ -932,7 +932,8 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun | ||||||
| 		if (children.at(0)->type != AST_CONSTANT) | 		if (children.at(0)->type != AST_CONSTANT) | ||||||
| 			log_file_error(filename, location.first_line, "Static cast with non constant expression!\n"); | 			log_file_error(filename, location.first_line, "Static cast with non constant expression!\n"); | ||||||
| 		children.at(1)->detectSignWidthWorker(width_hint, sign_hint); | 		children.at(1)->detectSignWidthWorker(width_hint, sign_hint); | ||||||
| 		width_hint = children.at(0)->bitsAsConst().as_int(); | 		this_width = children.at(0)->bitsAsConst().as_int(); | ||||||
|  | 		width_hint = max(width_hint, this_width); | ||||||
| 		if (width_hint <= 0) | 		if (width_hint <= 0) | ||||||
| 			log_file_error(filename, location.first_line, "Static cast with zero or negative size!\n"); | 			log_file_error(filename, location.first_line, "Static cast with zero or negative size!\n"); | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								tests/simple/lesser_size_cast.sv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tests/simple/lesser_size_cast.sv
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | module top ( | ||||||
|  |     input signed [1:0] a, | ||||||
|  |     input signed [2:0] b, | ||||||
|  |     output signed [4:0] c | ||||||
|  | ); | ||||||
|  |     assign c = 2'(a) * b; | ||||||
|  | endmodule | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue