mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	
							parent
							
								
									22ef5701c0
								
							
						
					
					
						commit
						2d3753d730
					
				
					 2 changed files with 24 additions and 2 deletions
				
			
		|  | @ -229,11 +229,13 @@ struct IopadmapPass : public Pass { | |||
| 		for (auto module : design->selected_modules()) | ||||
| 		{ | ||||
| 			dict<Wire *, dict<int, pair<Cell *, IdString>>> rewrite_bits; | ||||
| 			pool<SigSig> remove_conns; | ||||
| 
 | ||||
| 			if (!toutpad_celltype.empty() || !tinoutpad_celltype.empty()) | ||||
| 			{ | ||||
| 				dict<SigBit, Cell *> tbuf_bits; | ||||
| 				pool<SigBit> driven_bits; | ||||
| 				dict<SigBit, SigSig> z_conns; | ||||
| 
 | ||||
| 				// Gather tristate buffers and always-on drivers.
 | ||||
| 				for (auto cell : module->cells()) | ||||
|  | @ -252,8 +254,10 @@ struct IopadmapPass : public Pass { | |||
| 					for (int i = 0; i < GetSize(conn.first); i++) { | ||||
| 						SigBit dstbit = conn.first[i]; | ||||
| 						SigBit srcbit = conn.second[i]; | ||||
| 						if (!srcbit.wire && srcbit.data == State::Sz) | ||||
| 						if (!srcbit.wire && srcbit.data == State::Sz) { | ||||
| 							z_conns[dstbit] = conn; | ||||
| 							continue; | ||||
| 						} | ||||
| 						driven_bits.insert(dstbit); | ||||
| 					} | ||||
| 
 | ||||
|  | @ -302,6 +306,8 @@ struct IopadmapPass : public Pass { | |||
| 							// enable.
 | ||||
| 							en_sig = SigBit(State::S0); | ||||
| 							data_sig = SigBit(State::Sx); | ||||
| 							if (z_conns.count(wire_bit)) | ||||
| 								remove_conns.insert(z_conns[wire_bit]); | ||||
| 						} | ||||
| 
 | ||||
| 						if (wire->port_input) | ||||
|  | @ -454,6 +460,14 @@ struct IopadmapPass : public Pass { | |||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			if (!remove_conns.empty()) { | ||||
| 				std::vector<SigSig> new_conns; | ||||
| 				for (auto &conn : module->connections()) | ||||
| 					if (!remove_conns.count(conn)) | ||||
| 						new_conns.push_back(conn); | ||||
| 				module->new_connections(new_conns); | ||||
| 			} | ||||
| 
 | ||||
| 			for (auto &it : rewrite_bits) { | ||||
| 				RTLIL::Wire *wire = it.first; | ||||
| 				RTLIL::Wire *new_wire = module->addWire( | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue