Skip to content
Snippets Groups Projects
Commit 311b60bd authored by Priyanka Raina's avatar Priyanka Raina
Browse files

LVS on SramUnit with Calibre with blackboxing standard cells passes. Requires...

LVS on SramUnit with Calibre with blackboxing standard cells passes. Requires fixing body connection in tie cell.
parent 7ea1c17b
No related branches found
No related tags found
No related merge requests found
Showing with 626 additions and 1 deletion
...@@ -22,6 +22,8 @@ outputs: ...@@ -22,6 +22,8 @@ outputs:
- design-merged.gds - design-merged.gds
- design.lvs.v - design.lvs.v
- design.flatbuslvs.v - design.flatbuslvs.v
- design.nofillerlvs.v
- design.nofillerflatbuslvs.v
- design.vcs.v - design.vcs.v
- design.vcs.pg.v - design.vcs.pg.v
- design.lef - design.lef
...@@ -49,6 +51,8 @@ commands: ...@@ -49,6 +51,8 @@ commands:
- ln -sf ../results/*-merged.gds design-merged.gds - ln -sf ../results/*-merged.gds design-merged.gds
- ln -sf ../results/*.lvs.v design.lvs.v - ln -sf ../results/*.lvs.v design.lvs.v
- ln -sf ../results/*.flatbuslvs.v design.flatbuslvs.v - ln -sf ../results/*.flatbuslvs.v design.flatbuslvs.v
- ln -sf ../results/*.nofillerlvs.v design.nofillerlvs.v
- ln -sf ../results/*.nofillerflatbuslvs.v design.nofillerflatbuslvs.v
- ln -sf ../results/*.vcs.v design.vcs.v - ln -sf ../results/*.vcs.v design.vcs.v
- ln -sf ../results/*.vcs.pg.v design.vcs.pg.v - ln -sf ../results/*.vcs.pg.v design.vcs.pg.v
- ln -sf ../results/*.lef design.lef - ln -sf ../results/*.lef design.lef
......
...@@ -41,6 +41,19 @@ saveNetlist -excludeLeafCell \ ...@@ -41,6 +41,19 @@ saveNetlist -excludeLeafCell \
-phys \ -phys \
$vars(results_dir)/$vars(design).flatbuslvs.v $vars(results_dir)/$vars(design).flatbuslvs.v
saveNetlist -excludeLeafCell \
-flat \
-phys \
-excludeCellInst $lvs_exclude_list \
$vars(results_dir)/$vars(design).nofillerlvs.v
saveNetlist -excludeLeafCell \
-flat \
-flattenBus \
-phys \
-excludeCellInst $lvs_exclude_list \
$vars(results_dir)/$vars(design).nofillerflatbuslvs.v
# Write netlist for Virtuoso simulation # Write netlist for Virtuoso simulation
# #
......
...@@ -77,6 +77,7 @@ def construct(): ...@@ -77,6 +77,7 @@ def construct():
magic_drc = Step( this_dir + '/open-magic-drc' ) magic_drc = Step( this_dir + '/open-magic-drc' )
magic_def2spice = Step( this_dir + '/open-magic-def2spice' ) magic_def2spice = Step( this_dir + '/open-magic-def2spice' )
magic_gds2spice = Step( this_dir + '/open-magic-gds2spice' ) magic_gds2spice = Step( this_dir + '/open-magic-gds2spice' )
magic_gds2spice_nobbox = Step( this_dir + '/open-magic-gds2spice-nobbox' )
netgen_lvs_def = Step( this_dir + '/open-netgen-lvs-def-spice' ) netgen_lvs_def = Step( this_dir + '/open-netgen-lvs-def-spice' )
netgen_lvs_def.set_name('netgen-lvs-def') netgen_lvs_def.set_name('netgen-lvs-def')
...@@ -84,6 +85,7 @@ def construct(): ...@@ -84,6 +85,7 @@ def construct():
netgen_lvs_gds.set_name('netgen-lvs-gds') netgen_lvs_gds.set_name('netgen-lvs-gds')
calibre_lvs = Step( this_dir + '/mentor-calibre-comparison' ) calibre_lvs = Step( this_dir + '/mentor-calibre-comparison' )
calibre_lvs_nobbox = Step( this_dir + '/mentor-calibre-comparison-nobbox' )
# Default steps # Default steps
...@@ -150,8 +152,10 @@ def construct(): ...@@ -150,8 +152,10 @@ def construct():
g.add_step( magic_def2spice ) g.add_step( magic_def2spice )
g.add_step( netgen_lvs_def ) g.add_step( netgen_lvs_def )
g.add_step( magic_gds2spice ) g.add_step( magic_gds2spice )
g.add_step( magic_gds2spice_nobbox )
g.add_step( netgen_lvs_gds ) g.add_step( netgen_lvs_gds )
g.add_step( calibre_lvs ) g.add_step( calibre_lvs )
g.add_step( calibre_lvs_nobbox )
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Graph -- Add edges # Graph -- Add edges
...@@ -170,6 +174,7 @@ def construct(): ...@@ -170,6 +174,7 @@ def construct():
netgen_lvs_def.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp']) netgen_lvs_def.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp'])
netgen_lvs_gds.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp']) netgen_lvs_gds.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp'])
calibre_lvs.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp']) calibre_lvs.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp'])
calibre_lvs_nobbox.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.sp'])
magic_drc.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.lef']) magic_drc.extend_inputs(['sky130_sram_1kbyte_1rw1r_32x256_8.lef'])
for step in [iflow, init, power, place, cts, postcts_hold, route, postroute, signoff]: for step in [iflow, init, power, place, cts, postcts_hold, route, postroute, signoff]:
...@@ -195,9 +200,11 @@ def construct(): ...@@ -195,9 +200,11 @@ def construct():
g.connect_by_name( adk, magic_drc ) g.connect_by_name( adk, magic_drc )
g.connect_by_name( adk, magic_def2spice ) g.connect_by_name( adk, magic_def2spice )
g.connect_by_name( adk, magic_gds2spice ) g.connect_by_name( adk, magic_gds2spice )
g.connect_by_name( adk, magic_gds2spice_nobbox )
g.connect_by_name( adk, netgen_lvs_def ) g.connect_by_name( adk, netgen_lvs_def )
g.connect_by_name( adk, netgen_lvs_gds ) g.connect_by_name( adk, netgen_lvs_gds )
g.connect_by_name( adk, calibre_lvs ) g.connect_by_name( adk, calibre_lvs )
g.connect_by_name( adk, calibre_lvs_nobbox )
g.connect_by_name( adk, pt_timing ) g.connect_by_name( adk, pt_timing )
g.connect_by_name( adk, pt_power_rtl ) g.connect_by_name( adk, pt_power_rtl )
g.connect_by_name( adk, pt_power_gl ) g.connect_by_name( adk, pt_power_gl )
...@@ -228,6 +235,7 @@ def construct(): ...@@ -228,6 +235,7 @@ def construct():
g.connect_by_name( sram, netgen_lvs_def ) g.connect_by_name( sram, netgen_lvs_def )
g.connect_by_name( sram, netgen_lvs_gds ) g.connect_by_name( sram, netgen_lvs_gds )
g.connect_by_name( sram, calibre_lvs ) g.connect_by_name( sram, calibre_lvs )
g.connect_by_name( sram, calibre_lvs_nobbox )
g.connect_by_name( sram, magic_drc ) g.connect_by_name( sram, magic_drc )
g.connect_by_name( rtl, dc ) g.connect_by_name( rtl, dc )
...@@ -276,10 +284,15 @@ def construct(): ...@@ -276,10 +284,15 @@ def construct():
g.connect_by_name( signoff, netgen_lvs_gds ) g.connect_by_name( signoff, netgen_lvs_gds )
g.connect_by_name( magic_gds2spice, netgen_lvs_gds ) g.connect_by_name( magic_gds2spice, netgen_lvs_gds )
# LVS comparision using Calibre # LVS comparision using Calibre with standard cells blackboxed
g.connect_by_name( signoff, calibre_lvs ) g.connect_by_name( signoff, calibre_lvs )
g.connect_by_name( magic_gds2spice, calibre_lvs ) g.connect_by_name( magic_gds2spice, calibre_lvs )
# LVS comparision using Calibre without standard cells blackboxed
g.connect_by_name( gdsmerge, magic_gds2spice_nobbox )
g.connect_by_name( signoff, calibre_lvs_nobbox )
g.connect_by_name( magic_gds2spice_nobbox, calibre_lvs_nobbox )
g.connect_by_name( signoff, pt_timing ) g.connect_by_name( signoff, pt_timing )
g.connect_by_name( signoff, pt_power_rtl ) g.connect_by_name( signoff, pt_power_rtl )
g.connect_by_name( gen_saif_rtl, pt_power_rtl ) # run.saif g.connect_by_name( gen_saif_rtl, pt_power_rtl ) # run.saif
......
LAYOUT PATH "./design.extracted.spice"
LAYOUT PRIMARY "${design_name}"
LAYOUT SYSTEM SPICE
SOURCE PATH "./design.lvs.v.spice"
SOURCE PRIMARY "${design_name}"
SOURCE SYSTEM SPICE
MASK SVDB DIRECTORY "svdb" QUERY
LVS REPORT "outputs/lvs.report"
LVS ISOLATE SHORTS YES
LVS REPORT OPTION S
// Case sensitive
LAYOUT CASE YES
SOURCE CASE YES
// Black box all std cells if Magic is also black boxing
//LVS BOX "sky130_*"
LVS BOX "sky130_sram*"
LVS BOX "sky130_fd_pr*"
LVS DEVICE TYPE NMOS sky130_fd_pr__nfet_01v8
LVS DEVICE TYPE NMOS sky130_fd_pr__nfet_01v8_hvt
LVS DEVICE TYPE PMOS sky130_fd_pr__pfet_01v8
LVS DEVICE TYPE PMOS sky130_fd_pr__pfet_01v8_hvt
LVS DEVICE TYPE RESISTOR sky130_fd_pr__res_generic_po
// Very important! Magic uses slashes as part of the name
LVS SPICE SLASH IS SPACE NO
LVS SPICE PREFER PINS YES
LVS ABORT ON SUPPLY ERROR NO
LVS RECOGNIZE GATES NONE
LVS IGNORE PORTS NO
LVS CHECK PORT NAMES YES
LVS ABORT ON SOFTCHK NO
LVS SHOW SEED PROMOTIONS NO
LVS SHOW SEED PROMOTIONS MAXIMUM 50
LVS POWER NAME "VDD" "VPWR"
LVS GROUND NAME "VSS" "VGND"
LVS SPICE OVERRIDE GLOBALS YES
LVS GLOBALS ARE PORTS NO
VIRTUAL CONNECT COLON YES
VIRTUAL CONNECT REPORT NO
LVS EXECUTE ERC YES
ERC RESULTS DATABASE "erc.results"
ERC SUMMARY REPORT "erc.summary" REPLACE HIER
ERC CELL NAME YES CELL SPACE XFORM
ERC MAXIMUM RESULTS 1000
ERC MAXIMUM VERTEX 4096
#=========================================================================
# Comparison of netlists using Calibre
#=========================================================================
# Author : Kartik Prabhu
# Date : June 13, 2021
#
name: mentor-calibre-comparison-nobbox
#-------------------------------------------------------------------------
# Inputs and Outputs
#-------------------------------------------------------------------------
inputs:
- adk
- design_extracted.spice
- design.nofillerflatbuslvs.v
outputs:
- lvs.report
#-------------------------------------------------------------------------
# Parameters
#-------------------------------------------------------------------------
parameters:
design_name: undefined
commands:
- sh run_lvs.sh
debug:
- calibre -rve -lvs svdb
This diff is collapsed.
envsubst < calibre_lvs.rule.template > calibre_lvs.rule
v2lvs -i -lsp inputs/adk/stdcells.spi -s inputs/adk/stdcells.spi -lsp inputs/*.sp -s inputs/*.sp -lsp source.added -s source.added -v inputs/design.nofillerflatbuslvs.v -o design.lvs.v.spice
v2lvs -i -lsp inputs/design_extracted.spice -s inputs/design_extracted.spice -lsp source.added -s source.added -o design.extracted.spice
calibre -lvs -hier ./calibre_lvs.rule -hcell hcells -automatch
.subckt sky130_fd_pr__pfet_01v8 d g s b
.ends
.subckt sky130_fd_pr__pfet_01v8_hvt d g s b
.ends
.subckt sky130_fd_pr__nfet_01v8 d g s b
.ends
.subckt sky130_fd_pr__nfet_01v8_hvt d g s b
.ends
#=========================================================================
# Extract spice from GDS using magic
#=========================================================================
# Author : Kartik Prabhu
# Date : May 21, 2021
#
name: open-magic-gds2spice-nobbox
#-------------------------------------------------------------------------
# Inputs and Outputs
#-------------------------------------------------------------------------
inputs:
- adk
- design_merged.gds
- sky130_sram_1kbyte_1rw1r_32x256_8.lef
outputs:
- design_extracted.spice
#-------------------------------------------------------------------------
# Parameters
#-------------------------------------------------------------------------
parameters:
design_name: undefined
commands:
- cp inputs/adk/magicrc .magicrc
- magic -noconsole -dnull extract.tcl | tee gds2spice.log
- mv {design_name}.spice outputs/design_extracted.spice
cif istyle sky130(vendor)
lef read inputs/sky130_sram_1kbyte_1rw1r_32x256_8.lef
gds noduplicates true
gds order true
gds flatten true
gds read ./inputs/design_merged.gds
load $::env(design_name)
select top cell
extract no all
extract do local
extract unique
extract
ext2spice lvs
ext2spice $::env(design_name).ext
exit
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment