2. Pre-Defined Flows#
The following are examples are pre-built flows that come with SiliconCompiler which you can use for your own builds.
See the pre-built targets for examples on how these are used in conjunction with pdks, tools and libraries.
2.1. asicflow#
A configurable ASIC compilation flow.
The ‘asicflow’ includes the stages below. The steps syn, floorplan, physyn, place, cts, route, and dfm have minimization associated with them. To view the flowgraph, see the .png file.
import: Sources are collected and packaged for compilation
syn: Translates RTL to netlist using Yosys
floorplan: Floorplanning
physyn: Physical Synthesis
place: Global and detailed placement
cts: Clock tree synthesis
route: Global and detailed routing
dfm: Metal fill, atenna fixes and any other post routing steps
export: Export design from APR tool and merge with library GDS
sta: Static timing analysis (signoff)
lvs: Layout versus schematic check (signoff)
drc: Design rule check (signoff)
The syn, physyn, place, cts, route steps supports per process options that can be set up by setting ‘<step>_np’ arg to a value > 1, as detailed below:
syn_np : Number of parallel synthesis jobs to launch
floorplan_np : Number of parallel floorplan jobs to launch
physyn_np : Number of parallel physical synthesis jobs to launch
place_np : Number of parallel place jobs to launch
cts_np : Number of parallel clock tree synthesis jobs to launch
route_np : Number of parallel routing jobs to launch
Setup file: asicflow.py
2.1.1. Configuration#
2.1.1.1. import#
Keypath |
Value |
surelog |
|
parse |
|
siliconcompiler.tools.surelog.parse |
2.1.1.2. syn#
Keypath |
Value |
('import', '0') |
|
0.0 |
|
yosys |
|
syn_asic |
|
siliconcompiler.tools.yosys.syn_asic |
|
('import', '0') |
|
0.0 |
|
yosys |
|
syn_asic |
|
siliconcompiler.tools.yosys.syn_asic |
|
('import', '0') |
|
0.0 |
|
yosys |
|
syn_asic |
|
siliconcompiler.tools.yosys.syn_asic |
2.1.1.3. synmin#
Keypath |
Value |
|
|
builtin |
|
minimum |
|
siliconcompiler.tools.builtin.minimum |
2.1.1.4. floorplan#
2.1.1.5. floorplanmin#
Keypath |
Value |
|
|
builtin |
|
minimum |
|
|
siliconcompiler.tools.builtin.minimum |
2.1.1.6. place#
Keypath |
Value |
('floorplanmin', '0') |
|
|
1.0 |
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
place |
|
siliconcompiler.tools.openroad.place |
|
('floorplanmin', '0') |
|
|
1.0 |
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
place |
|
siliconcompiler.tools.openroad.place |
|
('floorplanmin', '0') |
|
|
1.0 |
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
place |
|
siliconcompiler.tools.openroad.place |
2.1.1.7. placemin#
Keypath |
Value |
|
|
builtin |
|
minimum |
|
siliconcompiler.tools.builtin.minimum |
2.1.1.8. cts#
Keypath |
Value |
('placemin', '0') |
|
1.0 |
|
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
cts |
|
siliconcompiler.tools.openroad.cts |
|
('placemin', '0') |
|
1.0 |
|
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
cts |
|
siliconcompiler.tools.openroad.cts |
|
('placemin', '0') |
|
1.0 |
|
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
cts |
|
siliconcompiler.tools.openroad.cts |
2.1.1.9. ctsmin#
Keypath |
Value |
|
|
builtin |
|
minimum |
|
siliconcompiler.tools.builtin.minimum |
2.1.1.10. route#
Keypath |
Value |
('ctsmin', '0') |
|
|
1.0 |
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
route |
|
siliconcompiler.tools.openroad.route |
|
('ctsmin', '0') |
|
|
1.0 |
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
route |
|
siliconcompiler.tools.openroad.route |
|
('ctsmin', '0') |
|
|
1.0 |
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
route |
|
siliconcompiler.tools.openroad.route |
2.1.1.11. routemin#
Keypath |
Value |
|
|
builtin |
|
minimum |
|
siliconcompiler.tools.builtin.minimum |
2.1.1.12. dfm#
Keypath |
Value |
('routemin', '0') |
|
1.0 |
|
|
1.0 |
|
1.0 |
0.0 |
|
0.0 |
|
0.0 |
|
openroad |
|
dfm |
|
siliconcompiler.tools.openroad.dfm |
2.1.1.13. export#
Keypath |
Value |
('dfm', '0') |
|
klayout |
|
export |
|
siliconcompiler.tools.klayout.export |
|
('dfm', '0') |
|
openroad |
|
export |
|
siliconcompiler.tools.openroad.export |
2.2. asictopflow#
A flow for stitching together hardened blocks without doing any automated place-and-route.
This flow generates a GDS and a netlist for passing to a verification/signoff flow.
Setup file: asictopflow.py
2.2.1. Configuration#
2.2.1.1. import#
Keypath |
Value |
|
0.0 |
surelog |
|
parse |
|
siliconcompiler.tools.surelog.parse |
2.2.1.2. syn#
Keypath |
Value |
('import', '0') |
|
0.0 |
|
yosys |
|
syn_asic |
|
siliconcompiler.tools.yosys.syn_asic |
2.2.1.3. export#
Keypath |
Value |
('import', '0') |
|
|
0.0 |
klayout |
|
export |
|
siliconcompiler.tools.klayout.export |
2.3. dvflow#
A configurable constrained random stimulus DV flow.
The verification pipeline includes the followins teps:
compile: RTL sources are compiled into object form (once)
sim: Compiled RTL is exercised using generated test
The dvflow can be parametrized using a single ‘np’ parameter. Setting ‘np’ > 1 results in multiple independent verificaiton pipelines to be launched.
This flow is a WIP
Setup file: dvflow.py
2.3.1. Configuration#
2.3.1.1. compile#
Keypath |
Value |
icarus |
|
compile |
|
siliconcompiler.tools.icarus.compile |
2.3.1.2. sim#
Keypath |
Value |
('compile', '0') |
|
execute |
|
exec_input |
|
siliconcompiler.tools.execute.exec_input |
|
('compile', '0') |
|
execute |
|
exec_input |
|
siliconcompiler.tools.execute.exec_input |
|
('compile', '0') |
|
execute |
|
exec_input |
|
siliconcompiler.tools.execute.exec_input |
|
('compile', '0') |
|
execute |
|
exec_input |
|
siliconcompiler.tools.execute.exec_input |
|
('compile', '0') |
|
execute |
|
exec_input |
|
siliconcompiler.tools.execute.exec_input |
2.4. fpgaflow#
A configurable FPGA compilation flow.
The ‘fpgaflow’ module is a configurable FPGA flow with support for open source and commercial tool flows.
The following step convention is recommended for VPR.
import: Sources are collected and packaged for compilation
syn: Synthesize RTL into an device specific netlist
place: FPGA specific placement step
route: FPGA specific routing step
bitstream: Bitstream generation
Note that nextpnr does not appear to support breaking placement, routing, and bitstream generation into individual steps, leading to the following recommended step convention
import: Sources are collected and packaged for compilation
syn: Synthesize RTL into an device specific netlist
apr: One-step execution of place, route, bitstream with nextpnr
Schema keypaths:
Setup file: fpgaflow.py
2.4.1. Configuration#
2.4.1.1. import#
Keypath |
Value |
1.0 |
|
1.0 |
|
1.0 |
|
|
1.0 |
|
1.0 |
|
1.0 |
1.0 |
|
0.0 |
|
|
0.0 |
0.0 |
|
|
0.0 |
0.0 |
|
0.0 |
|
|
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
surelog |
|
parse |
|
siliconcompiler.tools.surelog.parse |
2.4.1.2. syn#
Keypath |
Value |
('import', '0') |
|
1.0 |
|
1.0 |
|
1.0 |
|
|
1.0 |
|
1.0 |
|
1.0 |
1.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
|
0.0 |
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
yosys |
|
syn_fpga |
|
siliconcompiler.tools.yosys.syn_fpga |
2.4.1.3. apr#
Keypath |
Value |
('syn', '0') |
|
1.0 |
|
1.0 |
|
1.0 |
|
|
1.0 |
|
1.0 |
|
1.0 |
1.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
|
0.0 |
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
0.0 |
|
nextpnr |
|
apr |
|
siliconcompiler.tools.nextpnr.apr |
2.5. generate_openroad_rcx#
Flow to generate the OpenRCX decks needed by OpenROAD to do parasitic extraction.
Setup file: generate_openroad_rcx.py
2.5.1. Configuration#
2.5.1.1. bench#
Keypath |
Value |
openroad |
|
rcx_bench |
|
siliconcompiler.tools.openroad.rcx_bench |
2.5.1.2. pex#
Keypath |
Value |
('bench', '0') |
|
builtin |
|
nop |
|
siliconcompiler.tools.builtin.nop |
|
('bench', '0') |
|
builtin |
|
nop |
|
siliconcompiler.tools.builtin.nop |
|
('bench', '0') |
|
builtin |
|
nop |
|
siliconcompiler.tools.builtin.nop |
|
('bench', '0') |
|
builtin |
|
nop |
|
siliconcompiler.tools.builtin.nop |
|
('bench', '0') |
|
builtin |
|
nop |
|
siliconcompiler.tools.builtin.nop |
2.5.1.3. extract#
Keypath |
Value |
|
|
openroad |
|
rcx_extract |
|
siliconcompiler.tools.openroad.rcx_extract |
|
|
|
openroad |
|
rcx_extract |
|
siliconcompiler.tools.openroad.rcx_extract |
|
|
|
openroad |
|
rcx_extract |
|
siliconcompiler.tools.openroad.rcx_extract |
|
|
|
openroad |
|
rcx_extract |
|
siliconcompiler.tools.openroad.rcx_extract |
|
|
|
openroad |
|
rcx_extract |
|
siliconcompiler.tools.openroad.rcx_extract |
2.6. lintflow#
An RTL linting flow.
Setup file: lintflow.py
2.6.1. Configuration#
2.6.1.1. lint#
Keypath |
Value |
verilator |
|
lint |
|
siliconcompiler.tools.verilator.lint |
2.7. screenshotflow#
Flow to generate a high resolution design image from a GDS or OAS file.
The ‘screenshotflow’ includes the stages below.
prepare: Prepare the stream file, such as flattening design, removing layers, and merging shapes
screenshot: Generate a set of screenshots tiled across the design
merge: Merge tiled images into a single image
Setup file: screenshotflow.py
2.7.1. Configuration#
2.7.1.1. prepare#
Keypath |
Value |
klayout |
|
operations |
|
|
siliconcompiler.tools.klayout.operations |
2.7.1.2. screenshot#
Keypath |
Value |
('prepare', '0') |
|
klayout |
|
screenshot |
|
|
siliconcompiler.tools.klayout.screenshot |
2.7.1.3. merge#
Keypath |
Value |
('screenshot', '0') |
|
montage |
|
tile |
|
siliconcompiler.tools.montage.tile |
2.8. showflow#
A flow to show the output files generated from other flows.
Required settings for this flow are below:
filetype : Type of file to show
Optional settings for this flow are below:
np : Number of parallel show jobs to launch
screenshot : true/false, indicate if this should be configured as a screenshot
Setup file: showflow.py
2.8.1. Configuration#
2.8.1.1. show#
Keypath |
Value |
klayout |
|
show |
|
siliconcompiler.tools.klayout.show |
|
klayout |
|
show |
|
siliconcompiler.tools.klayout.show |
|
klayout |
|
show |
|
siliconcompiler.tools.klayout.show |
2.9. signoffflow#
A flow for running LVS/DRC signoff on a GDS layout.
Inputs must be passed to this flow as follows:
flow.input('<path-to-layout>.gds')
flow.input('<path-to-netlist>.vg')
Setup file: signoffflow.py
2.9.1. Configuration#
2.9.1.1. import#
Keypath |
Value |
|
0.0 |
builtin |
|
nop |
|
siliconcompiler.tools.builtin.nop |
2.9.1.2. extspice#
Keypath |
Value |
('import', '0') |
|
|
0.0 |
magic |
|
extspice |
|
siliconcompiler.tools.magic.extspice |
2.9.1.3. drc#
Keypath |
Value |
('import', '0') |
|
0.0 |
|
magic |
|
drc |
|
siliconcompiler.tools.magic.drc |
2.9.1.4. lvs#
Keypath |
Value |
('extspice', '0') |
|
0.0 |
|
netgen |
|
lvs |
|
siliconcompiler.tools.netgen.lvs |
2.9.1.5. signoff#
Keypath |
Value |
|
|
|
0.0 |
builtin |
|
join |
|
siliconcompiler.tools.builtin.join |