mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	now ignore init attributes on non-register wires in sat command
This commit is contained in:
		
							parent
							
								
									ee8ad72fd9
								
							
						
					
					
						commit
						3b52121d32
					
				
					 3 changed files with 43 additions and 4 deletions
				
			
		| 
						 | 
					@ -103,11 +103,31 @@ struct SatHelper
 | 
				
			||||||
			RTLIL::SigSpec rhs = it.second->attributes.at("\\init");
 | 
								RTLIL::SigSpec rhs = it.second->attributes.at("\\init");
 | 
				
			||||||
			log_assert(lhs.width == rhs.width);
 | 
								log_assert(lhs.width == rhs.width);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								RTLIL::SigSpec removed_bits;
 | 
				
			||||||
 | 
								for (int i = 0; i < lhs.width; i++) {
 | 
				
			||||||
 | 
									RTLIL::SigSpec bit = lhs.extract(i, 1);
 | 
				
			||||||
 | 
									if (!satgen.initial_state.check_all(bit)) {
 | 
				
			||||||
 | 
										removed_bits.append(bit);
 | 
				
			||||||
 | 
										lhs.remove(i, 1);
 | 
				
			||||||
 | 
										rhs.remove(i, 1);
 | 
				
			||||||
 | 
										i--;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								lhs.optimize();
 | 
				
			||||||
 | 
								rhs.optimize();
 | 
				
			||||||
 | 
								removed_bits.optimize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (removed_bits.width)
 | 
				
			||||||
 | 
									log("Warning: ignoring initial value on non-register: %s\n", log_signal(removed_bits));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (lhs.width) {
 | 
				
			||||||
				log("Import set-constraint from init attribute: %s = %s\n", log_signal(lhs), log_signal(rhs));
 | 
									log("Import set-constraint from init attribute: %s = %s\n", log_signal(lhs), log_signal(rhs));
 | 
				
			||||||
				big_lhs.remove2(lhs, &big_rhs);
 | 
									big_lhs.remove2(lhs, &big_rhs);
 | 
				
			||||||
				big_lhs.append(lhs);
 | 
									big_lhs.append(lhs);
 | 
				
			||||||
				big_rhs.append(rhs);
 | 
									big_rhs.append(rhs);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (auto &s : sets_init)
 | 
							for (auto &s : sets_init)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								tests/sat/initval.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/sat/initval.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					module test(input clk, input [3:0] bar, output [3:0] foo);
 | 
				
			||||||
 | 
					  reg [3:0] foo = 0;
 | 
				
			||||||
 | 
					  reg [3:0] last_bar = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  always @*
 | 
				
			||||||
 | 
					    foo[1:0] <= bar[1:0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  always @(posedge clk)
 | 
				
			||||||
 | 
					    foo[3:2] <= bar[3:2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  always @(posedge clk)
 | 
				
			||||||
 | 
					    last_bar <= bar;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  assert property (foo == {last_bar[3:2], bar[1:0]});
 | 
				
			||||||
 | 
					endmodule
 | 
				
			||||||
							
								
								
									
										4
									
								
								tests/sat/initval.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tests/sat/initval.ys
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					read_verilog -sv initval.v
 | 
				
			||||||
 | 
					proc;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sat -seq 10 -prove-asserts
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue