Via Pillar Flow in Innovus Product Version: Innovus 18.x and above September, 2018 Copyright Statement © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Cadence and the Cadence logo are registered trademarks of Cadence Design Systems, Inc. All others are the property of their respective holders. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 2 Via Pillar Flow in Innovus Contents Overview ...................................................................................................................... 4 Automatic Via Pillar Flow ............................................................................................. 5 Initialize DB .............................................................................................................. 5 Via Pillar PnR Flow .................................................................................................. 5 PostRoute Via Pillar Sizing and Timing-Driven ecoRoute ........................................ 6 Opportunistic Via Pillar ............................................................................................. 6 Data Preparation for Via Pillar Insertion....................................................................... 7 Via Pillar Definition in LEF ........................................................................................ 7 Cell Pin Via Pillar Association List ............................................................................ 8 Design Data Preparation .......................................................................................... 9 Via Pillar PnR Flow: Settings and Modes ............................................................... 11 How to Read the Report ......................................................................................... 11 ReportRouteTypeConstraints ................................................................................. 12 Advanced Usage .................................................................................................... 14 Recommended Flow .............................................................................................. 14 Clock Tree Synthesis ................................................................................................. 16 Sample Via Pillar Usage in Clock Tree .................................................................. 17 Alternate Flow: Via Pillar Optimization in postRoute .................................................. 19 Opportunistic Via Pillar Insertion ................................................................................ 20 How to Troubleshoot.................................................................................................. 23 Troubleshooting: Via Pillar Definition Errors in LEF ............................................... 23 Troubleshooting: No Via Pillar Insertion ................................................................. 24 Troubleshooting: MAXCELLEXTENSION Not Specified ........................................ 24 Troubleshooting: CUTCLASS Causing DRC Violation ........................................... 25 An Example in the Innovus flow ................................................................................. 25 Support ...................................................................................................................... 25 Feedback ................................................................................................................... 25 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 3 Via Pillar Flow in Innovus Overview Via pillars are composed of stacked parallel wire segments on intermediate layers. Each of the wire segments, except in the top layer, is connected above and below. The entire via pillar structure looks like the Jenga tower in the popular game. The individual wire segments are sometimes called fingers. There must be exactly one finger in the top layer of the via pillars. There are several benefits of adding via pillars in a design: • Connecting to multiple fingers of a pin • Replacing multi-cut via at DPT layers • Preventing EM violations • Improving timing performance • Adding to the robustness of slack • Improving utilization Innovus provides a very flexible, easy-to-use, and effective automatic via pillar flow. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 4 Via Pillar Flow in Innovus Automatic Via Pillar Flow The following flow chart illustrates the Innovus via pillar flow: Initialize DB: contains via pillar rule definitions in LEF format; load via pillars vs. cell pins associations Via Pillar PnR Flow: effort level control (EM, TD-low, TD-medium, TD-high). Generates a PostRoute DB PostRoute Via Pillar Sizing: Upsize/add via pillars and timing-driven ecoRoute focusing on creating optimal output routing topology – better timing Opportunistic Via Pillars: upgrade via pillars or convert single cuts to via pillars w/o creating DRCs – better slack quality Initialize DB To prepare for the via pillar flow, you must provide via pillar rule definitions in LEF. You also need to associate library cell pins with a list of applicable via pillars. The details of the via pillar rule definitions and the associate lists will be discussed in this document. Via Pillar PnR Flow Innovus provides an automatic PnR via pillar insertion flow. Innovus pillar optimization has four effort modes EM-only, low, medium and high. Innovus GigaOpt automatically evaluates timing tradeoffs and assigns the best via pillar rules to the instance pins (not cell pins). Innovus NanoRoute implements the via pillars based on the assigned stack via rules to instance pins or cell pins (if EM requirement exists). Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 5 Via Pillar Flow in Innovus PostRoute Via Pillar Sizing and Timing-Driven ecoRoute In preRoute stages, the timing of design is not as accurate. As a result, the via pillar flow faces the challeges of bridging the preRoute-postRoute timing correlation gap. Once a postRoute database has been created, GigaOpt is able to more aggressively upsize or add via pillars based on the more accurate postRoute timing. Furthermore, timing-driven ecoRoute focuses on creating optimal routing topology on the output pin to achieve better timing. Opportunistic Via Pillar With a post-routed design, the Innovus NanoRoute engine can scan for available tracks around an output pin and add wire segments to either insert a new via pillar or upgrade the current via pillar with more fingers at lower layers. Opportunistic via pillar optimization is DRC clean by construction. There is no need to reroute the design after this optimization. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 6 Via Pillar Flow in Innovus Data Preparation for Via Pillar Insertion For the via pillar flow to work correctly, the design data needs to be properly prepared. Particularly, you need to prepare the via pillar definitions in the LEF file and prepare the cell pin via pillar associate lists using the set_via_pillars commands. Via Pillar Definition in LEF Via pillars are defined either in the tech LEF file or in a separate LEF file. Via pillars are created as STACKVIARULEs composed of individual STACKVIALAYERRULEs. Each STACKVIALAYERRULE specifies: • Rule name o Name of the STACKVIALAYERRULE • Via LAYER o Layer of the via • Via CUTCLASS o CUTCLASS of the via • Stack via row and column dimension o ROWCOL: Number of vias (fingers) in y direction (ROW) and x direction (COL) • xpitch and ypitch o xpitch: The minimum number of tracks between adjacent vertical wires o ypitch: The minimum number of tracks between adjacent horizontal wires • MAXCELLEXTENSION o Maximum extension outside of cell boundary (by number of pitches) for via pillar wire segments The STACKVIARULE is composed of its individual STACKVIALAYERRULEs. The ROWCOL configurations of adjacent STACKVIALAYERRULEs must be aligned correctly. The top via pillar layer must be exactly one (1) finger. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 7 Via Pillar Flow in Innovus The following is a sample definition of a via pillar from M1 to M4 (with 1, 3, 2, 1 fingers in M1, M2, M3, M4, respectively.) PROPERTYDEFINITIONS # VPPERF_M1_M4_1_3_2_1 LIBRARY LEF58_STACKVIALAYERRULE STRING " STACKVIALAYERRULE SVIA1 LAYER VIA1 CUTCLASS VSINGLECUT ROWCOL 3 1 XPITCH 2 YPITCH 3 MAXCELLEXTENSION 1 ;" ; LIBRARY LEF58_STACKVIALAYERRULE STRING " STACKVIALAYERRULE SVIA2 LAYER VIA2 CUTCLASS VSINGLECUT ROWCOL 3 2 XPITCH 4 YPITCH 3 MAXCELLEXTENSION 1 ;" ; LIBRARY LEF58_STACKVIALAYERRULE STRING " STACKVIALAYERRULE SVIA3 LAYER VIA3 CUTCLASS VSINGLECUT ROWCOL 1 2 XPITCH 4 YPITCH 2 MAXCELLEXTENSION 1 ;" ; LIBRARY LEF58_STACKVIARULE STRING " STACKVIARULE VPPERF_M1_M4_1_3_2_1 SVIA1 SVIA2 SVIA3 ;" ; END PROPERTYDEFINITIONS Let’s call above file as vp_rule.lef Cell Pin Via Pillar Association List You must associate cell pins with their applicable via pillars by using set_via_pillars as follows: set_via_pillars <pillar_list> -term <term> [-required <bool>] The following are some examples of how set_via_pillars is generally used: foreach cell [dbGet head.libCells.name -e AN2_NOM_D16*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M2_M4_1_2_1 VPPERF_M2_M5_1_2_2_1 VPPERF_M2_M9_1_2_2_2_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AN2_NOM_D4*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_2_2_1} } foreach cell [dbGet head.libCells.name -e AN2_NOM_D6*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_2_2_1 VPPERF_M1_M5_1_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AN2_NOM_D8*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M2_M4_1_2_1 VPPERF_M2_M5_1_2_2_1 VPPERF_M2_M9_1_2_2_2_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AN3_NOM_D4*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_2_2_1} } foreach cell [dbGet head.libCells.name -e AN3_NOM_D6*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_2_2_1 VPPERF_M1_M5_1_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AN3_NOM_D8*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M2_M4_1_2_1 VPPERF_M2_M5_1_2_2_1 VPPERF_M2_M9_1_2_2_2_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AN4_NOM_D6*] {set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_2_2_1 VPPERF_M1_M5_1_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AN4_NOM_D8*] { set_via_pillars -term $cell/Z -required 0 {VPPERF_M2_M4_1_2_1 VPPERF_M2_M5_1_2_2_1 VPPERF_M2_M9_1_2_2_2_2_2_2_1} } foreach cell [dbGet head.libCells.name -e AO211_NOM_D4*] { set_via_pillars -term $cell/Z required 0 {VPPERF_M1_M4_1_2_2_1} } foreach cell [dbGet head.libCells.name -e AO21_NOM_D4*] { set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_2_2_1} } foreach cell [dbGet head.libCells.name -e AO22_NOM_D4*] { set_via_pillars -term $cell/Z -required 0 {VPPERF_M1_M4_1_3_2_1 VPPERF_M1_M4_1_4_2_1} } Let’s call above file as vp_association.tcl Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 8 Via Pillar Flow in Innovus The -required option specifies that an EM via pillar is required for the cell pin. The EM via pillar is defined to be the smallest via pillar in the list (presumably satisfies the EM requirement). Innovus can also upgrade the required EM via pillar to another wider/taller via pillar specified in the association list if it provides a timing benefit over the EM via pillar. For secondary PG pins (being input pins by nature), the set_via_pillars command does not work. This will be improved later. For now, use the following example: dbSet [dbGet [dbGet head.libCells.name HDR27XSICWD1BWP300H11P57PDLVT -p ].pgTerms.name TVDD -p ].stackViaRequired 1 dbSet [dbGet [dbGet head.libCells.name HDR27XSICWD1BWP300H11P57PDLVT -p ].pgTerms.name TVDD -p ].stackViaList VPEM_M1_M4_14_1_3_1 Design Data Preparation Design data must be prepared properly for the via pillar flow to work in Innovus. Especially, it is important to make sure the vias are correctly generated by Innovus. To achieve that, you need to follow a few guidelines. If the library cell pins have multiple fingers and they must be connected (PROPERTY LEF58 MUSTJOINALLPORTS exists), you must set the Tcl variable below. This variable might become default soon, but it is a good idea to set it or check to make sure. set mustjoinallports_is_one_pin 1 This Tcl var, if to be set, must be set before any library cell LEF file is parsed into Innovus. In other words, it must be set before any initDesign or restoreDesign command. Otherwise, inconsistency in DB might cause unexpected issues down the flow. If you use init_design to initialize the design data, it is recommended that the via pillar LEF is included in the init_lef_file list before calling init_design: setGenerateViaMode -auto true setGenerateViaMode -advanced_rule true ... setUserDataValue init_verilog $netlist setUserDataValue init_lef_file “tlef.lef vp_rule.lef std.lef” ... init_design source vp_association.tcl Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 9 Via Pillar Flow in Innovus Notice that the following commands are required before init_design: setGenerateViaMode –auto true setGenerateViaMode –advanced_rule true If setGenerateViaMode was skipped before init_design, you need to call generateVias –advanced_rule after init_design: ... setUserDataValue init_verilog $netlist setUserDataValue init_lef_file “tlef.lef vp_rule.lef std.lef” ... init_design generateVias -advanced_rule ... From a saved Innovus design, you can add the stack via rules by including the LEF file in the .globals file in the saved design directory: # in .globals ... setUserDataValue init_lef_file “tlef.lef vp_rule.lef std.lef” ... You can also use loadLefFile after restoreDesign to read in the via pillar LEF file: # start from a db without via pillar LEF restoreDesign db/design.enc.dat design loadLefFile vp_rule.lef generateVias -advanced_rule ... If you choose to use loadLefFile after restoreDesign, generateVias must be called explicitly and immediately after loadLefFile. Some Innovus commands, when invoked between loadLefFile and generateVias, might prevent the vias from being generated correctly. You are strongly encouraged to load all LEF files including via pillar definitions at the beginning of the flow. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 10 Via Pillar Flow in Innovus Via Pillar PnR Flow: Settings and Modes There are four optModes for via pillar efforts: • • • • setOptMode setOptMode setOptMode setOptMode -viaPillarEffort -viaPillarEffort -viaPillarEffort -viaPillarEffort none (EM-only mode) low (default) medium high Note: In Stylus Common User Interface (CUI), setOptMode -viaPillarEffort <> maps to set_db opt_via_pillar_effort <> Innovus GigaOpt applies different transformations in optimization stages for each individual effort level. The high effort level should be used with caution, especially for designs with high utilization, due to possible over-assignment of via pillars. Note that the via pillar definitions in the LEF file and the cell pin via pillar associate lists must be successfully loaded in Innovus for viaPillarEffort modes to work correctly. How to Read the Report In the preRoute stage, you will find the following report in the place_opt_design stage of the flow. The report shows the number of instance pins that have stack via rules assigned to them. **** Begin NDR-Layer And Stack Via Rules Usage Statistics **** Layer 5 has 24512 constrained nets Layer 10 has 216 constrained nets Stack Via Rule "VPPERF_M2_M9_1_2_2_2_2_2_2_1" is asserted on 141 instance pins, 0 cell pins Stack Via Rule "VPPERF_M2_M5_1_2_2_1" is asserted on 16 instance pins, 0 cell pins Stack Via Rule "VPPERF_M1_M4_1_4_2_1" is asserted on 2 instance pins, 0 cell pins Stack Via Rule "VPPERF_M1_M4_1_3_2_1" is asserted on 26 instance pins, 0 cell pins Stack Via Rule "VPPERF_M1_M4_1_2_2_1" is asserted on 460 instance pins, 0 cell pins Stack Via Rule "VPPERF_M2_M4_1_2_1" is asserted on 685 instance pins, 0 cell pins **** End NDR-Layer And Stack Via Rules Usage Statistics **** Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 11 Via Pillar Flow in Innovus After the design has been routed, you can find the stack via implementation ratio in the innovus.log or logv file (logv contains even more detailed information). In this example, summation of numerators equals 1178. However, summation of denominators equals 1208, which is more than 1204. This is because Innovus might have attempted multiple via pillars on the same instance pin. Innovus attempts to insert smaller via pillars if the currently assigned via pillar cannot be inserted successfully. If an EM via pillar is required for the cell pin, at least the EM via pillar will be inserted even with DRC violations. If an EM via pillar is not required, this instance pin could end up with no via pillar at all if all via pillars of the cell pin fail to be inserted. Detailed failure log can be found in the routing logv file. ReportRouteTypeConstraints After the design is routed, you can use the reportRouteTypeConstraints -svr command. In CUI, command to be used is report_route_type_constraints stack_via_rule) to report detailed stack via rule constraints information. For each stack via rule constraint, the following summaries are reported: • Routing cost • Number of constraints applied • Number of constraints implemented • Adherence ratio • Bottom-layer constraints • List of cells on which the stack via rule constraint was applied on driver A sample stack via rule constraints report is shown below: The list of cells on which a stack via rule constraint was applied on driver is also reported: Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 12 Via Pillar Flow in Innovus Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 13 Via Pillar Flow in Innovus Advanced Usage If you are an advanced user, you can use the following commands to remove via pillar associations on all library cell pins: dbSet head.libCells.terms.stackViaRequired 0 dbSet head.libCells.terms.stackViaList {} Note: CUI equivalent command is going to be as listed below: set_db base_pin:<cell>/<pin> .stack_via_list set_db base_pin:<cell>/<pin> .stack_via_required For some designs, it is helpful to specify a keepout box for some cells or instances so that there is more space to have via pillars inserted. Refer to the Innovus User Manual for the usage of the specify_pg_keepout command. Recommended Flow It is recommended that you use low viaPillarEffort optMode in preRoute stages and medium viaPillarEffort in postRoute optimization. The following flow chart is a summary of the Innovus via pillar flow: Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 14 Via Pillar Flow in Innovus Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 15 Via Pillar Flow in Innovus Clock Tree Synthesis After clock trees are synthesized, it is often necessary to use via pillars for EM prevention or timing improvement. You can use the set_ccopt_property command to specify and overwrite the via pillar settings for the instances and nets in the clock trees: set_ccopt_property stack_via_rule [-net_type trunk|leaf] [-clock_tree clock_tree_name] [-lib_pin cell_name/pin_name] via_pillar_rule Some sample usages are: • set_ccopt_property stack_via_rule –net_type trunk M1M4_1332 # CTS trunk nets use via pillar M1M4_1332. • set_ccopt_property stack_via_rule –clock_tree ck1 M1M4_1332 # All nets in ck1 use via pillar M1M4_1332. • set_ccopt_property stack_via_rule –lib_pin X/Y M1M4_1332 # All cell pins X/Y in clock trees use via pillar M1M4_1332. Notice that only one via pillar rule can be specified using set_ccopt_property. The options of set_ccopt_property can be mixed to provide a complex configuration of via pillar settings for the clock trees in the design. Notice that the settings by set_ccopt_property must be consistent with the cell pin via pillar association lists specified by set_via_pillars. The via pillars might not get implemented if there is any inconsistency between set_ccopt_property and set_via_pillars. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 16 Via Pillar Flow in Innovus Sample Via Pillar Usage in Clock Tree The following is an example of how to set up a CTS flow using via pillars: clk1 Top using NDR 3W2S Cell:ViaPillar BUFD12 : M1_M5_43321 BUFD10: M1_M5_43321 BUFD8: M1_M5_32221 Trunk using NDR 2W2S Cell:ViaPillar BUFD12 : M1_M4_4321 BUFD10: M1_M4_4321 BUFD8: M1_M4_3221 Leaf using NDR 1W2S Cell:ViaPillar BUFD12 : M1_M4_4321 BUFD10: (Default EM rule) BUFD8: (Default EM rule) create_route_type –name 3W2S –non_default_rule 3W2S create_route_type –name 2W2S –non_default_rule 2W2S create_route_type –name 1W2S –non_default_rule 1W2S set_ccopt_property buffer_cells {BUFD8 BUFD10 BUFD12} # For top tree: set_ccopt_property route_type 3W2S –net_type top set_ccopt_property stack_via_rule –lib_pin BUFD12/Z \ –net_type top M1_M5_43321 set_ccopt_property stack_via_rule –lib_pin BUFD10/Z \ –net_type top M1_M5_43321 set_ccopt_property stack_via_rule –lib_pin BUFD8/Z \ –net_type top M1_M5_33321 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 17 Via Pillar Flow in Innovus # For trunk tree: set_ccopt_property route_type 2W2S –net_type top set_ccopt_property stack_via_rule –lib_pin BUFD12/Z \ –net_type top M1_M4_4321 set_ccopt_property stack_via_rule –lib_pin BUFD10/Z \ –net_type top M1_M4_4321 set_ccopt_property stack_via_rule –lib_pin BUFD8/Z \ –net_type top M1_M4_3221 # For leaf tree: set_ccopt_property route_type 1W2S –net_type leaf set_ccopt_property stack_via_rule –lib_pin BUFD12/Z \ –net_type top M1_M4_4321 # Even if the user did not specify any rule for clock buffers, CTS will still honor the minimal EM via pillar requirement. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 18 Via Pillar Flow in Innovus Alternate Flow: Via Pillar Optimization in postRoute Innovus provides an alternate flow in which via pillar optimization is applied on a routed or postrouteopt-ed design that either has only EM via pillars inserted or no via pillars inserted at all in preRoute stages. The benefits of using the postRoute alternate flow include more stable and definite timing improvements and less changes to the existing customer flow. Note that even with this alternate flow, data preparation remains a critical issue. Refer to the Design Data Preparation section content related to: set mustjoinallports_is_one_pin 1 The LEF file that contains via pillar rules can be loaded later, but follow the data preparation steps and guidelines mentioned previously. The via pillar association file (library cell pins vs. via pillar lists) also needs to be sourced into Innovus. During postRoute optimization, via pillars are added or upsized and timing-driven routing creates optimal routing topology to improve timing: This is enabled when the -viaPillarEffort optMode is medium: setOptMode -viaPillarEffort mediumNote: Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 19 Via Pillar Flow in Innovus Note: In CUI, setOptMode -viaPillarEffort <> maps to set_db opt_via_pillar_effort <> It is recommended that when the design requires EM via pillars, via pillar optimization should start from the place_opt_design stage. If EM via pillars are not required, it is preferred that via pillar optimization starts at postRoute stage in order to take advantage of more accurate timing and achieve more stable and definite timing improvements. Opportunistic Via Pillar Insertion After the design is routed or postrouteopt-ed, NanoRoute can look for available tracks around the instance pin to either add a new via pillar or upgrade the original smaller via pillar to one with more fingers. In the following example, there was no via pillar inserted on the z pin. In this case, NanoRoute is able to find nearby available tracks to add an additional finger and create a new via pillar VPPERF_M2_M4_1_2_1. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 20 Via Pillar Flow in Innovus The following example shows an upgrade from VPEM_M1_M4_3_1_2_1 to VPPERF_M1_M4_3_2_2_1. After opportunistic via pillar insertion, there is no need for ecoRoute; opportunistic via pillar insertion is DRC clean by construction. Once again, make sure that data preparation was completed in accordance with the procedures mentioned above. You can perform opportunistic via pillar insertion by using the following command: routeDesign –viaPillarOpt You can specify a different cell pin via pillar association list for opportunistic via pillar insertion than the other list used for PnR flow. This is not required, but optional. Note: In CUI, routeDesign -viaPillarOpt maps to route_design via_pillar_opt The mode below allows opportunistic via pillar insertion to go outside the cell areas when searching for opportunities. By default, in low effort, the search radius is confined by cell area. In medium effort, the search radius can reach outside the cell area by one half of the row height. In high effort, it can reach outside the cell area by one full row height. The higher the effort level, the more runtime is required to execute the command. There is usually diminishing return in via pillar upgrades vs. increasing effort level. setNanoRouteMode –droutePostRouteViaPillarEffort {low|medium|high} Note: In CUI, setNanoRouteMode -droutePostRouteViaPillarEffort <> maps to set_db route_design_detail_post_route_via_pillar_effort <> Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 21 Via Pillar Flow in Innovus If runtime permits, Innovus recommends running multiple passes of routeDesign viaPillarOpt with increasing effort level; that is, {low -> medium -> high}. This guarantees that more via pillars are inserted. If you go for high effort immediately, order dependency might prevent some via pillars from being upgraded or added due to the presence of other via pillars in its proximity. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 22 Via Pillar Flow in Innovus How to Troubleshoot There are many reasons why via pillar rules might not get implemented even when you follow the recommended flow and procedures. This section discusses some common questions about via insertion failures and the steps to identify the causes. In an ongoing process, the Innovus R&D engineering team will actively look for ways to improve the usability of the tool through better error messages and data checking to help identify issues. Troubleshooting: Via Pillar Definition Errors in LEF Common errors when defining via pillars in LEF: • Adjacent STACKVIALAYERRULEs do not match: ... STACKVIALAYERRULE SVIA2 LAYER VIA2 CUTCLASS VSINGLECUT ROWCOL 3 2 XPITCH 1 YPITCH 1 ; ... STACKVIALAYERRULE SVIA3 LAYER VIA3 CUTCLASS VSINGLECUT ROWCOL 1 3 XPITCH 1 YPITCH 1 ; ... In this example, the dimension of via array on VIA2 (3x2) is not compatible with the dimension on VIA3 (1x3). • Topmost via pillar layer has more than one finger. • There are redundant and inconsistent redefinitions of STACKVIALAYERRULE or STACKVIARULE in the same LEF file or across multiple LEF files. • Insufficient number of via pillars are defined in the LEF file. Matching via pillars should be defined for layer assignment route layers to minimize redundant via resistance and improve the via pillar insertion ratio. Note that via pillar insertion does not honor the NDR rule on the net. NDR routing connects to the top finger if NDR exists on this net. The NDR rule is not honored in the intermediate layers of the via pillar. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 23 Via Pillar Flow in Innovus Troubleshooting: No Via Pillar Insertion Some common errors: • Check data preparation procedure (not necessarily ERRORs). • VIAINPINONLY property in LEF or NanoRouteMode prevents via pillar creation. • Instance pins under PG structure prevent DRC-free via pillar insertion. • The via pillar to be inserted is too large, and it goes beyond the cell area (see below). This requires the MAXCELLEXTENSION attribute to be adjusted properly. Troubleshooting: MAXCELLEXTENSION Not Specified Metal pitches, especially in higher layers, might prevent via pillars from being implemented because the pitch constraints in STACKVIALAYER rules might push the via pillar fingers outside of the cell boundary. MAXCELLEXTENSION must be specified in this case to allow the via pillar fingers to extend outside of the cell boundary. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 24 Via Pillar Flow in Innovus Troubleshooting: CUTCLASS Causing DRC Violation Make sure that the correct via CUTCLASS is specified in the STACKVIALAYERRULE statements. Improperly selected CUTCLASS can cause DRC violations and prevent via pillars from being implemented. Innovus continues to print out proper and meaningful error messages to identify the root cause of failure to insert via pillars. This is an ongoing process. An Example in the Innovus flow Specify following prior to init_design and include vp_rule.lef in lef list. set mustjoinallports_is_one_pin 1 setGenerateViaMode -auto true setGenerateViaMode -advanced_rule true Specify following after init_design Source vp_association.tcl Specify following before place_opt_design setOptMode -viaPillarEffort low Specify following before postroute optimization setOptMode -viaPillarEffort medium Specify following after postroute optimization reportRouteTypeConstraints -svr -file route_types.rpt Support Cadence Support Portal provides access to support resources, including an extensive knowledge base, access to software updates for Cadence products, and the ability to interact with Cadence Customer Support. Visit https://support.cadence.com. Feedback Email comments, questions, and suggestions to content_feedback@cadence.com. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 25