Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ba7a367
ArrayBuilder working with 2025.2
abutt-amd Oct 6, 2025
c58eb6e
Unroute nets that leave pblock performance explorer
abutt-amd Oct 7, 2025
130bc22
Add ArrayNetlistGraph
abutt-amd Oct 8, 2025
bf27676
Testing updated 3rd party packages
clavin-xlnx Oct 9, 2025
88bbcae
Add ideal placement algorithm with cp-sat
abutt-amd Oct 9, 2025
d873bb5
Automated placement working
abutt-amd Oct 10, 2025
4f068c9
[RWRoute] Fix missing intent code for Versal clk router
clavin-xlnx Oct 16, 2025
f451740
Annotate clock net with CLOCK_ROOT
clavin-xlnx Oct 17, 2025
b10793d
Adding a depth element to clock router cost function
clavin-xlnx Oct 17, 2025
7c883ed
[NetTools] Adds alternate pretty print for Nets and especially clock …
clavin-xlnx Oct 17, 2025
14fffd1
Avoid NPE
clavin-xlnx Oct 17, 2025
cdb7a1c
Updates to arraybuilder
abutt-amd Oct 17, 2025
d5c7afb
Merge remote-tracking branch 'upstream/fix_clk_rtr_v80' into array_bu…
abutt-amd Oct 17, 2025
27c0f5f
Merge remote-tracking branch 'upstream/print_clk_spine' into array_bu…
abutt-amd Oct 17, 2025
306f301
Fix merge issue
abutt-amd Oct 17, 2025
040aede
Add ability to place inline flops on specific side of pblock
abutt-amd Oct 20, 2025
33750b1
Merge remote-tracking branch 'origin/array_builder' into array_builde…
abutt-amd Oct 21, 2025
d4e782d
Merge remote-tracking branch 'origin/array_builder' into array_builde…
abutt-amd Oct 21, 2025
cabb5e4
Adds encrypted cells check flag; hasEncryptedCells()
clavin-xlnx Oct 21, 2025
132d248
Working on placing flops on a specific side of the pblock
abutt-amd Oct 22, 2025
e27ee98
Merge remote-tracking branch 'upstream/has_encrypted_cells' into arra…
abutt-amd Oct 22, 2025
adcfe2c
Cleanup
abutt-amd Oct 22, 2025
5a152b2
Minor additions to DesignComparator
clavin-xlnx Oct 30, 2025
6e16cb7
Update license to reflect new/updated packages
clavin-xlnx Oct 30, 2025
4a0a8b0
rc1 jar
clavin-xlnx Oct 31, 2025
0b02b52
Fix failing DesignComparator test.
clavin-xlnx Oct 31, 2025
363115d
Address review comments
clavin-xlnx Oct 31, 2025
28b84b5
Pull in non SLR crossing related changes from origin/array_builder_rw…
abutt-amd Oct 31, 2025
73d6bab
Merge remote-tracking branch 'upstream/proto-4.31.1' into array_build…
abutt-amd Oct 31, 2025
02b466c
Clean up array builder command line options
abutt-amd Oct 31, 2025
96ea402
Merge remote-tracking branch 'origin/array_builder' into array_builde…
abutt-amd Nov 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 24 additions & 19 deletions src/com/xilinx/rapidwright/design/DesignTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -2282,7 +2282,9 @@ public static List<SitePinInst> createMissingSitePinInsts(Design design, Net net
if (siteWireNet == null) {
if (isVersal && net.isStaticNet() && bel.isLUT()) {
siteWireNet = net;
si.routeIntraSiteNet(net, belPin, belPin);
synchronized (si) {
si.routeIntraSiteNet(net, belPin, belPin);
}
} else {
continue;
}
Expand All @@ -2299,16 +2301,19 @@ public static List<SitePinInst> createMissingSitePinInsts(Design design, Net net
"'" + net.getName() + "'");
}
}
String sitePinName = getRoutedSitePinFromPhysicalPin(c, siteWireNet, physPin);
if (sitePinName == null) continue;
SitePinInst newPin = si.getSitePinInst(sitePinName);
if (newPin != null) continue;
if (sitePinName.equals("IO") && Utils.isIOB(si)) {
// Do not create a SitePinInst for the "IO" input site pin of any IOB site,
// since the sitewire it drives is assumed to be driven by the IO PAD.
continue;
SitePinInst newPin;
synchronized (si) {
String sitePinName = getRoutedSitePinFromPhysicalPin(c, siteWireNet, physPin);
if (sitePinName == null) continue;
newPin = si.getSitePinInst(sitePinName);
if (newPin != null) continue;
if (sitePinName.equals("IO") && Utils.isIOB(si)) {
// Do not create a SitePinInst for the "IO" input site pin of any IOB site,
// since the sitewire it drives is assumed to be driven by the IO PAD.
continue;
}
newPin = net.createPin(sitePinName, si);
}
newPin = net.createPin(sitePinName, si);
if (newPin != null) newPins.add(newPin);
}
}
Expand Down Expand Up @@ -2460,9 +2465,9 @@ public static List<String> getAllRoutedSitePinsFromPhysicalPin(Cell cell, Net ne
*/
public static void createMissingSitePinInsts(Design design) {
EDIFNetlist netlist = design.getNetlist();
for (Net net : design.getNets()) {
design.getNets().parallelStream().forEach((net) -> {
if (net.isUsedNet()) {
continue;
return;
}
EDIFHierNet ehn = net.getLogicalHierNet();
EDIFHierNet parentEhn = (ehn != null) ? netlist.getParentNet(ehn) : null;
Expand All @@ -2472,11 +2477,11 @@ public static void createMissingSitePinInsts(Design design) {
// 'net' is not a parent net (which normally causes createMissingSitePinInsts(Design, Net)
// to analyze its parent net) but that parent net also exist in the design and has been/
// will be analyzed in due course, so skip doing so here
continue;
return;
}
}
createMissingSitePinInsts(design,net);
}
});
}

