mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	iopadmap: fixes as suggested by @mwkmwkmwk
This commit is contained in:
		
							parent
							
								
									ebb11bcea4
								
							
						
					
					
						commit
						3d2a2e8799
					
				
					 1 changed files with 11 additions and 19 deletions
				
			
		|  | @ -408,35 +408,27 @@ struct IopadmapPass : public Pass { | |||
| 				RTLIL::Wire *wire = it.first; | ||||
| 				RTLIL::Wire *new_wire = module->addWire(NEW_ID, wire); | ||||
| 				module->swap_names(new_wire, wire); | ||||
| 				wire->attributes.clear(); | ||||
| 				for (int i = 0; i < wire->width; i++) | ||||
| 				{ | ||||
| 					SigBit wire_bit(wire, i); | ||||
| 					if (!it.second.count(i)) { | ||||
| 						if (wire->port_output) { | ||||
| 						if (wire->port_output) | ||||
| 							module->connect(SigSpec(new_wire, i), SigSpec(wire, i)); | ||||
| 							wire->attributes.clear(); | ||||
| 						} | ||||
| 						else { | ||||
| 						else | ||||
| 							module->connect(SigSpec(wire, i), SigSpec(new_wire, i)); | ||||
| 							wire->attributes.clear(); | ||||
| 
 | ||||
| 						} | ||||
| 					} else { | ||||
| 						auto &new_conn = it.second.at(i); | ||||
| 						new_conn.first->setPort(new_conn.second, RTLIL::SigSpec(new_wire, i)); | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 						// For cell outputs, move \init attributes from old wire to new wire
 | ||||
| 						if (new_conn.first->output(new_conn.second)) { | ||||
| 							auto it = wire->attributes.find(ID(init)); | ||||
| 							if (it != wire->attributes.end()) { | ||||
| 								for (auto it2 = wire->attributes.begin(); it2 != wire->attributes.end(); ) | ||||
| 									if (it == it2) | ||||
| 										++it2; | ||||
| 									else | ||||
| 										it2 = wire->attributes.erase(it2); | ||||
| 								new_wire->attributes.erase(ID(init)); | ||||
| 							} | ||||
| 						} | ||||
| 				if (wire->port_output) { | ||||
| 					auto jt = new_wire->attributes.find(ID(init)); | ||||
| 					// For output ports, move \init attributes from old wire to new wire
 | ||||
| 					if (jt != new_wire->attributes.end()) { | ||||
| 						wire->attributes[ID(init)] = std::move(jt->second); | ||||
| 						new_wire->attributes.erase(jt); | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue