Skip to content

Commit 678705a

Browse files
authoredJun 12, 2024··
Merge pull request #994 from Xilinx/2024.1.0
2024.1.0
2 parents 5621af1 + 2d1b19a commit 678705a

16 files changed

+481
-382
lines changed
 

‎.classpath

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
3333
<classpathentry kind="lib" path="jars/kryo-5.2.1.jar"/>
3434
<classpathentry kind="lib" path="jars/minlog-1.3.1.jar"/>
3535
<classpathentry kind="lib" path="jars/jython-standalone-2.7.2.jar"/>
36-
<classpathentry kind="lib" path="jars/rapidwright-api-lib-2023.2.2.jar">
36+
<classpathentry kind="lib" path="jars/rapidwright-api-lib-2024.1.0.jar">
3737
<attributes>
38-
<attribute name="javadoc_location" value="jar:platform:/resource/RapidWright/jars/rapidwright-api-lib-2023.2.2-javadoc.jar!/"/>
38+
<attribute name="javadoc_location" value="jar:platform:/resource/RapidWright/jars/rapidwright-api-lib-2024.1.0-javadoc.jar!/"/>
3939
</attributes>
4040
</classpathentry>
4141
<classpathentry kind="lib" path="jars/jgrapht-core-1.3.0.jar"/>

‎.github/workflows/build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
pull_request:
66

77
env:
8-
RAPIDWRIGHT_VERSION: v2023.2.2-beta
8+
RAPIDWRIGHT_VERSION: v2024.1.0-beta
99

1010
jobs:
1111
build:

‎RELEASE_NOTES.TXT

