1. ##############Add "tsmc3ffe_iopads" in the extra_iplist of scripts/con/block_config.tcl
for now in ip_setup.tcl below fix is there
#SCP - temporary fix for ubumps
set bumpsFile "$env(GEV_IPLIB_ROOT)/$env(PROGRESS_DESCRIPTOR)/pads/lef/tsmc3ffe_iopads.lef"
if [file exists $bumpsFile] {
lappend IP_SETUP(LEF_LIST) $bumpsFile
}
#AMR - temporary fix for ubumps
set bumpsFile "$env(GEV_IPLIB_ROOT)/$env(PROGRESS_DESCRIPTOR)/pads/oas/tsmc3ffe_iopads.oas"
if [file exists $bumpsFile] {
lappend IP_SETUP(OASIS_FILES) $bumpsFile
}
2. Copy <blk_name>.top_context.def.gz to source area
fscripts/avo_config.tcl
set TVAR(avo,block_rdl_from_top) $env(GEV_PROJECT_ROOT)/user/$USER/$env(PROJECT_DIR)/impl/$env(GEV_BLOCK)/source/$env(GEV_BLOCK).top_context.def.gz
If there is no top_context.def.gz available, uncomment below variable
# set TVAR(avo,allow_no_block_rdl_from_top) true
3. Run "add_rdl" target
raven -E avo add_rdl $BLOCK
Make sure to check in the log "avo/power/add_rdl/logs/add_rdl.log.gz" that top_context.def.gz is read in properly as shown below
GIANT_INFO: Loading rdl <.....>_context.def.gz
4. STATIC STEPS (IR):
raven -E avo redhawk_sc_static $BLOCK
5. Dynamic STEPS (IVD):
raven -E avo.<tag> redhawk_sc_dynamic $BLOCK
6.Report check:
##############################################################################################
Redhawk limits for static and IVD are below ( For QUD )
Voltage setpoints
Nominal : 0.68v
Static: 0.714v (Nom VDD + 5% of Nom VDD)
Dynamic: 0.646v (Nom VDD -5% of Nom VDD)
Voltage cut-offs
Static : 0.699V ( Static setpoint - 2% of Nom VDD)
Dynamic : 0.626V (Dynamic set point - 3% of Nom VDD)
##############################################################################################
##############################################################################################
Redhawk limits for static and IVD are below ( For NOD )
Voltage setpoints
Nominal : 0.75v
Static: 0.7875v (Nom VDD + 5% of Nom VDD)
Dynamic: 0.7125v (Nom VDD -5% of Nom VDD)
Voltage cut-offs
Static : 0.7725V ( Static setpoint - 2% of Nom VDD)
Dynamic : 0.69V (Dynamic set point - 3% of Nom VDD)
##############################################################################################
cd avo<>/power/redhawk_sc_dynamic/rpts/
python3 /project/mercury/bin/block_scripts/combined_dvd.bucketize.py power/redhawk_sc_dynamic_orig/rpts/Veff_dvd_data.rpt.gz <step size in %age> <Ideal_voltage> <nom_voltage> <rpt_prefix>
Eg: NOD : python3 /project/mercury/bin/block_scripts/combined_dvd.bucketize.py avo/power/redhawk_sc_dynamic/rpts/Veff_dvd_data.rpt.gz 0.5 0.7125 0.75 dynamic
Eg: QUD : python3 /project/mercury/bin/block_scripts/combined_dvd.bucketize.py avo/power/redhawk_sc_dynamic/rpts/Veff_dvd_data.rpt.gz 0.5 0.646 0.68 dynamic
Eg Output:
0.000 - 0.500 : 2374123
0.500 - 1.000 : 737599
1.000 - 1.500 : 126315
1.500 - 2.000 : 2901
2.000 - 2.500 : 122
2.500 - 3.000 : 8
If we have any cells reported >3% are considered as violations at block level. It also dumps list of cells under each band under <rpt_prefix> directory
rpts/combined_histograms
dynamic.inst_viols.0_0.5.rpt dynamic.inst_viols.3.0_3.5.rpt
dynamic.inst_viols.0.5_1.0.rpt dynamic.inst_viols.3.5_4.0.rpt
dynamic.inst_viols.1.0_1.5.rpt dynamic.inst_viols.4.0_4.5.rpt
dynamic.inst_viols.1.5_2.0.rpt dynamic.inst_viols.4.5_5.0.rpt
dynamic.inst_viols.2.0_2.5.rpt dynamic.inst_viols.5.0_5.5.rpt
dynamic.inst_viols.2.5_3.0.rpt dynamic.inst_viols.5.5_6.0.rpt
7. Sanity Checks for both IR & IVD Runs:
a) Disconnect Instance report (avo/power/redhawk_sc_static/rpts/<blk_name>.disconnect.rpt)
b) Metal EM report: Current flowing in metal wire segment more than it can handle is reported as FAIL.
You can find the failures using the grep command as below
grep FAIL avo/power/redhawk_sc_static/rpts/metal.em.rpt
If the above failures are reported in AP layer, it can be waived for the block run.
c) Via EM report: For via EM report use the following grep command. Any violation on the RV via layer can be waived for the block run.
grep FAIL avo/power/redhawk_sc_static/rpts/via.em.rpt
d) Missing Via report (avo/power/redhawk_sc_static/rpts/unconnected_instance_pins.rpt)
################### RESTORING REDHAWK SESSION ###################
Steps to load redhawk database :
1. cp -rf dynamic_nopackage.run.py restore.py
2. open restore.py . Remove all contents after "db = gp.open_db " and add the command "populate_view_tags()"
3. module add seascape/2024_R1.5
4. redhawk_sc -i restore.py
bsub -qa -q priority -R "rusage[mem=50000]" -Ip redhawk_sc -i restore.py
5. In the shell type the command "open_console_window()" to start GUI
6) to exit "exit()"
zcat Veff_dvd_data.rpt.gz | grep VDD | awk '{if ($1<0.615 && $1 > 0.610 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDD | awk '{if ($1<0.610 && $1 > 0.605 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDD | awk '{if ($1<0.605 && $1 > 0.600 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDD | awk '{if ($1<0.600 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDD | awk '{ print $1}' | sort -nk1 | head -n 1
zcat Veff_dvd_data.rpt.gz | grep VDDM | awk '{if ($1<0.685 && $1 > 0.680 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDDM | awk '{if ($1<0.680 && $1 > 0.675 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDDM | awk '{if ($1<0.675 && $1 > 0.670 ) print $0 }' | wc -l
zcat Veff_dvd_data.rpt.gz | grep VDDM | awk '{if ($1<0.670 ) print $0 }' | wc -l
STEPS TO RUN :
1. Copy context def to source directory
source/${MY_BLOCK}.top_context.def.gz
[NOTE : For blocks with multiple context def's
change the below variable in the avo.config.tcl
set TVAR(avo,block_rdl_from_top) <full_path>/$env(GEV_BLOCK).top_context.def.gz
RUn1 :use the default procedure
RUN2 , etc with additional context def , create parallel "avo's by creating links for the required tasks to run redhawk and change the context in avo_config.tcl
]
2. Add below IPs to variable extra_iplist in script scripts/con/block_config.tcl
"BCM3FFEXCORE_XXXO_UBMP_1P_40 LIB_MIMCAP2X1_UBUMP_BP40_VSS_A_TS3FFE_S0 tsmc3ffe_iopads"
3. Edit run script in avo/fscripts in konsole/terminal with below sed command
block_rhsc_scripts_path="/project/mercury/designers/tvenkata/block_rhsc_scripts"
sed -i "s?\$GEV_GSCRIPT_DIR/avo?$block_rhsc_scripts_path?g" avo/fscripts/add_rdl.innovus.run avo/fscripts/redhawk_sc_static.run avo/fscripts/redhawk_sc_dynamic.run
OR
sed -i "s?\$GEV_GSCRIPT_DIR/avo?$block_rhsc_scripts_path?g" avo.<TAG>/fscripts/add_rdl.innovus.run avo.<TAG>/fscripts/redhawk_sc_static.run avo.<TAG>/fscripts/redhawk_sc_dynamic.run
4. Run rhsc target
raven -E avo redhawk_sc_dynamic $MY_BLOCK