Check for 

For 3nm group access

/tools/sysadm/bin/grpctl --main design_apd --keep 3nm

Pinpoint link :

http://pinpoint.lvn.broadcom.net:9840/Mercury/index.html

3nm DRM

##########/projects/BCM_analog8/analog/tsmc3/ff/latest/drm.pdf

/projects/BCM_analog8/analog/tsmc3/ffe/latest/drmCombined.pdf 


Block Supply List

https://docs.google.com/spreadsheets/d/1tOc7OsFWwnScDvdI6Y78aHDRiYYSgETf/edit?usp=drive_link&ouid=102789215150867919965&rtpof=true&sd=true 




Top Level Floorplan

EN

https://drive.google.com/file/d/1QVraF9ssoYkNf0954Wd-CBnQIh7CXE7y/view?usp=drive_link

PN85

https://drive.google.com/file/d/1BlLVSSkfXMsVm89GNHwJSR8v0Ouj_Jaf/view?usp=drive_link

PN85.1

https://drive.google.com/file/d/1sXEJTjiPj3NPzeEfUqMqCAHeRDDHOlV_/view?usp=drive_link

PDF : MercuryPN851Floorplan.pdf

https://drive.google.com/drive/u/0/folders/1XdFA017UvV7tKKEXlssMRpqWeb-o5FDN

hm_mac : clock diagram

https://drive.google.com/file/d/1RRf_Usn4_RWhh6Ra4dol3aQtPhDNWZav/view?usp=drive_link



PN85.1.5

https://drive.google.com/file/d/1c7HIfchTkm9u3V2iK89W2BRzZuxU5GfS/view?usp=drive_link

PN85.2 :

https://drive.google.com/file/d/10fOku23H0aCTBQJG23rrifhcNrqLfZjt/view?usp=drive_link

PN85.3

https://drive.google.com/file/d/1sBGebxdKz-JQOwvOtuuOpNjOANGqd-V_/view?usp=sharing

PN99.1

https://drive.google.com/file/d/1tMVwir6YC2vsZvIGmeH5md1aut96lLOw/view?usp=drive_link





[02/06]

Pulse eater / Local clock divider

List 1 .  {Blocks with pulse eater circuitry whose output generates  both div1/div2 clk waveforms eg: hm_ae , hm_iop}

List 2 .  {Blocks with pulse eater circuitry whose output generates  only div2 clk waveforms eg: hm_ae , hm_conv_n/s}

List 3 .  {Blocks with non-pulse eater circuitry (50% duty cycle waveform) generating a div2 clk waveform eg: hm_mac}


https://drive.google.com/file/d/1_DXI6jTATC8n5DuqkQk4U7rHpPtiRZj5/view?usp=drive_link



clk_core_a_div4 to clk_core_a_div1 


https://drive.google.com/file/d/1TVCGn1KkD7JoDoLlQmw2HeYp6pD7DblR/view?usp=drive_link



div1 & div2 relation

https://drive.google.com/file/d/1skSYZYXW69LwW3NAppw7I0N92iMDrhYc/view?usp=drive_link






Block Data Flow Diagrams

https://broadcom.ent.box.com/folder/202264795835

https://drive.google.com/drive/u/1/folders/1VZdz4swT69OwfbvOyDHCHwrGpLHhfmKs


hm_l1dl 

https://drive.google.com/file/d/1qWYPryJrWHsXh3plJZ_bY5v-DsTutsgI/view?usp=sharing

hm_l1ul

https://drive.google.com/file/d/1hwccfcjJDCFFE3Xh9bDNEw7sSeMXSkZW/view?usp=drive_link

hm_fh :

https://drive.google.com/file/d/1tpV0qqB4hpcrbORG1goB-OdFnxmgiwPq/view?ts=66314644

hm_fh latest :

https://drive.google.com/file/d/1tpV0qqB4hpcrbORG1goB-OdFnxmgiwPq/view?usp=drive_link





Block Activity Factors

https://docs.google.com/spreadsheets/d/11XyLHk_7dcS5lhX4dzx0jIYQLWmWIxUU/edit?usp=drive_link&ouid=102789215150867919965&rtpof=true&sd=true


Dual rail memory corners :

https://drive.google.com/file/d/1vfk_nV9j632o9Py7K-n2E_r1HCwChEy3/view?usp=drive_link

https://drive.google.com/file/d/1sUinTCc7B1LPcmRQ2ftGLiYmyn4vSz5A/view?usp=drive_link

https://docs.google.com/spreadsheets/d/1H8n7SvD_PF1tgjZZKaFMYM93AmzeG_s9/edit#gid=1591576665


