mirror of https://github.com/efabless/caravel.git
109 lines
3.9 KiB
Bash
109 lines
3.9 KiB
Bash
|
#!/bin/bash
|
||
|
#---------------------------------------------------------------------------
|
||
|
#
|
||
|
# Run full LVS on caravel: This does not include verification of underlying
|
||
|
# library components such as the I/O cells, standard cells, and SRAM, but
|
||
|
# does include all sub-blocks of caravel.
|
||
|
#
|
||
|
#---------------------------------------------------------------------------
|
||
|
echo ${PDK_ROOT:=/usr/share/pdk} > /dev/null
|
||
|
echo ${PDK:=sky130A} > /dev/null
|
||
|
|
||
|
# Extract full layout netlist
|
||
|
cd ../mag
|
||
|
if [ ! -f caravel.spice ]; then
|
||
|
magic -dnull -noconsole -rcfile $PDK_ROOT/$PDK/libs.tech/magic/$PDK.magicrc << EOF
|
||
|
drc off
|
||
|
crashbackups stop
|
||
|
load caravel
|
||
|
# Replace the management core wrapper abstract view with the full view
|
||
|
cellname filepath mgmt_core_wrapper ../../caravel_mgmt_soc_litex/mag
|
||
|
flush mgmt_core_wrapper
|
||
|
select top cell
|
||
|
expand
|
||
|
# Replace the SRAM full view with the abstract view.
|
||
|
cellname filepath sky130_sram_2kbyte_1rw1r_32x512_8 $PDK_ROOT/$PDK/libs.ref/sky130_sram_macros/maglef
|
||
|
flush sky130_sram_2kbyte_1rw1r_32x512_8
|
||
|
extract do local
|
||
|
extract all
|
||
|
ext2spice lvs
|
||
|
ext2spice
|
||
|
EOF
|
||
|
rm -f *.ext
|
||
|
|
||
|
# Generate black-box verilog entry for the conb cell. Otherwise, the verilog tends to
|
||
|
# have only one of the pins listed which will result in an incorrect pin match.
|
||
|
# Also set the USE_POWER_PINS definition, which is not set anywhere else.
|
||
|
cat > conb.v << EOF
|
||
|
\`define USE_POWER_PINS 1
|
||
|
|
||
|
/* Black-box entry for conb_1 module */
|
||
|
module sky130_fd_sc_hd__conb_1 (HI, LO, VPWR, VGND, VPB, VNB);
|
||
|
output HI;
|
||
|
output LO;
|
||
|
input VPWR;
|
||
|
input VGND;
|
||
|
input VPB;
|
||
|
input VNB;
|
||
|
endmodule
|
||
|
|
||
|
/* Black-box entry for conb_1 module */
|
||
|
module sky130_fd_sc_hvl__conb_1 (HI, LO, VPWR, VGND, VPB, VNB);
|
||
|
output HI;
|
||
|
output LO;
|
||
|
input VPWR;
|
||
|
input VGND;
|
||
|
input VPB;
|
||
|
input VNB;
|
||
|
endmodule
|
||
|
EOF
|
||
|
|
||
|
# Generate script for netgen
|
||
|
cat > netgen.tcl << EOF
|
||
|
# Load top level netlists
|
||
|
puts stdout "Reading netlist caravel.spice"
|
||
|
set circuit1 [readnet spice caravel.spice]
|
||
|
puts stdout "Reading gate-level netlist caravel.v"
|
||
|
set circuit2 [readnet verilog ../verilog/rtl/defines.v]
|
||
|
# Read additional subcircuits into the netlist of circuit2
|
||
|
puts stdout "Reading black-box modules"
|
||
|
readnet verilog conb.v \$circuit2
|
||
|
puts stdout "Reading all gate-level verilog modules"
|
||
|
# NOTE: Cannot use __user_project_wrapper.v because it is not
|
||
|
# equivalent to the layout empty wrapper.
|
||
|
# readnet verilog ../verilog/gl/__user_project_wrapper.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/caravel_clocking.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/chip_io.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/digital_pll.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/gpio_control_block.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/gpio_defaults_block.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/gpio_defaults_block_1803.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/gpio_defaults_block_0403.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/gpio_logic_high.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/housekeeping.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/mgmt_protect_hv.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/mgmt_protect.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/mprj2_logic_high.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/mprj_logic_high.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/spare_logic_block.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/user_id_programming.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/xres_buf.v \$circuit2
|
||
|
readnet verilog ../../caravel_mgmt_soc_litex/verilog/gl/DFFRAM.v \$circuit2
|
||
|
readnet verilog ../../caravel_mgmt_soc_litex/verilog/gl/mgmt_core.v \$circuit2
|
||
|
readnet verilog ../../caravel_mgmt_soc_litex/verilog/gl/mgmt_core_wrapper.v \$circuit2
|
||
|
readnet verilog ../verilog/gl/caravel.v \$circuit2
|
||
|
|
||
|
# Run LVS
|
||
|
lvs "\$circuit1 caravel" "\$circuit2 caravel" $PDK_ROOT/$PDK/libs.tech/netgen/${PDK}_setup.tcl caravel_full_comp.out
|
||
|
EOF
|
||
|
|
||
|
export NETGEN_COLUMNS=60
|
||
|
export MAGIC_EXT_USE_GDS=1
|
||
|
netgen -batch source netgen.tcl
|
||
|
rm conb.v
|
||
|
rm netgen.tcl
|
||
|
|
||
|
mv caravel.spice ../spi/lvs/caravel_lvs_full.spice
|
||
|
mv caravel_full_comp.out ../signoff/
|
||
|
exit 0
|