Cocoon is an open-source infrastructure for integrated EDA with interoperability and interactivity. It contains a set of cross-tool interfaces and plays the role of EDA agent that can help IC designers choose EDA point tools to assemble a legal design flow and to produce ICs with a higher quality of results (QoR). It can also help EDA researchers and tool developer research new design methodology and cross-stage optimization. Below are key features of Cocoon:
- Agile RTL-to-GDSII frontend and backend VLSI flow generation.
- Completely user-defined tech library, component EDA tool and design constraints.
- Multi-flow parallelism and automatic iterative circuit timing optimization.
- Python3
- Genus or Yosys
- Innovus
- DREAMPlace (optional)
- JDK 8+ and sbt (optional)
- Clone this repo:
git clone https://github.com/pku-dasys/cocoon.git
- If you are going to use DREAMPlace and yosys in your flow, pull git submodules in the root directory. Then solve their own dependencies.
Or alternatively, pull all the submodules when cloning the repo.
git submodule init git submodule update
git clone --recursive https://github.com/pku-dasys/cocoon.git
- Build DREAMPlace (optional):
cd ./thirdparty/DREAMPlace/ mkdir build cd build/ cmake .. -DCMAKE_INSTALL_PREFIX=../install make make install
- Build yosys (optional):
cd ./thirdparty/yosys/ mkdir build cd build/ make -f ../Makefile
Once you have installed the previous required dependencies, you can run Cocoon from the command line using your customized configuration file in INI format.
Three demo configurations demo/config.sample1.ini
, demo/config.sample2.ini
, demo/config.sample3.ini
are provided, where your can find detailed description of user-defined options from the comments. Here's an example of 2 parallel flows.
[gcd]
# Design settings
design_name = gcd
is_Chisel_design = False
rtl_input = ./gcd/gcd.v
Chisel_input =
result_dir = ../results/
clk_name = clk
delay = 1000
# Library settings
lib_name = gscl45nm
lef_input = ./lib/gscl45nm.lef
liberty_input = ./lib/gscl45nm.lib
# Flow settings
flow = {'synth':'yosys', 'placement':'dreamplace', 'routing':'innovus'}
n_iter_IFT = 0
verbose = False
cadence_version = 19
[ALU(Chisel)]
# Design settings
design_name = AluTop
is_Chisel_design = True
rtl_input =
Chisel_input = ./alu-chisel/
result_dir = ../results/
clk_name = clk
delay = 1000
# Library settings
lib_name = gscl45nm
lef_input = ./lib/gscl45nm.lef
liberty_input = ./lib/gscl45nm.lib
# Flow settings
flow = {'synth':'genus', 'placement':'innovus', 'routing':'innovus'}
n_iter_IFT = 0
verbose = False
cadence_version = 19
You can directly run with the sample configurations with the demo designs, gcd (Verilog) and ALU (Chisel), together with the open-source FreePDK45nm library we provide in ./demo/
. For example:
cd cocoon/
python run.py ./demo/config.sample1.ini
With correctly customized configuration, you can run your own flow by executing:
cd cocoon/
python run.py /Path/to/your/config.ini
- Integrate more EDA tools
- Efficient resource scheduling
- Legality check (LVS, DRC, etc.) and post-simulation (e.g. timing, power)
- Support design-space search and optimization
- Berkeley Hammer
- Stanford mflowgen
- SiliconCompiler
- qflow
If you use cocoon in your research, please cite our WOSET'20 paper: Jiaxi Zhang, Tuo Dai, Zhengzheng Ma, Yibo Lin, Guojie Luo, "Cocoon: An Open Source Infrastructure for Integrated EDA with Interoperability and Interactivity", Workshop on Open-Source EDA Technology (WOSET), November 2020.
@article{zhang-cocoon-woset2020,
title = "{Cocoon: An Open Source Infrastructure for Integrated EDA with Interoperability and Interactivity}",
author = {Jiaxi Zhang and Tuo Dai and Zhengzheng Ma and Yibo Lin and Guojie Luo}
journal = {Workshop on Open-Source EDA Technology (WOSET)},
month = {Nov},
year = {2020},
}