STEPS FOR FLOORPLAN :

raven -E block_tools create_ip_list $MY_BLOCK 

cd block_tools/floorplan/tmp 

qinvs -v 23.33-s082_1 -c 16 -m 50 -s ../../fscripts/floorplan.tcl


## Place macros


## check for macro origins to be on grid


 agCheckInstOriginOnGrid *

 

## If not, Ensure they are on Grid


agCheckInstOriginOnGrid -snap_origin ; #If not , ensure they are on grid 



## Check for macro overlaps

deselectAll

selectInst [dbGet -e top.insts.cell.baseClass -v core -p2]

checkPlace -selectedOnly

deselectAll

## Check for macro overlaps


 Puts "INFO: adding required blockages before power and context insertion"

  set printBeginTime [clock seconds]

  Puts "WARNING: removing all macro halos with deleteHaloFromBlock before adding endcap cells"

  deleteHaloFromBlock -allMacro

  Puts "WARNING: removing all route blockage with ag_delete_rt_blockage before adding endcap cells"

  ag_delete_rt_blockage

  ag_add_obs_endcap

  Puts "INFO: adding context with ag_add_endcap, modify settings in fscripts/invs_fplan_procs.tcl"

  ag_add_endcap

  

 

  ag_add_rt_blockage



# Check for pin overlaps before power grid creation

checkPinAssignment -report_violating_pin -outFile before_power.rpt


# Source the following script for your VDDM power grid creation (all blocks except hm_pss, pcie_ss_pcie_0, & pss_subsys_nokmercury) :


This should essentially get run in lieu of the ag_add_power_grid for the blocks with dual rail memories (almost all of them). NOTE : It has at the top of the script a margin variable that it uses to combine macros that are close enough to not get other power grid inserted in between them.  I'm not sure what value to set that to exactly - it might need modification by the block builders. Please notify +Matthew Michels (APD) and +Rob Bassett (APD) if these variables ($mergeX, $mergeY) need to be modified.


$CHIPROOT/designers/matthew/vddm_power.tcl

# hm_pss, pcie_ss_pcie_0, & pss_subsys_nokmercury blocks use the below command for adding power grid

ag_add_power_grid


# Write out the floorplan DEF

ag_def_out_route $DST_DATA_DIR  ""; # all nets written



exec mv ../../../source/${DESIGN}.def.gz  ../../../source/${DESIGN}.def.bak.gz

exec rsync -a $DST_DATA_DIR/${DESIGN}.def.gz ../../../source/${DESIGN}.def.gz


# Proceed to PREP once the above steps are completed successfully


Changes  to made to below files 

invs_config.tcl

to 

set LVT_DONT_USE_LIST {\

  E[12345]E.*$ \

  E[12345]U.*$ \

}

from

set LVT_DONT_USE_LIST {\

  E[12345]E.*$ \

}

set POWER_RATIO 0.8


set FLOPS_mbit [list \

  E3LLRA_BSDFFCW2X2  \

  E3LLRA_BSDFFCW2X4  \

  E3LLRA_BSDFFCW4X2  \

  E3LLRA_BSDFFCW4X4  \

  E3LLRA_BSDFFRW2X2  \

  E3LLRA_BSDFFRW2X4  \

  E3LLRA_BSDFFRW4X2  \

  E3LLRA_BSDFFRW4X4  \

  E3LLRA_BSDFFSW2X2  \

  E3LLRA_BSDFFSW4X2  \

  E3LLRA_BSDFFSW4X4  \

  E3LLRA_BSDFFW2X2  \

  E3LLRA_BSDFFW2X4  \

  E3LLRA_BSDFFW4X2  \

  E3LLRA_BSDFFW4X4  \

  E3LNRA_BSDFFCW2X2  \

  E3LNRA_BSDFFCW2X4  \

  E3LNRA_BSDFFCW4X2  \

  E3LNRA_BSDFFCW4X4  \

  E3LNRA_BSDFFRW2X2  \

  E3LNRA_BSDFFRW2X4  \

  E3LNRA_BSDFFRW4X2  \

  E3LNRA_BSDFFRW4X4  \

  E3LNRA_BSDFFSW2X2  \

  E3LNRA_BSDFFSW4X2  \

  E3LNRA_BSDFFSW4X4  \

  E3LNRA_BSDFFW2X2  \

  E3LNRA_BSDFFW2X4  \

  E3LNRA_BSDFFW4X2  \

  E3LNRA_BSDFFW4X4  \

  E4LLRA_BSDFFRW4VPX2  \

  E4LLRA_BSDFFSW4VPX2  \

  E4LLRA_BSDFFW4VPX2  \

  E4LNRA_BSDFFRW4VPX2  \

  E4LNRA_BSDFFSW4VPX2  \

  E4LNRA_BSDFFW4VPX2  \

]


invs_settings.sh

change as per block requirement

import_extra_constraints.tcl


set_interactive_constraint_modes [all_constraint_modes ]

if {[regexp "100|200" $flow_step]} {

      set_clock_gating_check -setup 0.2 [filter_collection [all_registers ] "is_integrated_clock_gating_cell == true"]

      set_clock_latency -0.1 [get_pins {*/CKA */CKB}]

      set_path_adjust_group -from [get_pins {*/CKA */CKB}]  -name mem_clk_grp

      set_path_adjust -0.025 -path_adjust_group mem_clk_grp  -view [all_setup_analysis_views ]

  

}

set_interactive_constraint_modes {}

place.tcl

 ### Optimize design

  ### - new optimization for pre cts

  set_interactive_constraint_modes [all_constraint_modes ]

   set_clock_gating_check -setup 0.2 [filter_collection [all_registers ] "is_integrated_clock_gating_cell == true"]

      set_clock_latency -0.1 [get_pins {*/CKA */CKB */CK}]

  set_interactive_constraint_modes {}


postroute_finishing.tcl

#### ----------------------------------------------------------------------

#### Begin output task

#### ----------------------------------------------------------------------

# mercury INFO:

# As a workaround, please run the following commands for DEF MASK issue on M4, M6:

Puts " mercury INFO: START - running dbSet commands to remove MASK 1 on M4 & M6"

dbSet [dbGet top.physNets.swires.layer.name M4 -p2].mask  0

dbSet [dbGet top.physNets.swires.layer.name M6 -p2].mask  0

Puts " mercury INFO: END - running dbSet commands to remove MASK 1 on M4 & M6"



AVO tweaker_timing_eco

After dmsa_sta, run the "tweaker_timing_eco" target to run ECO using tweaker


By default, all VT types are open for timing and power ECO. The VT type is controlled using the below 3 variables in avo_config.tcl

set TVAR(twkr,avaiVTcell)   " E*ENRA* E*UNRA* E*ULRA* E*LNRA* E*LLRA* E*SNRA* "

set TVAR(twkr,FASTtoSLOWmap) " @ENRA@ @UNRA@ @ULRA@ @LNRA@ @LLRA@ @SNRA@ : @UNRA@ @ULRA@ @LNRA@ @LLRA@ @SNRA@ : @ULRA@ @LNRA@ @LLRA@ @SNRA@ : @LNRA@ @LLRA@ @SNRA@ : @LLRA@ @SNRA@ : @SNRA@

set TVAR(twkr,SLOWtoFASTmap) " @SNRA@ @LLRA@ @LNRA@ @ULRA@ @UNRA@ @ENRA@ : @LLRA@ @LNRA@ @ULRA@ @UNRA@ @ENRA@ : @LNRA@ @ULRA@ @UNRA@ @ENRA@ : @ULRA@ @UNRA@ @ENRA@ : @UNRA@ @ENRA@ : @ENRA@ "


We have to disable EN and SN cells from the above 3 variables, as given in the below example :

set TVAR(twkr,avaiVTcell) " E*UNRA* E*ULRA* E*LNRA* E*LLRA* "

set TVAR(twkr,FASTtoSLOWmap)  " @UNRA@ @ULRA@ @LNRA@ @LLRA@ : @UNRA@ @ULRA@ @LNRA@ @LLRA@ : @ULRA@ @LNRA@ @LLRA@ : @LNRA@ @LLRA@ : @LLRA@  "

set TVAR(twkr,SLOWtoFASTmap)  " @LLRA@ @LNRA@ @ULRA@ @UNRA@ : @LLRA@ @LNRA@ @ULRA@ @UNRA@ : @LNRA@ @ULRA@ @UNRA@ : @ULRA@ @UNRA@ : @UNRA@  "



To avoid X1/X2 buffers during tweaker hold fixing, change the below settings in avo_config.tcl

set TVAR(twkr,slk_cell_mapping_rule_regexp_hld_sizing) { @X[3-9]+ @X[3-9]+ : @DLY[0-9]+@ @DLY[0-9]+@ : @BUFX[3-9]+ @DLY[0-9]+X[0-9]+ }


