mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	Small bug fixes in $not, $neg, and $shiftx models
This commit is contained in:
		
							parent
							
								
									acd7a99aef
								
							
						
					
					
						commit
						c38283dbd0
					
				
					 3 changed files with 8 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -591,10 +591,9 @@ RTLIL::Const RTLIL::const_bu0(const RTLIL::Const &arg1, const RTLIL::Const&, boo
 | 
			
		|||
RTLIL::Const RTLIL::const_neg(const RTLIL::Const &arg1, const RTLIL::Const&, bool signed1, bool, int result_len)
 | 
			
		||||
{
 | 
			
		||||
	RTLIL::Const arg1_ext = arg1;
 | 
			
		||||
	extend(arg1_ext, result_len, signed1);
 | 
			
		||||
 | 
			
		||||
	RTLIL::Const zero(RTLIL::State::S0, 1);
 | 
			
		||||
	return RTLIL::const_sub(zero, arg1_ext, false, signed1, result_len);
 | 
			
		||||
 | 
			
		||||
	return RTLIL::const_sub(zero, arg1_ext, true, signed1, result_len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
YOSYS_NAMESPACE_END
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -357,7 +357,7 @@ struct SatGen
 | 
			
		|||
			if (model_undef) {
 | 
			
		||||
				std::vector<int> undef_a = importUndefSigSpec(cell->getPort("\\A"), timestep);
 | 
			
		||||
				std::vector<int> undef_y = importUndefSigSpec(cell->getPort("\\Y"), timestep);
 | 
			
		||||
				extendSignalWidthUnary(undef_a, undef_y, cell, true);
 | 
			
		||||
				extendSignalWidthUnary(undef_a, undef_y, cell, false);
 | 
			
		||||
				ez->assume(ez->vec_eq(undef_a, undef_y));
 | 
			
		||||
				undefGating(y, yy, undef_y);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -671,7 +671,7 @@ struct SatGen
 | 
			
		|||
 | 
			
		||||
			int extend_bit = ez->FALSE;
 | 
			
		||||
 | 
			
		||||
			if (cell->type != "$shift" && cell->type != "$shiftx" && cell->parameters["\\A_SIGNED"].as_bool())
 | 
			
		||||
			if (!cell->type.in("$shift", "$shiftx") && cell->parameters["\\A_SIGNED"].as_bool())
 | 
			
		||||
				extend_bit = a.back();
 | 
			
		||||
 | 
			
		||||
			while (y.size() < a.size())
 | 
			
		||||
| 
						 | 
				
			
			@ -703,7 +703,8 @@ struct SatGen
 | 
			
		|||
				std::vector<int> undef_y = importUndefSigSpec(cell->getPort("\\Y"), timestep);
 | 
			
		||||
				std::vector<int> undef_a_shifted;
 | 
			
		||||
 | 
			
		||||
				if (cell->type != "$shift" && cell->type != "$shiftx" && cell->parameters["\\A_SIGNED"].as_bool())
 | 
			
		||||
				extend_bit = cell->type == "$shiftx" ? ez->TRUE : ez->FALSE;
 | 
			
		||||
				if (!cell->type.in("$shift", "$shiftx") && cell->parameters["\\A_SIGNED"].as_bool())
 | 
			
		||||
					extend_bit = undef_a.back();
 | 
			
		||||
 | 
			
		||||
				while (undef_y.size() < undef_a.size())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,13 +108,12 @@ parameter Y_WIDTH = 0;
 | 
			
		|||
 | 
			
		||||
input [A_WIDTH-1:0] A;
 | 
			
		||||
output [Y_WIDTH-1:0] Y;
 | 
			
		||||
wire [Y_WIDTH-1:0] tmp;
 | 
			
		||||
 | 
			
		||||
generate
 | 
			
		||||
	if (A_SIGNED) begin:BLOCK1
 | 
			
		||||
		assign tmp = $signed(A), Y = -tmp;
 | 
			
		||||
		assign Y = -$signed(A);
 | 
			
		||||
	end else begin:BLOCK2
 | 
			
		||||
		assign tmp = A, Y = -tmp;
 | 
			
		||||
		assign Y = -A;
 | 
			
		||||
	end
 | 
			
		||||
endgenerate
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue