In this project we will incorporate a standard cell design based on skywater PDKs and plug it in a design Picorv32, a RISC V CPU core. It implements the RISC-V instruction set architecture (ISA).
A brief description of the Picorv32:
The die is the part of a wafer of Silicon or any other material, but in semiconductor industry its Silicon. The core or the are within which chips are contained are compartmented within the core. There are input and output contacts, clocks on the IO pad that surround the core area and is a no logic zone.
The IPs are the intellectual property and they are logic blocks that took some intelligence to be built.
Final project showing our chip as encircled on the PCB after being manufactured and packaged by the foundary:
Pictorial representation of the processes and resources required for Digital ASIC Design
RTL designs: Basic netlist or a connection of network of the logics. There are several open sources that cater to development of a RTL design: Eg. github. PDKs : Process design kits, they contain files and resources pertaining to necessary information required for development of an IC. EDA Tools: They are design automation tool that nculcate the whole physical design flow processes , namely : QFlow, Openroad, Openlane.
Steps that occur in Physical design:
- Synthesis: It is the step involving RTL Synthesis
- Floorplanning: It involves placing the macro as well as the rows used for placement and routing and defines input and output ports.
- Placement : Placement of component cells in the design.
- CTS (Clock Tree Synthesis) : Clock network distribution.
- Routing : Defining network routes.
- Tapeout : Define final GDSII layout file from routing def file.
- Signoff : Final step involving DRC, LVS ,Antenna Checks and ERC.
The tools that we utilized in our project are :
- Yosys Synthesis suite.
- Openlane RTL2GDS digital design suite.
- NGSpice for characterization.
- MAGIC for layout and floorplanning.
- OpenSTA for static timing analysis.
The Openlane flow in interactive mode is generally is as follows:
- prep -design -tag -init_design_config -overwrite
- run_synthesis
- run_floorplan
- run_placement
- run_cts
- run_routing
- run_magic
- run_magic_spice_export
- run_magic_drc
- run_netgen
- run_magic_antenna_clock
2)Synthesis performed in openlane
-
Number of cell synthesised is highlighted in the picture below:
-
Number of D flip flops is highlighted below: Flop ratio = Number of D flip flop/ Number of Cells = 1613/14876= 0.1084296854
-
Core utilization is a representation of how much core area is utilized. In this case it's 35. The lesser the core utilization, the better it is for us.
-
The die are as highlighted in the def files is 660685 X 671405 = 443587212425 sq units
-
Placement observed using magic. All the standard cells are within column and are legally placed.
-
Pins are equidistant now and standard cells lie in the left bottom corner.
-
Upon changing IOmode variable from floorplan.tcl of configuration in openlane and running floorplanning, it is found that pin configuration has changed.
-
Spice deck creation for CMOS inverter. Sky130A.tech file copied:
-
Removal of layer shows DRC errors, as highlighted by white patches in the picture.
-
Extrack the layout design and use it for ngspice along with it all the parasitic capacitances and resistances will be extracted as well.
-
Edit the spice program to change the scale as 0.01um, include the nmos and pmos lib files, make all the changes and perform transient analysis.
-
Cell Characterization done on the basis of data points obtained from the curve is :
-
Rise time = 3.901 e-9 – 3.522 e-9 = 0.379 ns
-
Fall time = 4.541 e-9 – 4.335 e-9 = 0.106 ns
-
Cell rise delay = 4.500 e-9 – 3.731 e-9 = 0.769 ns
-
Cell fall delay = 4.438 e-10 – 3.50 e-10 = 0.093 ns
-
cif see VIA2 is derived command and shows the mask cuts that will finally be available in GDSII. It hold to the DRC rules.
-
Rules pertaining to poly.lib on skywater website in the periphery section of the rules:
-
DRC rules pertaining to poly as defined a) Poly.9 giving error upon editing its drc rules in tech file in response to a DRC check. b) Similarly for poly.2 upon changing its drc rule in tech file, it is giving an error.
-
Lab to implement poly resistor spacing and diff and tap and seeing those error using drc why command in tkcon
-
Lab challenge exercise to describe DRC error as a geometrical construct. a) Geometric rules pertaining to nwell and their description in tech file: b) Observe nwell shrink, the are within is highlighted: c) Observe temporary layer, which shows the error
-
Lab to find missing or incomplete rule and fix them. Eg. n-well: a) Rules pertaining to n-well
-
Create a new DRC rule. Copy cifmaxwidth rule to nwell and change name to nwell_untapped.
-
Create templayer. Create n well that are tapped and leave all n well that are not tapped.
-
Wrap the rules in variant drc full as shown. Implying it is only checked for drc style full.
-
Check implementation of new DRC rule for tapped and untapped nwell:
-
Tracks.info file containing all the tracks’ information, consisting of metal layers and the topmost two lines are horizontal and vertical origin and span
-
Lab input and outputs lie at the intersection of horizontal and vertical lines
-
Width and length of std cell are odd multiples of x pitch and ypitch. Here they are 3 and 9.
-
To define a port write the following commands in console window after selecting them:
-
For output port Y:
port class output
port use signal
- For Input port class input
port use signal
- For VPWR
port class inout
port use power
- For VGND
port class inout
port use ground
-
Synthesis initiated on openlane With the following steps: prep -design picorv32a -tag <tag_nam> -overwrite set lefs [glob $::env(DESIGN_DIR)/src/*.lef] add_lefs -src $lefs
Now forgo the following steps: prep -design picorv32a -tag <tag_name> -overwrite
set lefs [glob $::env(DESIGN_DIR)/src/*.lef]
add_lefs -src $lefs
set lefs [glob $::env(DESIGN_DIR)/src/*.lef]
add_lefs -src $lefs
echo $::env(SYNTH_STRATEGY)
set ::env(SYNTH_STRATEGY) "DELAY 3"
echo $::env(SYNTH_BUFFERING)
echo $::env(SYNTH_SIZING)
set ::env(SYNTH_SIZING) 1
echo $::env(SYNTH_DRIVING_CELL)
-
Parameters optimised to minimise tns and wns value although with the tradeoff of gain in area
-
On running floorplan we get the following errors Fix them using the following commands :
-
init_floorplan
-
place_io
-
tap_decap_or
floorplan.def is created.
-
Expand to see the connectivity to the power and ground rails:
-
Optimise parameters to reduce output load capacitances Although no buffer pins are present we experiment with pin replacement and output load. Replace pins of net _3697 from 2 to 1 Observe capacitance to be reduced:
Create pre_sta.config that contains flow and addresses as well as link Create my_base.sdc file that contains the constraints, whose variables are read by sdc files: run openSTA outside of flow to get STA results We can explain the above report by probable mismatch in sdc file and config.tcl
-
Run routing
Detailed routing, iterations are happening and memory is left Routing Completed
-
Post routing:
Parasitic extraction SPEF file creation: For post routing analysis, the Verilog file we require to do it and we can use same sdc
Acknowledgements
Kunal Ghosh, Co-founder VSD Coporation Private Limited.
Nickson P Jose, Physical Design Engineer, Intel Corporation.
R. Timothy Edwards, Senior Vice President of Analog and Design, efabless Corporation.