Adds a tieoff method for module instances with unconnected inputs#811
Adds a tieoff method for module instances with unconnected inputs#811clavin-xlnx wants to merge 8 commits into
Conversation
Signed-off-by: Chris Lavin <chris.lavin@amd.com>
| + getName() + "/" + port.getName() + " skipping..."); | ||
| } | ||
| if (pin != null && (pin.getNet() == null || pin.getNet().getSource() == null)) { | ||
| boolean useVccInverter = pin.getName().contains("RST"); |
There was a problem hiding this comment.
This seems like an important condition to document the behaviour of.
The name of this boolean is useVccInverter but then when it gets passed to connectToStaticNet() it becomes its connectToVcc argument which does not seem to reconcile, because it doesn't look like this latter method does any inversion?
There was a problem hiding this comment.
I've modified the code to clarify and harmonize the usage.
Signed-off-by: Chris Lavin <chris.lavin@amd.com>
Signed-off-by: Chris Lavin <chris.lavin@amd.com>
…into tieoff_modinst_ports
Signed-off-by: Chris Lavin <chris.lavin@amd.com>
| + "] has no source, connecting to " + (connectToVCC ? "VCC" : "GND")); | ||
| } | ||
|
|
||
| connectToStaticNet(port.getName(), connectToVCC); |
There was a problem hiding this comment.
Do we know if simply connecting the SPI to VCC does what we expect? Does any intra-site routing/SitePIPs need to be set?
EDIT: Perhaps not relevant if we stop inverting.
| // Connect logically | ||
| EDIFCell parent = getCellInst().getParentCell(); | ||
| EDIFNet logicalStaticNet = EDIFTools.getStaticNet(type, parent, getDesign().getNetlist()); | ||
| EDIFPortInst portInst = getCellInst().getPortInst(portName); | ||
| if (portInst == null) { | ||
| logicalStaticNet.createPortInst(portName, getCellInst()); | ||
| } else { | ||
| portInst.getNet().removePortInst(portInst); | ||
| logicalStaticNet.addPortInst(portInst); | ||
| } |
There was a problem hiding this comment.
When connectToVCC is true, this would also make the port logically connected to VCC (whereas if you're relying on the inverter, shouldn't it be GND?)
EDIT: Perhaps not relevant if we stop inverting.
| } | ||
| if (pin != null && (pin.getNet() == null || pin.getNet().getSource() == null)) { | ||
| // If a port has a RST inverter, drive it with VCC to get GND | ||
| boolean connectToVCC = pin.getName().contains("RST"); |
There was a problem hiding this comment.
Actually, I'm beginning to think this is a little risky. You are connecting all module (not primitive) inputs containing RST to VCC which means you can't rely on all fanouts of this RST port to have inverters. It may even be driving LUTs.
I think it's safer to rely on the RouterHelper.invertPossibleGndPinsToVccPins() method (called by default during RWRoute.preprocess()) to make this transformation on a primitive level.
Co-authored-by: eddieh-xlnx <eddie.hung@amd.com> Signed-off-by: Chris Lavin <chris.lavin@amd.com>
No description provided.