set TVAR(twkr,delayBuf) "E1LLRA_BUFX4 E2LLRA_BUFX4 E1LLRA_BUFX8 E2LLRA_BUFX8 E1LLRA_BUFX16 E2LLRA_BUFX16 E1LLRA_BUFX20 E2LLRA_BUFX20 E1LNRA_DLY025X2 E1LNRA_DLY025X4 E1LNRA_DLY050X4 E2LNRA_DLY025X2 E2LNRA_DLY025X4 E2LNRA_DLY025X8 E2LNRA_DLY050X2 E2LNRA_DLY050X8 E1LLRA_DLY025X2 E1LLRA_DLY025X4 E1LLRA_DLY050X4 E2LLRA_DLY025X2 E2LLRA_DLY025X4 E2LLRA_DLY025X8 E2LLRA_DLY050X2 E2LLRA_DLY050X8"



Also, exclude IO paths by setting the below variable to true :

set TVAR(twkr,excludeIO) true

set TVAR(twkr,exclude_io_cells) true


Disable split_load during setup fix, by using the below variable :

set TVAR(twkr_eco,enable_tproc_twkr_fix_setup_split_load) false  (avo/fscripts/twkr_timing_config.tcl)



####### To make the tweaker use ecoAddRepeater command in the eco file rather than trying to use the atomic buffer insertion #########

set tkr_eco_fix_trans 1

 set tkr_eco_fix_cap 1



OUTPUT :

summary : 

avo/timing/tweaker_timing_eco/rpts/postEcoGlobalTimingReport.rpt.gz

TOP 1000 violating setup and hold violating start and end pairs :

avo/timing/tweaker_timing_eco/rpts/timing_endpoint_summary.max.rpt.gz

avo/timing/tweaker_timing_eco/rpts/timing_endpoint_summary.min.rpt.gz

INDIVIDUAL CORNER RPT :

avo/timing/tweaker_timing_eco/rpts/dump_rpt/*

ECO FILES :

INVS ECO : avo/timing/tweaker_timing_eco/data/invs.tcl.<block name>

PT ECO : avo/timing/tweaker_timing_eco/data/pt.tcl.<block name>


AVO tweaker_power_eco

After implementing 1 round of tweaker_timing_eco, run "tweaker_power_eco" target for leakage recovery.


Before running this step, make sure EN and SN cells are disabled using the 3 variables discussed previously ( refer tweaker_timing_eco section )

set TVAR(twkr,avaiVTcell) " E*UNRA* E*ULRA* E*LNRA* E*LLRA* "

set TVAR(twkr,FASTtoSLOWmap)  " @UNRA@ @ULRA@ @LNRA@ @LLRA@ : @UNRA@ @ULRA@ @LNRA@ @LLRA@ : @ULRA@ @LNRA@ @LLRA@ : @LNRA@ @LLRA@ : @LLRA@  "

set TVAR(twkr,SLOWtoFASTmap)  " @LLRA@ @LNRA@ @ULRA@ @UNRA@ : @LLRA@ @LNRA@ @ULRA@ @UNRA@ : @LNRA@ @ULRA@ @UNRA@ : @ULRA@ @UNRA@ : @UNRA@  "


Bu default, "tweaker_power_eco" runs both leakage recovery and dynamic power optimization.


In :avo/fscripts/avo_config.tcl

To run only leakage recovery, disable dynamic power optimization by setting the below variable to 0

set tkr_eco_enable_dynamic_power_opt 0


Also, make sure the below variable is 1 for enabling leakage recovery ( By default, this variable is 1 )

set tkr_eco_enable_leakage_power_opt 1


By default, the flow does VT swap, cell downsizing and area recovery as part of leakage recovery.

To avoid timing degradation, we have to disable cell downsizing and area recovery , and only enable VT swap.

For this change, we need to comment the below highlighted lines in "gscripts/tweaker/fix_power.tcl" ( Use a local copy of gscripts since there is no write permission )


##############################  Leakage Power ECO  ####################


if { $tkr_eco_enable_leakage_power_opt } {

 echo "METRIC: Start tproc_twkr_leakage_power_vt_swap at [date]"

 tproc_twkr_leakage_power_vt_swap

 echo "METRIC: Stop tproc_twkr_leakage_power_vt_swap at [date]"

 dump_runtime


# echo "METRIC: Start tproc_twkr_leakage_power_sizing_down at [date]"

# tproc_twkr_leakage_power_sizing_down

# echo "METRIC: Stop tproc_twkr_leakage_power_sizing_down at [date]"

# dump_runtime


# echo "METRIC: Start tproc_twkr_leakage_power_area_recovery at [date]"

# tproc_twkr_leakage_power_area_recovery

# echo "METRIC: Stop tproc_twkr_leakage_power_area_recovery at [date]"

# dump_runtime

} else {

 echo "INFO: Not optimizing leakage power. (tkr_eco_enable_leakage_power_opt=0)"

}


##################################################################################