This GitHub repository has the public benchmarks for the 2024 ICCAD CAD Contest Problem C for logic gate sizing, and the hidden benchmarks will be released after the contest. This contest primary goal is to explore the state-of-the-art algorithms for gate sizing to drive academic research to generate scalable gate-sizing algorithms. The secondary goal is to allow the use of a recently developed ML EDA research infrastructure which leverages OpenROAD's Python API and Nvidia's CircuitOps data representation format for ML-EDA or GPU-accelerated EDA research. OpenROAD's Python APIs allow users to execute EDA tools with just a few lines of Python code and to access the EDA tool database directly through Python APIs, bypassing traditional file I/O. CircuitOps provides an ML-friendly data infrastructure that uses Labeled Property Graphs (LPGs) backed by Intermediate Representation (IR) Tables to create datasets for ML-EDA applications. The Python-compatible LPG minimizes the developmental effort required for ML-EDA research.
The following technique assumes you have docker installed on your machine. You can install docker from here. Build the docker image and run using the following commands:
docker build -t <image_name> .
docker run -it --name <container_name> <image_name>
The following technique assumes you have a machine with the required Ubuntu OS prerequisite of OpenROAD and CircuitOps.
Install dependencies for OpenROAD:
sudo ./OpenROAD/etc/DependencyInstaller.sh
Install dependencies for CircuitOps and ML EDA applications:
sudo apt-get install -y python3-matplotlib
sudo apt-get install -y nvidia-cuda-toolkit
sudo apt-get update
sudo apt-get install -y python3-graph-tool
sudo apt-get update && apt-get install -y gnupg2 ca-certificates
sudo apt-get install -y python3-pip
pip3 install torch==2.2.0
pip3 install numpy==1.24.4
pip3 install dgl==2.1.0
pip3 install pycairo
pip3 install pandas
pip3 install scikit-learn
Once packages have been installed, build OpenROAD:
cd ./OpenROAD/
mkdir build
cd build
cmake ..
make -j
Design | Gate Count | WNS (ns) | TNS (ns) | Total Slew Violation Difference (ns) | Total Load Capacitance Violation Difference (fF) | Total Leakage (uW) |
---|---|---|---|---|---|---|
NV_NVDLA_partition_m | 27,553 | -0.595 | -156.323 | 258.761 | 256 | 1.672 |
NV_NVDLA_partition_p | 79,919 | -1.519 | -6,306.64 | 6,125.512 | 5,292 | 5.539 |
ariane136 | 145,776 | -1.298 | -10,143.711 | 14,843.895 | 15,463 | 17,539.095 |
mempool_tile_wrap | 187,851 | -1.56 | -12,697.547 | 12,053.291 | 10,779 | 2,590.158 |
(Reported by OpenSTA)
Design | Gate Count | WNS (ns) | TNS (ns) | Total Slew Violation Difference (ns) | Total Load Capacitance Violation Difference (fF) | Total Leakage (uW) | Runtime (s) |
---|---|---|---|---|---|---|---|
NV_NVDLA_partition_m | 27,553 | -0.207 | -10.266 | NA | NA | 2.693 | 11 |
NV_NVDLA_partition_p | 79,919 | -0.126 | -17.899 | 0.074 | NA | 6.635 | 254 |
ariane136 | 145,776 | -0.214 | -27.613 | 23.713 | NA | 17,545.15 | 573 |
mempool_tile_wrap | 187,851 | -0.199 | -1.232 | 42.162 | 44 | 2,594.44 | 489 |
(Reported by OpenSTA)
<instance name> <library cell name>
<instance name> <library cell name>
<instance name> <library cell name>
...
<pinName or portName>,<maxcap>,<maxtran>,<pin_tran>,<pin_slack>,<pin_rise_arr>,<pin_fall_arr>,<input_pin_cap>,<output_pin_cap>
<instanceName>,<staticPower>
("output_pin_cap" is the sum of the sink pins' capacitance and the net capacitance.)