mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	sim: Run a comb-only update step to set past values during FST cosim
The previous approach only initialized past_d and past_ad while for FST cosim we also need to initialize the other past values like past_clk, etc. Also to properly initialize them, we need to run a combinational update step in case any of the wires feeding into the FF are private or otherwise not part of the FST.
This commit is contained in:
		
							parent
							
								
									cff42f0af5
								
							
						
					
					
						commit
						9b4fba3870
					
				
					 1 changed files with 11 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -813,18 +813,6 @@ struct SimInstance
 | 
			
		|||
			std::string v = shared->fst->valueOf(item.second);
 | 
			
		||||
			did_something |= set_state(item.first, Const::from_string(v));
 | 
			
		||||
		}
 | 
			
		||||
		for (auto &it : ff_database)
 | 
			
		||||
		{
 | 
			
		||||
			ff_state_t &ff = it.second;
 | 
			
		||||
			SigSpec dsig = it.second.data.sig_d;
 | 
			
		||||
			Const value = get_state(dsig);
 | 
			
		||||
			if (dsig.is_wire()) {
 | 
			
		||||
				ff.past_d = value;
 | 
			
		||||
				if (ff.data.has_aload)
 | 
			
		||||
					ff.past_ad = value;
 | 
			
		||||
				did_something |= true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		for (auto cell : module->cells())
 | 
			
		||||
		{
 | 
			
		||||
			if (cell->is_mem_cell()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1019,6 +1007,16 @@ struct SimWorker : SimShared
 | 
			
		|||
		top->update_ph3();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void initialize_stable_past()
 | 
			
		||||
	{
 | 
			
		||||
		if (debug)
 | 
			
		||||
			log("\n-- ph1 (initialize) --\n");
 | 
			
		||||
		top->update_ph1();
 | 
			
		||||
		if (debug)
 | 
			
		||||
			log("\n-- ph3 (initialize) --\n");
 | 
			
		||||
		top->update_ph3();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void set_inports(pool<IdString> ports, State value)
 | 
			
		||||
	{
 | 
			
		||||
		for (auto portname : ports)
 | 
			
		||||
| 
						 | 
				
			
			@ -1191,6 +1189,7 @@ struct SimWorker : SimShared
 | 
			
		|||
 | 
			
		||||
				if (initial) {
 | 
			
		||||
					did_something |= top->setInitState();
 | 
			
		||||
					initialize_stable_past();
 | 
			
		||||
					initial = false;
 | 
			
		||||
				}
 | 
			
		||||
				if (did_something)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue