### Quick Start Installation Source: https://www.rapidwright.io/docs/Install.html Commands to clone the repository, compile the project, and update the system PATH. ```bash git clone https://github.com/Xilinx/RapidWright.git cd RapidWright ./gradlew compileJava export PATH=`pwd`/bin:$PATH ``` -------------------------------- ### Clone the Tutorial Repository Source: https://www.rapidwright.io/docs/ECO_Insert_Route_Debug.html Initial setup command to download the necessary Java sources and example design checkpoints. ```bash git clone https://github.com/Xilinx/RapidWrightECO cd RapidWrightECO ``` -------------------------------- ### Install GraalVM and native-image Source: https://www.rapidwright.io/docs/Call_RapidWright_From_CPP.html Download and install the GraalVM environment and the native-image package. ```bash wget https://github.com/oracle/graal/releases/download/vm-19.0.0/graalvm-ce-linux-amd64-19.0.0.tar.gz tar zxf graalvm-ce-linux-amd64-19.0.0.tar.gz export PATH=$PWD/graalvm-ce-19.0.0/bin:$PATH gu install native-image ``` -------------------------------- ### Download Example Design Source: https://www.rapidwright.io/docs/ReportTimingExample.html Command to download the microblaze4.dcp design file required for the timing analysis example. ```bash wget http://www.rapidwright.io/docs/_downloads/microblaze4.dcp ``` -------------------------------- ### Download RapidWright Installer Source: https://www.rapidwright.io/docs/Install.html Use wget to download the installer JAR file to the current directory. ```bash wget http://www.rapidwright.io/docs/_downloads/rapidwright-installer.jar ``` -------------------------------- ### Download and Build GraalVM Example Source: https://www.rapidwright.io/docs/Call_RapidWright_From_CPP.html Commands to fetch, extract, and compile the provided RapidWright GraalVM integration example. ```bash wget http://www.rapidwright.io/docs/_downloads/GraalVMExample.tar.gz tar zxf GraalVMExample.tar.gz cd GraalVMExample make ``` -------------------------------- ### DREAMPlaceFPGA JSON Settings Example Source: https://www.rapidwright.io/docs/_sources/Use_DREAMPlaceFPGA_via_FPGA_Interchange_Format.rst.txt Example configuration file used to define parameters for the DREAMPlaceFPGA placement process. ```json { "netlist_file": "test/gnl_2_4_7_3.0_gnl_3500_03_7_80_80.netlist", "device_file": "test/xcvu3p.json", "output_directory": "results/", "num_threads": 8, "max_iters": 1000 } ``` -------------------------------- ### Verify RapidWright Installation Source: https://www.rapidwright.io/docs/Install.html Launches the DeviceBrowser tool to confirm the installation is configured correctly. ```bash rapidwright DeviceBrowser ``` -------------------------------- ### Execute RapidWright Installer Source: https://www.rapidwright.io/docs/Install.html Run the installer JAR file using the Java runtime from a terminal. ```bash java -jar rapidwright-installer.jar ``` -------------------------------- ### Start Jupyter notebook server Source: https://www.rapidwright.io/docs/FPGA19_Workshop.html Launch the Jupyter notebook server pointing to the downloaded tutorial directory. ```bash jupyter notebook --notebook-dir=RapidWright-binder ``` -------------------------------- ### Download Example Design Source: https://www.rapidwright.io/docs/RWRoute_partial_routing.html Use wget to retrieve the picoblaze_partial.dcp design file required for the routing tutorial. ```bash wget http://www.rapidwright.io/docs/_downloads/picoblaze_partial.dcp ``` -------------------------------- ### Install libffi and Boost Locally Source: https://www.rapidwright.io/docs/Notes_on_Setting_Up_DREAMPlaceFPGA.html Compiles and installs required system libraries locally when they are missing from the environment. ```bash # Install libffi locally wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz tar xvf libffi-3.2.1.tar.gz cd libffi-3.2.1 ./configure --prefix=`pwd`/python/libffi/ make make install export LD_LIBRARY_PATH=`pwd`/python/libffi/lib64:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=`pwd`/python/libffi/lib/pkgconfig:$PKG_CONFIG_PATH cd .. # Install Boost locally wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz tar zxvf boost_1_81_0.tar.gz cd boost_1_81_0 ./bootstrap.sh --prefix=`pwd`/install ./b2 install export BOOST_ROOT=`pwd`/install cd .. ``` -------------------------------- ### Download Example Design Source: https://www.rapidwright.io/docs/RWRoute_wirelength_driven_routing.html Use wget to retrieve the required design checkpoint file for the routing tutorial. ```bash wget http://www.rapidwright.io/docs/_downloads/gnl_2_4_7_3.0_gnl_3500_03_7_80_80.dcp ``` -------------------------------- ### Start Jupyter Notebook Server Source: https://www.rapidwright.io/docs/ICCAD23_Tutorial.html Commands to navigate to the tutorial directory and launch the Jupyter Notebook server. ```bash cd ~/RapidWright-binder jupyter notebook ``` -------------------------------- ### Build and Install DREAMPlaceFPGA Source: https://www.rapidwright.io/docs/Notes_on_Setting_Up_DREAMPlaceFPGA.html Configures the build system with CMake and compiles the project. ```bash mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX=$(dirname `pwd`) make make install cd .. ``` -------------------------------- ### Install exFAT support on Linux Source: https://www.rapidwright.io/docs/FPL19_Tutorial.html Commands to install necessary packages for mounting exFAT-formatted USB drives on common Linux distributions. ```bash sudo yum install exfat-utils fuse-exfat # CentOS / RedHat sudo apt install exfat-fuse exfat-utils # Ubuntu / Debian ``` -------------------------------- ### Install libpng12 on CentOS/RedHat/Fedora Source: https://www.rapidwright.io/docs/Install.html Installs the libpng12 library using the yum package manager. ```bash sudo yum install libpng12 ``` -------------------------------- ### Example Vivado Java Path Source: https://www.rapidwright.io/docs/Install.html The expected output format when locating the Java runtime within a Vivado installation. ```text /opt/Vivado/2022.2/tps/lnx64/jre11.0.11_9/bin/java ``` -------------------------------- ### Start Jupyter Notebook Server Source: https://www.rapidwright.io/docs/RapidWright_Jupyter_Setup.html Command to launch the Jupyter Notebook web interface. ```bash jupyter notebook ``` -------------------------------- ### Install Python Dependencies Source: https://www.rapidwright.io/docs/_sources/Notes_on_Setting_Up_DREAMPlaceFPGA.rst.txt Installs required Python packages including numba. ```bash pip install --upgrade pip pip install -r requirements.txt pip install numba ``` -------------------------------- ### Setup Python Virtual Environment Source: https://www.rapidwright.io/docs/Notes_on_Setting_Up_DREAMPlaceFPGA.html Creates and activates a virtual environment to isolate Python dependencies. ```bash python3 -mvenv env source env/bin/activate ``` -------------------------------- ### Example Output Source: https://www.rapidwright.io/docs/ReportTimingExample.html Sample output generated after running the timing analysis on the microblaze4.dcp design. ```text ============================================================================== == Report Timing Example == ============================================================================== Read DCP: 6.275s 436.922MBs Create TimingManager: 1.838s 19.600MBs Get Max Delay: 0.087s 0.213MBs ------------------------------------------------------------------------------ *Total*: 8.200s 456.734MBs Critical path: 1921 ps ``` -------------------------------- ### Run PipelineGeneratorWithRouting Source: https://www.rapidwright.io/docs/PipelineGeneratorExampleWithRouting.html Execute the compiled example to generate the pipeline.dcp output file. ```bash rapidwright PipelineGeneratorWithRouting ``` -------------------------------- ### Verify RapidWright installation Source: https://www.rapidwright.io/docs/Quick_Start.html Launches the DeviceBrowser GUI from the Jython interpreter prompt to confirm a successful installation. ```python >>> DeviceBrowser.main([]) ``` -------------------------------- ### Compile and Run C++ Application Source: https://www.rapidwright.io/docs/Call_RapidWright_From_CPP.html Commands to fetch the example C++ source, link it against the generated library, and execute the program. ```bash wget http://www.rapidwright.io/docs/_downloads/RapidWrightExample.cpp g++ RapidWrightExample.cpp -I. -L. -lrapidwright export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH && ./a.out xcvu9p ``` -------------------------------- ### Start Python interpreter Source: https://www.rapidwright.io/docs/Install_RapidWright_as_a_Python_PIP_Package.html Launches the Python interactive shell. ```bash python ``` -------------------------------- ### Install Python Dependencies Source: https://www.rapidwright.io/docs/Notes_on_Setting_Up_DREAMPlaceFPGA.html Upgrades pip and installs required Python packages including numba. ```bash pip install --upgrade pip pip install -r requirements.txt pip install numba ``` -------------------------------- ### Install RapidWright Source: https://www.rapidwright.io/docs/Call_RapidWright_From_CPP.html Clone the RapidWright repository and compile the Java source code. ```bash git clone https://github.com/Xilinx/RapidWright.git cd RapidWright ./gradlew compileJava export RAPIDWRIGHT_PATH=$PWD ``` -------------------------------- ### C++ RapidWright Integration Example Source: https://www.rapidwright.io/docs/Call_RapidWright_From_CPP.html A C++ program demonstrating how to initialize a GraalVM isolate, load a device, and query tile names using the generated RapidWright library. ```cpp #include // This is the header file created by native-image (Graal) #include using namespace std; int main(int argc, char **argv) { // This is some Graal boilerplate code graal_isolate_t *isolate = NULL; graal_isolatethread_t *thread = NULL; if (graal_create_isolate(NULL, &isolate, &thread) != 0) { fprintf(stderr, "graal_create_isolate error\n"); return 1; } // End boilerplate int maxRow = 105; int maxCol = 105; char * devName = argv[1]; // Load the device in RapidWright, the device will be // persistent in memory until it is unloaded loadDevice(thread, devName); // Get tile names based on row/column indices and print out // the tile names for a few tiles for (int row = 100; row < maxRow; row++){ for (int col = 100; col < maxCol; col++){ std::cout << "Tile[" << col << "," << row << "] = \"" << getTileName(thread, devName, row, col) << "\"" << std::endl; } } // Clean up Graal stuff if (graal_detach_thread(thread) != 0) { fprintf(stderr, "graal_detach_thread error\n"); return 1; } return 0; } ``` -------------------------------- ### Install libpng12 on Debian/Ubuntu Source: https://www.rapidwright.io/docs/Install.html Downloads and installs the deprecated libpng12 library required for GUI functionality on Debian-based systems. ```bash wget -O /tmp/libpng12.deb https://snapshot.debian.org/archive/debian/20160413T160058Z/pool/main/libp/libpng/libpng12-0_1.2.54-6_amd64.deb && sudo dpkg -i /tmp/libpng12.deb && rm /tmp/libpng12.deb ``` -------------------------------- ### Prepare static install friendly data files Source: https://www.rapidwright.io/docs/RapidWright_Data_Files.html Generates device cache files for specific devices to prevent collisions in parallel environments. ```bash rapidwright jython -c "FileTools.ensureDataFilesAreStaticInstallFriendly("xc7a100t", "xc7a200t")' ``` -------------------------------- ### View successful route status output Source: https://www.rapidwright.io/docs/_sources/RWRoute_partial_routing.rst.txt Example output confirming that all routable nets are fully routed. ```bash Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 147009 : # of nets not needing routing.......... : 58434 : # of internally routed nets........ : 47124 : # of nets with no loads............ : 11132 : # of implicitly routed ports....... : 178 : # of routable nets..................... : 88575 : # of fully routed nets............. : 88575 : # of nets with routing errors.......... : 0 : ------------------------------------------- : ----------- : ``` -------------------------------- ### Install RapidWright on Windows Source: https://www.rapidwright.io/docs/Install.html Commands to clone and compile the project using Windows command prompt. ```batch git clone https://github.com/Xilinx/RapidWright.git cd RapidWright .\gradlew compileJava set "PATH=%CD%\bin;%PATH%" ``` -------------------------------- ### RWRoute Execution Output Source: https://www.rapidwright.io/docs/RWRoute_wirelength_driven_routing.html Example console output showing the design loading, routing iterations, and final statistics. ```text ============================================================================== == RWRoute == ============================================================================== ============================================================================== == Reading DCP: gnl_2_4_7_3.0_gnl_3500_03_7_80_80.dcp == ============================================================================== XML Parse & Device Load: 2.293s EDIF Parse: 2.078s Read XDEF Header: 0.054s Read XDEF Caches: 0.060s Read XDEF Placement: 0.511s Read XDEF Routing: 0.100s ------------------------------------------------------------------------------ [No GC] *Total*: 5.097s ============================================================================== == Route Design == ============================================================================== INFO: Route 2123 pins of GLOBAL_LOGIC1 ------------------------------------------------------------------------------ Generated RRG Routed Nodes With Total Run Iteration RRG Nodes Time (s) Connections Overlaps Time (s) --------- ---------------------- ----------- ---------- ---------------- 1 226748 0.94 14952 3847 1.83 2 11743 0.08 7082 2483 0.58 3 15013 0.10 5378 1343 0.70 4 18160 0.13 3235 566 0.73 5 17743 0.13 1411 106 0.53 6 5002 0.04 328 7 0.40 7 1654 0.01 30 0 0.06 ------------------------------------------------------------------------------ INFO: Route 0 direct connections INFO: No PIP overlaps ============================================================================== == Statistics == ============================================================================== Total wirelength: 12309 Route design: 5.57s ├─ Initialization: 0.25s └─ Routing: 5.32s ============================================================================== Write EDIF: 0.128s Writing XDEF Header: 0.169s Writing XDEF Placement: 0.464s Writing XDEF Routing: 0.614s Writing XDEF Finalizing: 0.051s Writing XDC: 0.007s ------------------------------------------------------------------------------ [No GC] *Total*: 1.433s INFO: Write routed design gnl_2_4_7_3.0_gnl_3500_03_7_80_80_routed.dcp ``` -------------------------------- ### Implementation Guide File (IGF) Syntax Source: https://www.rapidwright.io/docs/_sources/PreImplemented_Module_Flow.rst.txt The IGF format defines the structure for block implementations, sub-implementations, instance placement, and clock constraints. Use this structure to communicate customization aspects of the packing and placement phase. ```text PART BLOCK <# of implementations> <# of instances in the design> <# of clocks used in this block> IMPL [# of sub implementation entries] [SUB_IMPL '' ] ... ... INST ... CLOCK ... END_BLOCK ... END_BLOCKS ``` -------------------------------- ### RWRoute Execution Output Source: https://www.rapidwright.io/docs/RWRoute_partial_routing.html Example console output showing the design reading, routing iterations, and final statistics. ```text ============================================================================== == RWRoute == ============================================================================== ============================================================================== == Reading DCP: picoblaze_partial.dcp == ============================================================================== XML Parse & Device Load: 2.365s EDIF Parse: 1.108s Read XDEF Header: 0.027s Read XDEF Caches: 0.148s Read XDEF Placement: 5.297s Read XDEF Routing: 3.486s ------------------------------------------------------------------------------ [No GC] *Total*: 12.430s ============================================================================== == Route Design == ============================================================================== ------------------------------------------------------------------------------ Generated RRG Routed Nodes With Total Run Iteration RRG Nodes Time (s) Connections Overlaps Time (s) --------- ---------------------- ----------- ---------- ---------------- 1 2705791 13.74 12144 10146 16.63 2 689195 1.94 6496 5093 5.14 3 482106 1.41 4037 1604 3.84 4 292903 0.94 1609 298 2.49 5 176537 0.54 336 45 1.62 6 178330 0.61 59 10 1.20 7 261196 1.40 12 2 2.83 8 250050 1.75 3 0 2.65 ------------------------------------------------------------------------------ INFO: Route 0 direct connections INFO: No PIP overlaps ============================================================================== == Statistics == ============================================================================== Total wirelength: 101840 Route design: 41.73s ├─ Initialization: 2.10s └─ Routing: 39.62s ============================================================================== Write EDIF: 0.209s Writing XDEF Header: 1.744s Writing XDEF Placement: 5.939s Writing XDEF Routing: 3.902s Writing XDEF Finalizing: 0.246s Writing XDC: 0.008s ------------------------------------------------------------------------------ [No GC] *Total*: 12.048s INFO: Write routed design picoblaze_partial_routed.dcp ``` -------------------------------- ### Create Jupyter Kernel for RapidWright Source: https://www.rapidwright.io/docs/RapidWright_Jupyter_Setup.html Commands to initialize the Jupyter kernel based on the installation method. ```bash java -jar rapidwright-2018.3.0-standalone-lin64.jar --create_jupyter_kernel ``` ```bash rapidwright StandaloneEntrypoint --create_jupyter_kernel ``` -------------------------------- ### Manage Jupyter Kernel Specifications Source: https://www.rapidwright.io/docs/RapidWright_Jupyter_Setup.html Commands to install, list, or remove Jupyter kernels. ```bash jupyter kernelspec install ``` ```bash jupyter kernelspec list ``` ```bash jupyter kernelspec uninstall ``` -------------------------------- ### Expected Program Output Source: https://www.rapidwright.io/docs/Call_RapidWright_From_CPP.html The console output produced by running the C++ example application. ```text Loading device xcvu9p...DONE! Tile[100,100] = "CLEL_R_X10Y803" Tile[101,100] = "NULL_X101Y832" Tile[102,100] = "NULL_X102Y832" Tile[103,100] = "CLEM_X11Y803" Tile[104,100] = "INT_X11Y803" Tile[100,101] = "CLEL_R_X10Y802" Tile[101,101] = "NULL_X101Y831" Tile[102,101] = "NULL_X102Y831" Tile[103,101] = "CLEM_X11Y802" Tile[104,101] = "INT_X11Y802" Tile[100,102] = "CLEL_R_X10Y801" Tile[101,102] = "NULL_X101Y830" Tile[102,102] = "NULL_X102Y830" Tile[103,102] = "CLEM_X11Y801" Tile[104,102] = "INT_X11Y801" Tile[100,103] = "CLEL_R_X10Y800" Tile[101,103] = "NULL_X101Y829" Tile[102,103] = "NULL_X102Y829" Tile[103,103] = "CLEM_X11Y800" Tile[104,103] = "INT_X11Y800" Tile[100,104] = "CLEL_R_X10Y799" Tile[101,104] = "NULL_X101Y828" Tile[102,104] = "NULL_X102Y828" Tile[103,104] = "CLEM_X11Y799" Tile[104,104] = "INT_X11Y799" ``` -------------------------------- ### Vivado Timing Report Header Source: https://www.rapidwright.io/docs/ReportTimingExample.html Example output header from a Vivado timing report. ```text ----------------------------------------------------------------------------------------- | Tool Version : Vivado v.2020.1 (lin64) Build 2902540 Wed May 27 19:54:35 MDT 2020 | Date : Mon Nov 8 22:17:03 2021 | Host : yun-Latitude-3470 running 64-bit Ubuntu 16.04.7 LTS | Command : report_timing | Design : design_1 | Device : xcvu3p-ffvc1517 | Speed File : -2 PRODUCTION 1.27 02-28-2020 | Temperature Grade : E ----------------------------------------------------------------------------------------- Timing Report ``` -------------------------------- ### Polynomial Generator Execution Output Source: https://www.rapidwright.io/docs/PolynomialGenerator.html Example console output showing the generation process timing. ```text ============================================================================== == Polynomial Generator == ============================================================================== Load Device: 1.692s Init Operators: 0.878s Build Operator Tree: 0.183s ... ... Final Route: 0.474s Write DCP: 0.455s ------------------------------------------------------------------------------ [No GC] *Total*: 3.681s Wrote DCP: polynomial.dcp ``` -------------------------------- ### Launch Vivado GUI Source: https://www.rapidwright.io/docs/RWRoute_partial_routing.html Command to start the Vivado application in graphical user interface mode. ```bash vivado ``` -------------------------------- ### Create and Save RapidWright Design Source: https://www.rapidwright.io/docs/RapidWright_Jupyter_Setup.html Example of initializing a design object and exporting it as a design checkpoint file. ```python design = Design("HelloWorld",Device.AWS_F1) design.writeCheckpoint(design.getName() + ".dcp") ``` -------------------------------- ### View Timing Analysis Output Source: https://www.rapidwright.io/docs/_sources/PolynomialGenerator.rst.txt Example output from a timing report showing slack, path delays, and clock constraints. ```text Slack (MET) : 0.310ns (required time - arrival time) Source: mult2_51/mult/DSP_OUTPUT_INST/CLK (rising edge-triggered cell DSP_OUTPUT clocked by clk {rise@0.000ns fall@0.646ns period=1.291ns}) Destination: mult_34/mult/DSP_A_B_DATA_INST/A[9] (rising edge-triggered cell DSP_A_B_DATA clocked by clk {rise@0.000ns fall@0.646ns period=1.291ns}) Path Group: clk Path Type: Setup (Max at Slow Process Corner) Requirement: 1.291ns (clk rise@1.291ns - clk rise@0.000ns) Data Path Delay: 0.577ns (logic 0.207ns (35.875%) route 0.370ns (64.125%)) Logic Levels: 0 Clock Path Skew: -0.095ns (DCD - SCD + CPR) Destination Clock Delay (DCD): 1.763ns = ( 3.054 - 1.291 ) Source Clock Delay (SCD): 2.047ns Clock Pessimism Removal (CPR): 0.189ns Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE Total System Jitter (TSJ): 0.071ns Total Input Jitter (TIJ): 0.000ns Discrete Jitter (DJ): 0.000ns Phase Error (PE): 0.000ns Location Delay type Incr(ns) Path(ns) Netlist Resource(s) ------------------------------------------------------------------- ------------------- (clock clk rise edge) 0.000 0.000 r 0.000 0.000 r clk (IN) net (fo=107, unset) 2.047 2.047 mult2_51/mult/CLK DSP48E2_X12Y73 DSP_OUTPUT r mult2_51/mult/DSP_OUTPUT_INST/CLK ------------------------------------------------------------------- DSP48E2_X12Y73 DSP_OUTPUT (Prop_DSP_OUTPUT_DSP48E2_CLK_P[41]) 0.207 2.254 r mult2_51/mult/DSP_OUTPUT_INST/P[41] net (fo=1, routed) 0.370 2.624 mult_34/mult/A[9] DSP48E2_X12Y72 DSP_A_B_DATA r mult_34/mult/DSP_A_B_DATA_INST/A[9] ------------------------------------------------------------------- (clock clk rise edge) 1.291 1.291 r 0.000 1.291 r clk (IN) net (fo=107, unset) 1.763 3.054 mult_34/mult/CLK DSP48E2_X12Y72 DSP_A_B_DATA r mult_34/mult/DSP_A_B_DATA_INST/CLK clock pessimism 0.189 3.243 clock uncertainty -0.035 3.207 DSP48E2_X12Y72 DSP_A_B_DATA (Setup_DSP_A_B_DATA_DSP48E2_CLK_A[9]) -0.273 2.934 mult_34/mult/DSP_A_B_DATA_INST ------------------------------------------------------------------- required time 2.934 arrival time -2.624 ------------------------------------------------------------------- slack 0.310 ``` -------------------------------- ### Convert DCP to FPGA Interchange Format Source: https://www.rapidwright.io/docs/Use_DREAMPlaceFPGA_via_FPGA_Interchange_Format.html Download an example design and convert the Vivado DCP file into logical and physical netlist files. ```bash wget http://www.rapidwright.io/docs/_downloads/gnl_2_4_7_3.0_gnl_3500_03_7_80_80.dcp rapidwright DcpToInterchange gnl_2_4_7_3.0_gnl_3500_03_7_80_80.dcp ``` -------------------------------- ### Design route status output Source: https://www.rapidwright.io/docs/RWRoute_wirelength_driven_routing.html Example output showing the routing status of a successfully routed design. ```text Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 4937 : # of nets not needing routing.......... : 1082 : # of internally routed nets........ : 932 : # of implicitly routed ports....... : 150 : # of routable nets..................... : 3855 : # of fully routed nets............. : 3855 : # of nets with routing errors.......... : 0 : ------------------------------------------- : ----------- : ``` -------------------------------- ### View route status output Source: https://www.rapidwright.io/docs/_sources/RWRoute_partial_routing.rst.txt Example output showing the count of unrouted and routed nets in a design. ```bash Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 147009 : # of nets not needing routing.......... : 58434 : # of internally routed nets........ : 47124 : # of nets with no loads............ : 11132 : # of implicitly routed ports....... : 178 : # of routable nets..................... : 88575 : # of unrouted nets................. : 12144 : # of fully routed nets............. : 76431 : # of nets with routing errors.......... : 0 : ------------------------------------------- : ----------- : ``` -------------------------------- ### Complex Tile Pattern Output Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_I.html Example output showing sorted tile column patterns and their corresponding indices. ```text [[CLEM, CLEL_R, BRAM, CLEL_R, CLEM]=[94, 134, 265, 328, 337, 468, 531, 568], [CLEL_R, CLEM, CLEL_R, BRAM, CLEL_R]=[93, 131, 262, 334, 465], [CLEL_R, CLEL_R, BRAM, CLEL_R, CLEM]=[70, 188, 391], [CLEM, CLEL_R, CLEL_R, BRAM, CLEL_R]=[68, 186, 389], [CLEL_R, CLEM, CLEL_R, CLEL_R, BRAM]=[65, 183, 386], [CLEL_R, BRAM, CLEL_R, CLEL_R, CLEM_R]=[593], [CLEM_R, CLEL_R, BRAM, CLEL_R, CLEL_R]=[591], [CLEL_R, BRAM, CLEL_R, CLEM, CLEL_R]=[330], [CLEM, CLEL_R, CLEM, CLEL_R, BRAM]=[129], [BRAM, CLEL_R, CLEM, CLEL_R, BRAM]=[331], [CLEL_R, CLEM_R, CLEL_R, BRAM, CLEL_R]=[588], [BRAM, CLEL_R, CLEL_R, CLEM_R, CLEL_R]=[594]] ``` -------------------------------- ### Initialize Tutorial Directory Source: https://www.rapidwright.io/docs/Create_and_Use_an_SLR_Bridge.html Create and enter a new directory for the bridge tutorial project. ```bash mkdir bridge_tutorial cd bridge_tutorial ``` -------------------------------- ### Vivado Placement Error Output Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_I.html Example of a placement error indicating insufficient resources for the defined pblock. ```text ERROR: [Place 30-488] Failed to commit 4 instances: processor/reset_lut/LUT6 with block Id: 119 (LUT) at SLICE_X85Y150 processor/reset_lut/LUT6 with block Id: 119 (LUT) at SLICE_X85Y150 processor/reset_lut/LUT6 with block Id: 119 (LUT) at SLICE_X85Y150 processor/stack_loop[0].lsb_stack.stack_muxcy_CARRY4_CARRY8 with block Id: 134 (CARRY) at SLICE_X85Y150 ``` -------------------------------- ### Download and Open Tutorial Project Source: https://www.rapidwright.io/docs/ReusingTimingClosedLogicAsAShell.html Commands to download, extract, and open the pre-compiled tutorial project files. ```bash wget http://www.rapidwright.io/docs/_downloads/kcu105_step2.zip unzip kcu105_step2.zip cd kcu105 vivado & ``` -------------------------------- ### Partial Debug Core Connection (Java) Source: https://www.rapidwright.io/docs/_sources/ECO_Insert_Route_Debug.rst.txt Snippet showing the start of the process to connect signals of interest after debug core insertion. ```java class EcoInsertRouteDebug { public static void main(String[] args) { Design baseDesign = Design.readCheckpoint("files/boom_medium_routed.dcp"); Design debugDesign = Design.readCheckpoint("files/fifo36_routed.dcp"); ``` -------------------------------- ### Initialize Environment and Run DeviceBrowser Source: https://www.rapidwright.io/docs/Install.html Source the generated classpath script and execute the DeviceBrowser application. ```bash source bin/rapidwright_classpath.sh java com.xilinx.rapidwright.device.browser.DeviceBrowser ``` -------------------------------- ### Initialize PicoBlaze Project Directory Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_I.html Commands to create a working directory for the PicoBlaze design. ```bash mkdir picoblaze cd picoblaze ``` -------------------------------- ### Install RapidWright via PIP Source: https://www.rapidwright.io/docs/Install_RapidWright_as_a_Python_PIP_Package.html Use this command to install the RapidWright package into your Python environment. ```bash pip install rapidwright ``` -------------------------------- ### Initialize Source Project Source: https://www.rapidwright.io/docs/ReusingTimingClosedLogicAsAShell.html Commands to download and initialize the source project using a Tcl script. ```bash wget http://www.rapidwright.io/docs/_downloads/kcu105_example.zip unzip kcu105_example.zip cd kcu105 vivado -source kcu105.tcl & ``` -------------------------------- ### Invoke ReportTimingExample via Gradle Source: https://www.rapidwright.io/docs/ReportTimingExample.html Command to execute the timing analysis tool on the downloaded design file. ```bash rapidwright ReportTimingExample microblaze4.dcp ``` -------------------------------- ### ReportTimingExample Java Implementation Source: https://www.rapidwright.io/docs/ReportTimingExample.html Java source code demonstrating how to read a DCP, instantiate a TimingManager, and extract the worst data path delay. ```java public static void main(String[] args) { if(args.length != 1) { System.out.println("USAGE: "); return; } CodePerfTracker t = new CodePerfTracker("Report Timing Example"); t.useGCToTrackMemory(true); // Read in an example placed and routed DCP t.start("Read DCP"); Design design = Design.readCheckpoint(args[0], CodePerfTracker.SILENT); // Instantiate and populate the timing manager for the design t.stop().start("Create TimingManager"); TimingManager tim = new TimingManager(design); // Get and print out worst data path delay in design t.stop().start("Get Max Delay"); GraphPath criticalPath = tim.getTimingGraph().getMaxDelayPath(); // Print runtime summary t.stop().printSummary(); System.out.println("\nCritical path: "+ ((int)criticalPath.getWeight())+ " ps"); System.out.println("\nPath details:"); System.out.println(criticalPath.toString().replace(",", ",\n")+"\n"); } ``` -------------------------------- ### Route Status Output Source: https://www.rapidwright.io/docs/PolynomialGenerator.html Example output from the report_route_status command. ```text Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 1775 : # of nets not needing routing.......... : 1659 : # of internally routed nets........ : 1334 : # of nets with no loads............ : 292 : # of implicitly routed ports....... : 33 : # of routable nets..................... : 116 : # of fully routed nets............. : 116 : # of nets with routing errors.......... : 0 : ------------------------------------------- : ----------- : ``` -------------------------------- ### Initialize Device and Generate Column Map Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_I.html Load a specific device and generate a map of all tile column patterns. ```python device = Device.getDevice("xcvu3p-ffvc1517-2-i") colMap = TileColumnPattern.genColumnPatternMap(device) ``` -------------------------------- ### Display SLRCrosserGenerator Help Source: https://www.rapidwright.io/docs/SLR_Crosser_DCP_Creator_Tutorial.html Run this command to list all available parameters and default configurations for the generator. ```bash rapidwright SLRCrosserGenerator -h ``` -------------------------------- ### Display BRAM Column Output Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_I.html Example output showing the indices of BRAM columns. ```text [[BRAM]=[75, 97, 137, 193, 268, 331, 340, 396, 471, 534, 571, 594]] ``` -------------------------------- ### Display PerformanceExplorer Help Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_II.html Prints the help menu and available command-line options for the PerformanceExplorer tool. ```bash rapidwright PerformanceExplorer -h ``` -------------------------------- ### Clone RapidWright-binder repository Source: https://www.rapidwright.io/docs/FPGA19_Workshop.html Download the required tutorial repository from GitHub. ```bash git clone https://github.com/clavin-xlnx/RapidWright-binder.git ``` -------------------------------- ### Execute Placement Source: https://www.rapidwright.io/docs/Use_DREAMPlaceFPGA_via_FPGA_Interchange_Format.html Run the DREAMPlaceFPGA placer using the provided JSON configuration file. ```bash python3 dreamplacefpga/Placer.py test/gnl_2_4_7_3.0_gnl_3500_03_7_80_80.json ``` -------------------------------- ### Launch Vivado with the base design Source: https://www.rapidwright.io/docs/ECO_Insert_Route_Debug.html Open the initial routed checkpoint in Vivado to begin the debug core insertion process. ```bash vivado files/boom_medium_routed.dcp ``` -------------------------------- ### Get PBlock Grid Ranges Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_I.html Retrieves the grid ranges for the currently selected PBlock object. ```tcl get_property GRID_RANGES [get_selected_objects] ``` -------------------------------- ### C++ RapidWright API Usage Source: https://www.rapidwright.io/docs/_sources/Call_RapidWright_From_CPP.rst.txt Example of iterating through tile coordinates and detaching the GraalVM thread after execution. ```cpp // Get tile names based on row/column indices and print out // the tile names for a few tiles for (int row = 100; row < maxRow; row++){ for (int col = 100; col < maxCol; col++){ std::cout << "Tile[" << col << "," << row << "] = \"" << getTileName(thread, devName, row, col) << "\"" << std::endl; } } // Clean up Graal stuff if (graal_detach_thread(thread) != 0) { fprintf(stderr, "graal_detach_thread error\n"); return 1; } return 0; } ``` -------------------------------- ### PipelineGenerator Help Output Source: https://www.rapidwright.io/docs/PipelineGeneratorExample.html Displays the available command-line options and default values for the PipelineGenerator tool. ```text ============================================================================== == Pipeline Generator == ============================================================================== This RapidWright program creates an example pipelined bus as a placed and routed DCP. See the RapidWright documentation for more information. Option Description ------ ----------- -?, -h Print Help -c [String: Clk net name] (default: clk) -d [String: Design Name] (default: pipeline) -l [Integer: distance] (default: 10) -m [Integer: depth] (default: 3) -n [Integer: width] (default: 10) -o [String: Output DCP File Name] (default: pipeline.dcp) -p [String: Ultrascale/UltraScale+ (default: xcvu3p-ffvc1517-2-e) Part Name] -s [String: Lower left slice to be (default: SLICE_X42Y70) used for pipeline] -v [Boolean: Print verbose output] (default: true) -x [Double: Clk period constraint (ns)] (default: 1.291) ``` -------------------------------- ### Prepare Netlist for DREAMPlaceFPGA Source: https://www.rapidwright.io/docs/Use_DREAMPlaceFPGA_via_FPGA_Interchange_Format.html Convert the logical netlist into the bookshelf format required by DREAMPlaceFPGA. ```bash cd DREAMPlaceFPGA # Or wherever your DREAMPlaceFPGA installation is located python3 IFsupport/IF2bookshelf.py --netlist ../gnl_2_4_7_3.0_gnl_3500_03_7_80_80.netlist ``` -------------------------------- ### Report Route Status Output Source: https://www.rapidwright.io/docs/ECO_Insert_Route_Debug.html Example output from the Vivado report_route_status command confirming no routing errors. ```text Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 87675 : # of nets not needing routing.......... : 33814 : # of internally routed nets........ : 30515 : # of nets with no loads............ : 3299 : # of routable nets..................... : 53861 : # of fully routed nets............. : 53861 : # of nets with routing errors.......... : 0 : ------------------------------------------- : ----------- : ``` -------------------------------- ### Route with RWRoute Source: https://www.rapidwright.io/docs/Use_DREAMPlaceFPGA_via_FPGA_Interchange_Format.html Prepares files and executes the RapidWright RWRoute router. ```bash cp ../gnl_2_4_7_3.0_gnl_3500_03_7_80_80.netlist . cp results/design/design.phys gnl_2_4_7_3.0_gnl_3500_03_7_80_80.phys rapidwright RWRoute gnl_2_4_7_3.0_gnl_3500_03_7_80_80.phys rwroute_routed.dcp --nonTimingDriven --outOfContext ``` -------------------------------- ### Build the standalone debug application Source: https://www.rapidwright.io/docs/ECO_Insert_Route_Debug.html Execute this Gradle command to create an all-in-one JAR file containing the EcoInsertRouteDebugApp and its dependencies. ```bash ./gradlew -Dmain=EcoInsertRouteDebugApp :fatJar ``` -------------------------------- ### Load Xilinx Devices by Part Name Source: https://www.rapidwright.io/docs/RapidWright_Overview.html Demonstrates how to load a device using various part name string formats. RapidWright automatically interprets these strings to identify the correct device. ```java Device device = null; device = Device.getDevice("xcku040"); device = Device.getDevice("xcku040-fbva676-2"); device = Device.getDevice("xcku040ffva1156"); device = Device.getDevice("xcku040-sfva784-1LV-i"); device = Device.getDevice("xcku040ffva1156-2"); ``` -------------------------------- ### Execute PerformanceExplorer for PicoBlaze Source: https://www.rapidwright.io/docs/PreImplemented_Modules_Part_II.html Runs the PerformanceExplorer tool with specified clock, input DCP, target period, and pblock configuration. Note that this command is resource-intensive and should be avoided in virtual machine environments. ```bash # DON'T RUN THIS IN A TUTORIAL VIRTUAL MACHINE rapidwright PerformanceExplorer -c clk -i picoblaze_synth.dcp -t 2.85 -b picoblaze_pblocks.txt ``` -------------------------------- ### Post-Implementation Routing Status Output Source: https://www.rapidwright.io/docs/ReusingTimingClosedLogicAsAShell.html Sample output showing the routing status after implementation. ```text Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 75917 : # of nets not needing routing.......... : 28293 : # of internally routed nets........ : 24553 : # of nets with no loads............ : 3740 : # of routable nets..................... : 47624 : # of nets with fixed routing....... : 41853 : # of fully routed nets............. : 47624 : # of nets with routing errors.......... : 0 : ------------------------------------------- : ----------- : ``` -------------------------------- ### Analyze Vivado Timing Report Source: https://www.rapidwright.io/docs/RWRoute_timing_driven_routing.html Example of a timing report generated by Vivado 2020.1 for a design routed by RWRoute. ```text ----------------------------------------------------------------------------------------- | Tool Version : Vivado v.2020.1 (lin64) Build 2902540 Wed May 27 19:54:35 MDT 2020 | Date : Mon Nov 8 22:20:55 2021 | Host : yun-Latitude-3470 running 64-bit Ubuntu 16.04.7 LTS | Command : report_timing | Design : gnl_3500_03_7_80_80 | Device : xcvu3p-ffvc1517 | Speed File : -2 PRODUCTION 1.27 02-28-2020 | Temperature Grade : E ----------------------------------------------------------------------------------------- Timing Report Slack (MET) : 0.649ns (required time - arrival time) Source: FD_n/C (rising edge-triggered cell FDRE clocked by clk {rise@0.000ns fall@1.500ns period=3.000ns}) Destination: FD_jmm/D (rising edge-triggered cell FDRE clocked by clk {rise@0.000ns fall@1.500ns period=3.000ns}) Path Group: clk Path Type: Setup (Max at Slow Process Corner) Requirement: 3.000ns (clk rise@3.000ns - clk rise@0.000ns) Data Path Delay: 2.331ns (logic 0.753ns (32.304%) route 1.578ns (67.696%)) Logic Levels: 7 (LUT2=1 LUT3=1 LUT5=5) Clock Path Skew: -0.010ns (DCD - SCD + CPR) Destination Clock Delay (DCD): 0.020ns = ( 3.020 - 3.000 ) Source Clock Delay (SCD): 0.030ns Clock Pessimism Removal (CPR): 0.000ns Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE Total System Jitter (TSJ): 0.071ns Total Input Jitter (TIJ): 0.000ns Discrete Jitter (DJ): 0.000ns Phase Error (PE): 0.000ns ``` -------------------------------- ### Vivado Route Status Output Source: https://www.rapidwright.io/docs/ECO_Insert_Route_Debug.html Example output from the report_route_status command showing net routing statistics and errors. ```text report_route_status Design Route Status : # nets : ------------------------------------------- : ----------- : # of logical nets.......................... : 87712 : # of nets not needing routing.......... : 33882 : # of internally routed nets........ : 30546 : # of nets with no loads............ : 3299 : # of routable nets..................... : 53830 : # of fully routed nets............. : 53830 : # of nets with routing errors.......... : 37 : # of nets with no driver........... : 37 : ------------------------------------------- : ----------- : Nets with Routing Errors: (only the first 10 nets are listed) debug1/DIN[0] debug1/DIN[10] debug1/DIN[11] debug1/DIN[12] debug1/DIN[13] debug1/DIN[14] debug1/DIN[15] debug1/DIN[16] debug1/DIN[17] debug1/DIN[18] ``` -------------------------------- ### Execute RWRoute Source: https://www.rapidwright.io/docs/Implementation_Basics.html Run the RWRoute router on a design checkpoint file. ```bash rapidwright RWRoute /PATH/TO/INPUT/DCP/design.dcp /PATH/TO/OUTPUT/DCP/design_routed.dcp ``` -------------------------------- ### Download and run RapidWright on Windows Source: https://www.rapidwright.io/docs/Quick_Start.html Downloads the standalone JAR file and launches the Jython interpreter on Windows systems. ```bash curl -L -O https://github.com/Xilinx/RapidWright/releases/download/v2023.1.0-beta/rapidwright-2023.1.0-standalone-win64.jar java -jar rapidwright-2023.1.0-standalone-win64.jar ``` -------------------------------- ### Download and run RapidWright on Linux Source: https://www.rapidwright.io/docs/Quick_Start.html Downloads the standalone JAR file and launches the Jython interpreter on Linux systems. ```bash wget https://github.com/Xilinx/RapidWright/releases/download/v2023.1.0-beta/rapidwright-2023.1.0-standalone-lin64.jar java -jar rapidwright-2023.1.0-standalone-lin64.jar ``` -------------------------------- ### Create a Python virtual environment Source: https://www.rapidwright.io/docs/Install_RapidWright_as_a_Python_PIP_Package.html Initializes a new virtual environment directory named venv. ```bash python3 -m venv venv ```