private static HashSet<String> muxPins;
Expand Down Expand Up @@ -3308,7 +3313,7 @@ public static void printSiteInstInfo(SiteInst siteInst, PrintStream ps) {
public static void makePhysNetNamesConsistent(Design design) {
Map<EDIFHierNet, EDIFHierNet> netParentMap = design.getNetlist().getParentNetMap();
EDIFNetlist netlist = design.getNetlist();
for (Net net : new ArrayList<>(design.getNets())) {
new ArrayList<>(design.getNets()).parallelStream().forEach((net) -> {
Net parentPhysNet = null;
if (net.isStaticNet()) {
if (net.getType() == NetType.GND) {
Expand All @@ -3319,19 +3324,19 @@ public static void makePhysNetNamesConsistent(Design design) {
throw new RuntimeException();
}
if (parentPhysNet == net) {
continue;
return;
}
} else {
EDIFHierNet hierNet = netlist.getHierNetFromName(net.getName());
if (hierNet == null) {
// Likely an encrypted cell
continue;
return;
}
EDIFHierNet parentHierNet = netParentMap.get(hierNet);
if (parentHierNet == null) {
// System.out.println("WARNING: Couldn't find parent net for '" +
// hierNet.getHierarchicalNetName() + "'");
continue;
return;
}

// Check to make sure net is not improperly categorized
Expand Down Expand Up @@ -3366,7 +3371,7 @@ public static void makePhysNetNamesConsistent(Design design) {
if (parentPhysNet != null) {
design.movePinsToNewNetDeleteOldNet(net, parentPhysNet, true);
}
}
});
}

public static void createPossiblePinsToStaticNets(Design design) {
Expand Down
4 changes: 2 additions & 2 deletions src/com/xilinx/rapidwright/design/NetTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -284,13 +284,13 @@ public static List<Net> getNetsWithOverlappingNodes(Design design) {
Map<Node, Net> used = new HashMap<>();
for (Net net : design.getNets()) {
for (PIP pip : net.getPIPs()) {
for (Node node : new Node[] { pip.getStartNode(), pip.getEndNode() }) {
for (Node node : new Node[]{pip.getStartNode(), pip.getEndNode()}) {
if (node == null)
continue;
Net existing = used.putIfAbsent(node, net);
if (existing != null && existing != net) {
for (PIP oldPip : new ArrayList<>(existing.getPIPs())) {
for (Node oldNode : new Node[] { oldPip.getStartNode(), oldPip.getEndNode() }) {
for (Node oldNode : new Node[]{oldPip.getStartNode(), oldPip.getEndNode()}) {
used.remove(oldNode);
}
}
Expand Down
Loading
Loading