+25-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,27 @@
1-
============= RapidWright 2023.2.2-beta released on 2023-04-03 ================
1+
============= RapidWright 2024.1.0-beta released on 2024-06-11 ================
2+
Notes:
3+
- Support for Vivado 2024.1 DCPs and devices
4+
- Support to write DCPs with physDB components with Params.RW_WRITE_DCP_2024_1
5+
- 2024.1 DCP Write Test (#997)
6+
- Updates to support 2024.1 DCP writing (#995)
7+
- Add FileTools.getAutoBufferedInputStream() with zstd auto-detect (#990)
8+
- BlockPlacer2: Fix off by one error in selecting module instance to move (#987)
9+
- Fix PolynomialGenerator and TestDCPSave tests (#982)
10+
- Use exit code 1 if any LSF job failed (#981)
11+
- Fixes issues around Node->Wire equivalence (#407)
12+
13+
API Additions:
14+
- com.xilinx.rapidwright.device.Device "public boolean hasModularSLRs()"
15+
- com.xilinx.rapidwright.device.Wire "public boolean isConnected()"
16+
- com.xilinx.rapidwright.device.Wire "public boolean isTiedToVCC()"
17+
- com.xilinx.rapidwright.device.Wire "public boolean isTiedToGND()"
18+
- com.xilinx.rapidwright.device.Wire "public boolean isTied()"
19+
20+
API Removals:
21+
- com.xilinx.rapidwright.device.Node "public int getWire()"
22+
- com.xilinx.rapidwright.util.RapidWright "*"
23+
24+
============= RapidWright 2023.2.2-beta released on 2024-04-03 ================
225
Notes:
326
- Use new Cell.{LOCKED,PORT_TYPE,isPortCell()} (#977)
427
- Remove some pre-2023.2.2 workarounds (#978)
@@ -54,7 +77,7 @@ API Additions:
5477
- com.xilinx.rapidwright.device.SitePIP "public static SitePIP getSitePIP(Device device, SiteTypeEnum siteTypeEnum, int sitePIPIndex)"
5578

5679

57-
============= RapidWright 2023.2.1-beta released on 2023-01-10 ================
80+
============= RapidWright 2023.2.1-beta released on 2024-01-10 ================
5881
Notes:
5982
- Add EDIFHierCellInst.isUniquified() (#918)
6083
- [RWRoute] RouteNode to extend Node (#916)

‎src/com/xilinx/rapidwright/design/Unisim.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Advanced Micro Devices, Inc.
2+
* Copyright (c) 2024, Advanced Micro Devices, Inc.
33
* All rights reserved.
44
*
55
* Author: Chris Lavin, Advanced Micro Devices, Inc.
@@ -33,7 +33,7 @@
3333
import com.xilinx.rapidwright.edif.EDIFLibrary;
3434

3535
/**
36-
* Generated on: Fri Oct 20 23:25:44 2023
36+
* Generated on: Wed May 01 19:57:08 MDT 2024
3737
* by: com.xilinx.rapidwright.release.UnisimParser
3838
*
3939
* Enumerates supported Unisim primitives that map to Xilinx devices.
@@ -653,6 +653,7 @@ public enum Unisim {
653653
ISERDESE2,
654654
ISERDESE3,
655655
ISERDES_NODELAY,
656+
ISP2,
656657
JTAG_SIME2,
657658
KEEPER,
658659
KEY_CLEAR,
@@ -724,6 +725,7 @@ public enum Unisim {
724725
MMCME5,
725726
MMCM_ADV,
726727
MMCM_BASE,
728+
MMI,
727729
MRMAC,
728730
MULT18X18,
729731
MULT18X18S,
@@ -1289,6 +1291,7 @@ public enum Unisim {
12891291
RAMS64E5,
12901292
RFADC,
12911293
RFADC_13B4W_M0,
1294+
RFADC_13B4W_M1,
12921295
RFDAC,
12931296
RIU_OR,
12941297
ROM128X1,
@@ -1334,6 +1337,7 @@ public enum Unisim {
13341337
USR_ACCESS_VIRTEX6,
13351338
VCC,
13361339
VCU,
1340+
VCU2,
13371341
VDU,
13381342
X5PHIO_CMUIF,
13391343
X5PHIO_CMU_X32,

‎src/com/xilinx/rapidwright/device/FamilyType.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Advanced Micro Devices, Inc.
2+
* Copyright (c) 2024, Advanced Micro Devices, Inc.
33
* All rights reserved.
44
*
55
* Author: Chris Lavin, Advanced Micro Devices, Inc.
@@ -27,7 +27,7 @@
2727

2828

2929
/**
30-
* Generated on: Fri Oct 20 21:29:57 2023
30+
* Generated on: Wed May 01 19:03:12 MDT 2024
3131
* by: com.xilinx.rapidwright.release.PartNamePopulator
3232
*
3333
* Set of all Supported Xilinx families in RapidWright
@@ -40,6 +40,7 @@ public enum FamilyType {
4040
ARTIX7L,
4141
ARTIXUPLUS,
4242
ASPARTAN7,
43+
AVERSALAIEDGE,
4344
AZYNQ,
4445
AZYNQUPLUS,
4546
KINTEX7,
@@ -74,7 +75,6 @@ public enum FamilyType {
7475
VIRTEXUPLUS,
7576
VIRTEXUPLUS58G,
7677
VIRTEXUPLUSHBM,
77-
VIRTEXUPLUSHBMES1,
7878
ZYNQ,
7979
ZYNQUPLUS,
8080
ZYNQUPLUSRFSOC,

‎src/com/xilinx/rapidwright/device/Part.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Advanced Micro Devices, Inc.
2+
* Copyright (c) 2024, Advanced Micro Devices, Inc.
33
* All rights reserved.
44
*
55
* Author: Chris Lavin, Advanced Micro Devices, Inc.
@@ -30,7 +30,7 @@
3030
import java.util.HashSet;
3131

3232
/**
33-
* Generated on: Fri Oct 20 21:29:57 2023
33+
* Generated on: Wed May 01 19:03:12 MDT 2024
3434
* by: com.xilinx.rapidwright.release.PartNamePopulator
3535
*
3636
* Class used to uniquely represent a Xilinx part.
@@ -253,12 +253,12 @@ public Series getSeries() {
253253
FamilyType.VIRTEXUPLUS,
254254
FamilyType.VIRTEXUPLUS58G,
255255
FamilyType.VIRTEXUPLUSHBM,
256-
FamilyType.VIRTEXUPLUSHBMES1,
257256
FamilyType.ZYNQUPLUS,
258257
FamilyType.ZYNQUPLUSRFSOC,
259258
};
260259
ultraScalePlus = new HashSet<FamilyType>(Arrays.asList(ultraScalePlusTypes));
261260
versalTypes = new FamilyType[] {
261+
FamilyType.AVERSALAIEDGE,
262262
FamilyType.QRVERSALAICORE,
263263
FamilyType.QVERSALAICORE,
264264
FamilyType.QVERSALPREMIUM,

‎src/com/xilinx/rapidwright/device/PartNameTools.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Advanced Micro Devices, Inc.
2+
* Copyright (c) 2024, Advanced Micro Devices, Inc.
33
* All rights reserved.
44
*
55
* Author: Chris Lavin, Advanced Micro Devices, Inc.
@@ -36,7 +36,7 @@
3636
import com.xilinx.rapidwright.util.FileTools;
3737

3838
/**
39-
* Generated on: Fri Oct 20 21:29:57 2023
39+
* Generated on: Wed May 01 19:03:12 MDT 2024
4040
* by: com.xilinx.rapidwright.release.PartNamePopulator
4141
*
4242
* Class to hold utility APIs dealing with Parts and device names.
@@ -132,6 +132,7 @@ public static FamilyType getArchitectureFromFamilyType(FamilyType type) {
132132
case ARTIX7L: return FamilyType.ARTIX7;
133133
case ARTIXUPLUS: return FamilyType.KINTEXUPLUS;
134134
case ASPARTAN7: return FamilyType.SPARTAN7;
135+
case AVERSALAIEDGE: return FamilyType.VERSAL;
135136
case AZYNQ: return FamilyType.ZYNQ;
136137
case AZYNQUPLUS: return FamilyType.ZYNQUPLUS;
137138
case KINTEX7: return FamilyType.KINTEX7;
@@ -165,7 +166,6 @@ public static FamilyType getArchitectureFromFamilyType(FamilyType type) {
165166
case VIRTEXUPLUS: return FamilyType.VIRTEXUPLUS;
166167
case VIRTEXUPLUS58G: return FamilyType.VIRTEXUPLUS58G;
167168
case VIRTEXUPLUSHBM: return FamilyType.VIRTEXUPLUSHBM;
168-
case VIRTEXUPLUSHBMES1: return FamilyType.VIRTEXUPLUSHBM;
169169
case ZYNQ: return FamilyType.ZYNQ;
170170
case ZYNQUPLUS: return FamilyType.ZYNQUPLUS;
171171
case ZYNQUPLUSRFSOC: return FamilyType.ZYNQUPLUSRFSOC;
@@ -186,6 +186,7 @@ public static String getFullArchitectureName(FamilyType type) {
186186
case ARTIX7L: return "Artix-7";
187187
case ARTIXUPLUS: return "Kintex UltraScale+";
188188
case ASPARTAN7: return "Spartan-7";
189+
case AVERSALAIEDGE: return "Versal ACAP";
189190
case AZYNQ: return "Zynq-7000";
190191
case AZYNQUPLUS: return "Zynq UltraScale+";
191192
case KINTEX7: return "Kintex-7";
@@ -220,7 +221,6 @@ public static String getFullArchitectureName(FamilyType type) {
220221
case VIRTEXUPLUS: return "Virtex UltraScale+";
221222
case VIRTEXUPLUS58G: return "Virtex UltraScale+";
222223
case VIRTEXUPLUSHBM: return "Virtex UltraScale+";
223-
case VIRTEXUPLUSHBMES1: return "Virtex UltraScale+";
224224
case ZYNQ: return "Zynq-7000";
225225
case ZYNQUPLUS: return "Zynq UltraScale+";
226226
case ZYNQUPLUSRFSOC: return "Zynq UltraScale+ RFSOC";
@@ -241,6 +241,7 @@ public static Series getSeriesFromFamilyType(FamilyType type) {
241241
case ARTIX7L: return Series.Series7;
242242
case ARTIXUPLUS: return Series.UltraScalePlus;
243243
case ASPARTAN7: return Series.Series7;
244+
case AVERSALAIEDGE: return Series.Versal;
244245
case AZYNQ: return Series.Series7;
245246
case AZYNQUPLUS: return Series.UltraScalePlus;
246247
case KINTEX7: return Series.Series7;
@@ -275,7 +276,6 @@ public static Series getSeriesFromFamilyType(FamilyType type) {
275276
case VIRTEXUPLUS: return Series.UltraScalePlus;
276277
case VIRTEXUPLUS58G: return Series.UltraScalePlus;
277278
case VIRTEXUPLUSHBM: return Series.UltraScalePlus;
278-
case VIRTEXUPLUSHBMES1: return Series.UltraScalePlus;
279279
case ZYNQ: return Series.Series7;
280280
case ZYNQUPLUS: return Series.UltraScalePlus;
281281
case ZYNQUPLUSRFSOC: return Series.UltraScalePlus;

‎src/com/xilinx/rapidwright/device/TileTypeEnum.java

+25-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Advanced Micro Devices, Inc.
2+
* Copyright (c) 2024, Advanced Micro Devices, Inc.
33
* All rights reserved.
44
*
55
* Author: Chris Lavin, Advanced Micro Devices, Inc.
@@ -27,7 +27,7 @@
2727

2828

2929
/**
30-
* Generated on: Fri Oct 20 23:25:44 2023
30+
* Generated on: Wed May 01 19:57:08 MDT 2024
3131
* by: com.xilinx.rapidwright.release.SiteAndTileTypeUpdater
3232
*
3333
* Enumeration of TileTypeEnum type for all valid devices within Vivado.
@@ -626,6 +626,8 @@ public enum TileTypeEnum {
626626
GTH_DA7_TERM_L_RBRK,
627627
GTH_DA7_TERM_L_TERM_P,
628628
GTH_DA7_TERM_L_TERM_T,
629+
GTH_DR1_TERM_L_FT,
630+
GTH_DR1_TERM_L_TERM_B_FT,
629631
GTH_INT_INTERFACE,
630632
GTH_INT_INTERFACE_L,
631633
GTH_QUAD_HPIO_RBRK_FT,
@@ -636,6 +638,7 @@ public enum TileTypeEnum {
636638
GTH_QUAD_LEFT_FT,
637639
GTH_QUAD_LEFT_RBRK,
638640
GTH_QUAD_LEFT_RBRK_FT,
641+
GTH_QUAD_LEFT_TERM_B_FT,
639642
GTH_QUAD_LEFT_TERM_T,
640643
GTH_QUAD_LEFT_TERM_T_FT,
641644
GTH_QUAD_RIGHT,
@@ -778,9 +781,14 @@ public enum TileTypeEnum {
778781
HDIO_HDIO_FILL_PCIE4_RBRK_FT,
779782
HDIO_HDIO_FILL_RBRK_FT,
780783
HDIO_HDIO_FILL_TERM_T_FT,
784+
HDIO_HDIO_LEFT_TERM_T_FT,
781785
HDIO_HDIO_RIGHT_TERM_P_FT,
782786
HDIO_HDIO_RIGHT_TERM_RBRK_FT,
783787
HDIO_ILKN_RBRK_FT,
788+
HDIO_OUTER_TERM_R_FT,
789+
HDIO_OUTER_TERM_R_RBRK_FT,
790+
HDIO_OUTER_TERM_R_TERM_B_FT,
791+
HDIO_OUTER_TERM_R_TERM_T_FT,
784792
HDIO_PCIE4_RBRK_FT,
785793
HDIO_RIGHT_CFG_TERM_T,
786794
HDIO_RIGHT_RBRK,
@@ -806,7 +814,15 @@ public enum TileTypeEnum {
806814
HPIO_CFG_TERM_L_TOP_FT,
807815
HPIO_CFG_TOP_TERM_R,
808816
HPIO_CFG_TOP_TERM_R_GTH,
817+
HPIO_GTH_AUX_IO_TERM_L_BOT_FT,
818+
HPIO_GTH_AUX_IO_TERM_L_TOP_FT,
819+
HPIO_GTH_CFG_TERM_L_BOT_FT,
820+
HPIO_GTH_CFG_TERM_L_TOP_FT,
821+
HPIO_GTH_QUAD_LEFT_RBRK_FT,
809822
HPIO_GTH_QUAD_RIGHT_RBRK_FT,
823+
HPIO_GTH_TERM_L_M_RBRK_FT,
824+
HPIO_GTH_TERM_L_RBRK_FT,
825+
HPIO_GTH_TERM_L_TERM_T_FT,
810826
HPIO_HPIO_LEFT_TERM_B_L_FT,
811827
HPIO_HPIO_LEFT_TERM_P_FT,
812828
HPIO_HPIO_LEFT_TERM_T_L_FT,
@@ -991,6 +1007,7 @@ public enum TileTypeEnum {
9911007
INT_INTF_LEFT_IBRK_IO_TERM_H_FT,
9921008
INT_INTF_LEFT_IBRK_PCIE4_TERM_H_FT,
9931009
INT_INTF_LEFT_IBRK_PCIE4_TERM_P_FT,
1010+
INT_INTF_LEFT_TERM_GT_IO_RBRK_FT,
9941011
INT_INTF_LEFT_TERM_GT_TERM_H_FT,
9951012
INT_INTF_LEFT_TERM_GT_TERM_P,
9961013
INT_INTF_LEFT_TERM_H_FT,
@@ -1028,6 +1045,7 @@ public enum TileTypeEnum {
10281045
INT_INTF_RIGHT_IO_TERM_B,
10291046
INT_INTF_RIGHT_TERM_GT_IO_RBRK,
10301047
INT_INTF_RIGHT_TERM_GT_TERM_H_FT,
1048+
INT_INTF_RIGHT_TERM_HDIO_FT,
10311049
INT_INTF_RIGHT_TERM_H_FT,
10321050
INT_INTF_RIGHT_TERM_IO,
10331051
INT_INTF_RIGHT_TERM_IO_TERM_T,
@@ -1425,6 +1443,9 @@ public enum TileTypeEnum {
14251443
RCLK_RCLK_DSP_INTF_DC12_L_FT,
14261444
RCLK_RCLK_DSP_INTF_DC12_R_FT,
14271445
RCLK_RCLK_GAP50_MINICBRK_FT,
1446+
RCLK_RCLK_HDIO_LAST_R_FT,
1447+
RCLK_RCLK_HDIO_R_FT,
1448+
RCLK_RCLK_HPIO_GTH_TERM_L_FT,
14281449
RCLK_RCLK_HPIO_TERM_L_DA6_FT,
14291450
RCLK_RCLK_HPIO_TERM_L_FT,
14301451
RCLK_RCLK_IBRK_FSR2FE_FT,
@@ -1438,9 +1459,11 @@ public enum TileTypeEnum {
14381459
RCLK_RCLK_INTF_LEFT_TERM_DA6_FT,
14391460
RCLK_RCLK_INTF_LEFT_TERM_DA8_FT,
14401461
RCLK_RCLK_INTF_LEFT_TERM_DC12_FT,
1462+
RCLK_RCLK_INTF_LEFT_TERM_GT_IO_FT,
14411463
RCLK_RCLK_INTF_LEFT_TERM_IO_FT,
14421464
RCLK_RCLK_INTF_LEFT_TERM_MX8_FT,
14431465
RCLK_RCLK_INTF_PCIE3_LEFT_L_FT,
1466+
RCLK_RCLK_INTF_RIGHT_IBRK_PCIE4_R_FT,
14441467
RCLK_RCLK_INTF_XIPHY_LEFT_L_FT,
14451468
RCLK_RCLK_K3_TERM_L_FT,
14461469
RCLK_RCLK_LAGUNA_L_FT,

‎src/com/xilinx/rapidwright/edif/EDIFNetlist.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ public EDIFHierPortInst getHierPortInstFromName(String hierPortInstName) {
897897
* @param name the hierarchical name
898898
* @return A pair of EdifHierCellInst and the unmatched portion of the name. The name may be null if we found a complete match
899899
*/
900-
private Pair<List<EDIFCellInst>, String> getHierObject(String name) {
900+
public Pair<List<EDIFCellInst>, String> getHierObject(String name) {
901901
if (name.isEmpty()) return new Pair<>(Collections.singletonList(getTopCellInst()), null);
902902
String[] parts = name.split(EDIFTools.EDIF_HIER_SEP);
903903

‎src/com/xilinx/rapidwright/edif/EDIFTools.java

+24-35
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.ArrayList;
3838
import java.util.Arrays;
3939
import java.util.Collection;
40+
import java.util.Collections;
4041
import java.util.Comparator;
4142
import java.util.HashMap;
4243
import java.util.HashSet;
@@ -896,11 +897,27 @@ public static EDIFNetlist readEdifFile(Path edifFileName) {
896897
return readEdifFile(edifFileName, Integer.MAX_VALUE);
897898
}
898899

899-
public static EDIFNetlist readEdifFile(Path edifFileName, int maxThreads) {
900-
Path parent = edifFileName.getParent();
901-
if (parent == null) {
902-
parent = Paths.get(System.getProperty("user.dir"));
900+
public static List<String> getEDNFiles(Path parent) {
901+
String edifDirectoryName = parent.toAbsolutePath().toString();
902+
File origDir = new File(edifDirectoryName);
903+
String[] ednFiles = origDir.list(FileTools.getEDNFilenameFilter());
904+
if (ednFiles != null && ednFiles.length > 0) {
905+
edifDirectoryName = edifDirectoryName + File.separator;
906+
for (int i = 0; i < ednFiles.length; i++) {
907+
ednFiles[i] = edifDirectoryName + ednFiles[i];
908+
}
909+
return new ArrayList<>(Arrays.asList(ednFiles));
903910
}
911+
return Collections.emptyList();
912+
}
913+
914+
public static Path getEDIFParentDir(Path edifFileName) {
915+
Path parent = edifFileName == null ? null : edifFileName.getParent();
916+
return parent == null ? Paths.get(System.getProperty("user.dir")) : parent;
917+
}
918+
919+
public static EDIFNetlist readEdifFile(Path edifFileName, int maxThreads) {
920+
Path parent = getEDIFParentDir(edifFileName);
904921
if (RW_ENABLE_EDIF_BINARY_CACHING) {
905922
Path bedif = parent.resolve(
906923
edifFileName.getFileName().toString().replace(".edf", ".bedf"));
@@ -915,37 +932,9 @@ public static EDIFNetlist readEdifFile(Path edifFileName, int maxThreads) {
915932
}
916933
}
917934
}
918-
EDIFNetlist edif;
919-
File edifFile = edifFileName.toFile();
920-
String edifDirectoryName = parent.toAbsolutePath().toString();
921-
if (edifDirectoryName == null) {
922-
try {
923-
File canEdifFile = edifFile.getCanonicalFile();
924-
if (canEdifFile != null) {
925-
edifDirectoryName = canEdifFile.getParent();
926-
}
927-
} catch (IOException e) {
928-
// Unable to determine EDIF source directory - not sure if
929-
// this is worth throwing an error as we are only checking for EDN files
930-
System.err.println("WARNING: Could not determine source directory for EDIF. "
931-
+ "If it contained encrypted cells \n(present as .edn files), they will not "
932-
+ "be passed to resulting DCP load script.");
933-
}
934-
}
935-
edif = loadEDIFFile(edifFileName, maxThreads);
936-
if (edifDirectoryName != null) {
937-
File origDir = new File(edifDirectoryName);
938-
edif.setOrigDirectory(edifDirectoryName);
939-
String[] ednFiles = origDir.list(FileTools.getEDNFilenameFilter());
940-
if (ednFiles != null && ednFiles.length > 0) {
941-
edifDirectoryName = edifDirectoryName + File.separator;
942-
for (int i=0; i < ednFiles.length; i++) {
943-
ednFiles[i] = edifDirectoryName + ednFiles[i];
944-
}
945-
946-
}
947-
edif.setEncryptedCells(new ArrayList<>(Arrays.asList(ednFiles)));
948-
}
935+
EDIFNetlist edif = loadEDIFFile(edifFileName, maxThreads);
936+
edif.setOrigDirectory(parent.toAbsolutePath().toString());
937+
edif.setEncryptedCells(getEDNFiles(parent));
949938
if (RW_ENABLE_EDIF_BINARY_CACHING) {
950939
Path bedif = parent.resolve(
951940
edifFileName.getFileName().toString().replace(".edf", ".bedf"));

‎src/com/xilinx/rapidwright/util/DataVersions.java

+334-325
Large diffs are not rendered by default.

‎src/com/xilinx/rapidwright/util/FileTools.java

+25
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,31 @@ public static boolean isVivadoCompatible() {
18221822
return false;
18231823
}
18241824

1825+
/**
1826+
* Checks if Vivado is available and if it is available if it is at least of the
1827+
* version major.minor or later.
1828+
*
1829+
* @param major The major Vivado version (generally the year)
1830+
* @param minor The minor Vivado version
1831+
* @return True if Vivado is available and meets the version requirements, false
1832+
* otherwise.
1833+
*/
1834+
public static boolean isVivadoAtLeastVersion(int major, int minor) {
1835+
String vivadoVersion = getVivadoVersion();
1836+
if (vivadoVersion != null) {
1837+
vivadoVersion = vivadoVersion.replace("v", "");
1838+
int idx = vivadoVersion.indexOf('.');
1839+
int availMajor = Integer.parseInt(vivadoVersion.substring(0, idx));
1840+
int availMinor = Integer.parseInt(vivadoVersion.substring(idx + 1));
1841+
if (availMajor > major)
1842+
return true;
1843+
if (availMajor == major) {
1844+
return availMinor >= minor;
1845+
}
1846+
}
1847+
return false;
1848+
}
1849+
18251850
/**
18261851
* Gets the current version of Vivado on the system PATH.
18271852
* @return The string version representation of the Vivado version available on the system PATH.

‎src/com/xilinx/rapidwright/util/ParallelismTools.java

+1
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ public static <T> T get(Future<T> future) {
183183
* @param <T> Type returned by all tasks.
184184
* @return A Deque of Future objects corresponding to each task (in order).
185185
*/
186+
@SafeVarargs
186187
public static <T> Deque<Future<T>> invokeFirstSubmitRest(@NotNull Callable<T>... tasks) {
187188
Deque<Future<T>> futures = new ArrayDeque<>(tasks.length);
188189

‎src/com/xilinx/rapidwright/util/Params.java

+9
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public class Params {
3434

3535
public static int RW_ZSTD_DEFAULT_COMPRESSION_LEVEL = 3;
3636

37+
public static String RW_WRITE_DCP_2024_1_NAME = "RW_WRITE_DCP_2024_1";
38+
3739
/**
3840
* Flag to have RapidWright decompress gzipped EDIF files to disk prior to
3941
* parsing. This is a tradeoff where pre-decompression improves runtime over the
@@ -51,6 +53,13 @@ public class Params {
5153
public static int RW_ZSTD_COMPRESSION_LEVEL = getParamOrDefaultIntSetting(RW_DECOMPRESS_GZIPPED_EDIF_TO_DISK_NAME,
5254
RW_ZSTD_DEFAULT_COMPRESSION_LEVEL);
5355

56+
/**
57+
* Flag to have RapidWright write out DCPs such that they will only be readable
58+
* in Vivado 2024.1 and later. The advantage is that these DCPs will be read in
59+
* faster and will provide better support for the largest devices.
60+
*/
61+
public static boolean RW_WRITE_DCP_2024_1 = isParamSet(RW_WRITE_DCP_2024_1_NAME);
62+
5463
/**
5564
* Checks if the named RapidWright parameter is set via an environment variable
5665
* or by a JVM parameter of the same name.

‎test/src/com/xilinx/rapidwright/design/TestDCPWrite.java

+16
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
import org.junit.jupiter.api.io.TempDir;
2929

3030
import com.xilinx.rapidwright.support.RapidWrightDCP;
31+
import com.xilinx.rapidwright.util.FileTools;
32+
import com.xilinx.rapidwright.util.Params;
33+
import com.xilinx.rapidwright.util.VivadoToolsHelper;
3134

3235
public class TestDCPWrite {
3336

@@ -37,4 +40,17 @@ public void testVersalDualOutputCOUT(@TempDir Path dir) {
3740
Design d = RapidWrightDCP.loadDCP("versal_cout_hq2.dcp");
3841
d.writeCheckpoint(dir.resolve("output.dcp"));
3942
}
43+
44+
@Test
45+
public void testNewPhysDBWrite(@TempDir Path dir) {
46+
Design d = RapidWrightDCP.loadDCP("microblazeAndILA_3pblocks_2024.1.dcp");
47+
Path dcp = dir.resolve("microblazeAndILA_3pblocks_2024.1_postrw.dcp");
48+
Params.RW_WRITE_DCP_2024_1 = true;
49+
d.writeCheckpoint(dcp);
50+
Params.RW_WRITE_DCP_2024_1 = false;
51+
Design.readCheckpoint(dcp);
52+
if (FileTools.isVivadoAtLeastVersion(2024, 1)) {
53+
VivadoToolsHelper.assertFullyRouted(dcp);
54+
}
55+
}
4056
}

0 commit comments

Comments
 (0)
Please sign in to comment.