SOCV Optimization on Innovus for Beginners Rapid Adoption Kit (RAK) Product Version: Innovus 19.1 June 2019 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 SOCV Optimization on Innovus for Beginners: RAK Contents Purpose ....................................................................................................................... 4 Overview ...................................................................................................................... 4 Module 1: Introduction to SOCV analysis on Innovus .................................................. 5 Lab 1-1: Checking ocv_sigma information in liberty files without Liberty Variation Format (LVF) ............................................................................................................ 5 Lab 1-2: Checking ocv_sigma information with AOCV file ....................................... 9 Lab 1-3: Checking ocv_sigma information with SOCV file ..................................... 14 Lab 1-4: Checking ocv_sigma information with LVF liberty file .............................. 20 Module 2: Checking with a preCTS db for SOCV analysis ........................................ 26 Lab 2-1: Checking SOCV data through a db on Innovus ....................................... 26 Module 3: How to apply timing derates for SOCV optimization ................................. 43 Lab 3-1: Applying timing derates ............................................................................ 43 Support ...................................................................................................................... 59 Feedback ................................................................................................................... 59 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 3 SOCV Optimization on Innovus for Beginners: RAK Purpose The purpose of this RAK is to: 1. Introduce you to SOCV analysis using Innovus Implementation System. 2. Guide you how to set some variables and read SOCV/AOCV files to do SOCV analysis 3. Explain how to check if the design and libraries are ready for SOCV optimization, and 4. Demonstrate steps to apply timing derates for SOCV optimization. Overview This RAK contains labs on the following topics: • Locating SOCV solutions on Cadence Support Portal • Checking ocv_sigma information for SOCV analysis • Checking SOCV data with a preCTS db • Applying timing derates for SOCV optimization Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 4 SOCV Optimization on Innovus for Beginners: RAK Module 1: Introduction to SOCV analysis on Innovus Lab 1-1: Checking ocv_sigma information in liberty files without Liberty Variation Format (LVF) In this lab, you will check ocv_sigma information by reading in liberty. 1-1-1: Checking RAK data and Innovus software To use SOCV-based analysis and optimization, you need to check if there is ocv_sigma information inside liberty files, SOCV text files, or AOCV text files. Download the RAK data from the ‘Attachments’ section below the PDF on https://support.cadence.com. You may want to install Innovus 19.10 software from http://download.cadence.com. linux% tar xvfz RAK_SOCV_for_Innovus.tgz linux% cd RAK_SOCV/LAB2 1-1-2: Checking library files The design in this lab (./design/pic.v) is very simple, which has one FF and four buffers. You can easily find LVF/SOCV/AOCV information with this design. First, check the viewDefinition.tcl file if it has ocv_sigma information on cells: linux% grep lib ./design/viewDefinition.tcl create_library-set –name fast\ [list LIBS/lib/min/fast.lib] create_library_set –name slow\ [list LIBS/lib/min/slow.lib] -library_set slow\ -library_set fast\ linux% vi ./LIBS/lib/min/fast.lib Try to find the word “ocv_sigma” in the library file (fast.lib and slow.lib). Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 5 SOCV Optimization on Innovus for Beginners: RAK You will realize that such a word does not exist in the library. The above is a manual method to check if a library has ocv_sigma information for Innovus to do SOCV analysis. You can do the following on Innovus after loading the db: linux% innovus –nowin –log ./LOG –file ./scripts/innovus.tcl report_timing is executed at the last step in the innovus.tcl file. You cannot see any sigma on the Delay Sigma and Arrival Sigma columns. 1-1-3: Checking ocv_sigma information on Innovus with the Tcl proc report_ocvm 1. Check the has_socv property in a library cell: innovus 1> get_cells * RT U2 U3 U4 0x2c innovus 2> get_property [get_cells RT] has_socv **WARN: (TCLCMD-742): Property 'has_socv' is not supported for Instance. Command get_property ignored innovus 3> get_property [get_lib_cells -of_objects RT] has_socv false innovus 4> get_property [get_lib_cells -of_objects U2] has_socv false 2. You can do the above step with the Tcl proc. The innovus.tcl file reads in report_ocvm.tcl, which has several options to check which instances or libcells have the “has_socv” property. innovus 5> report_ocvm -help Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 6 SOCV Optimization on Innovus for Beginners: RAK Description: report LVF annotation status Usage: report_ocvm [-help] [<collection <collection>>] [-cell_delay] [-coefficient] [-lib_cell] [-list_annotated] [-list_not_annotated] [-max_cnt <integer>] [-nosplit] [-type <aocvm|socvm>] -help # Prints out the command usage <collection <collection>> # cell/lib_cell list (string, required) -cell_delay # cell delay (bool, optional) -coefficient # coefficient (bool, optional) -lib_cell # lib cell (bool, optional) -list_annotated # annotated (bool, optional) -list_not_annotated # not annotated (bool, optional) -max_cnt <integer> # max count value (default=100000) (string, optional) -nosplit # no split (bool, optional) -type <aocvm|socvm> # aocvm or socvm (string, optional) innovus 6> report_ocvm -cell_delay [get_cells *] The number of cell objects is 4 | Total | has_socv | not has_socv | -------------+---------------+----------------+--------------------+ Leaf cells | 4| 0| 4| innovus 7> report_ocvm -lib_cell [get_lib_cells */*] The number of libcell objects is 477 | Total | has_socv | not has_socv | -------------+----------------+----------------+------------------+ Lib cells | 477| 0| 477| Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 7 SOCV Optimization on Innovus for Beginners: RAK 3. Run report_ocvm with various options. innovus 8> report_ocvm -lib_cell [get_lib_cells */*] list_annotated The number of libcell objects is 477 # List of Annotated Cells | Total | has_socv | not has_socv | -------------+---------- ------+----------------+-------- ---------+ Lib cells | 477| 0| 477| innovus 9> report_ocvm -cell_delay [get_cells *] list_annotated The number of cell objects is 4 # List of Annotated Cells | Total | has_socv | not has_socv | -------------+---------- ------+----------------+-------- ---------+ Lib cells | 4| 0| 4| innovus 10> report_ocvm -cell_delay [get_cells *] list_not_annotated The number of cell objects is 4 # List of Not Annotated Cells: Cell Name (libCell Name) RT (gpdk045wc/SDFFRHQX1) U2 (gpdk045wc/BUFX2) U3 (gpdk045wc/BUFX2) U4 (gpdk045wc/BUFX2) | Total | has_socv | not has_socv | -------------+-----------------+------------------+----------------+ Leaf cells | 4| 0| 4| 4. Exit Innovus Implementation as follows: innovus> exit Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 8 SOCV Optimization on Innovus for Beginners: RAK Lab 1-2: Checking ocv_sigma information with AOCV file In this lab, you will check ocv_sigma information by reading in the AOCV file. 1-2-1: Checking lab data To use SOCV-based analysis and optimization, you need to check if there is ocv_sigma information inside LVF liberty files, SOCV text files, or AOCV text files. Go to the ./RAK_SOCV/LAB2 directory. linux% cd RAK_SOCV/LAB2 1-2-2: Checking AOCV file 1. First, check the viewDefinition.aocv.tcl file if it has ocv_sigma information on cells: linux% more ./design/viewDefinition.aocv.tcl create_library_set -name fast\ -timing\ [list LIBS/lib/min/fast.lib] \ -aocv ./design/side_file.aocv create_library_set -name slow\ -timing\ [list LIBS/lib/max/slow.lib] \ -aocv ./design/side_file.aocv linux% more ./design/side_file.aocv object_type: lib_cell delay_type : cell derate_type: early rf_type : rise fall object_spec: gpdk045*/BUFX2 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 9 SOCV Optimization on Innovus for Beginners: RAK depth: 1 distance: table: 0.989 object_type: lib_cell delay_type : cell derate_type: late rf_type : rise fall object_spec: gpdk045*/BUFX2 depth: 1 distance: table: 1.011 object_type: lib_cell delay_type : cell derate_type: early rf_type : rise fall object_spec: gpdk045*/SDFFRHQX1 depth: 1 distance: table: 0.991 object_type: lib_cell delay_type : cell Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 10 SOCV Optimization on Innovus for Beginners: RAK derate_type: late rf_type : rise fall object_spec: gpdk045*/SDFFRHQX1 depth: 1 distance: table: 1.009 You can see one value on the row beginning with “table:”. 1.009 means 1 + 𝜎 𝜇 for late table (derate_type: late), and 0.991 means 1 − 𝜎 𝜇 for early table (derate_type: early). To use AOCV coefficient as sigma, you need to use AOCV Bootstrap mode during SOCV analysis. Refer to the following application note to understand it: Advanced On-Chip Variation (AOCV) bootstrap mode for Statistical On-Chip Variation (SOCV) Direct link: https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000007ML0AEAW &pageName=ArticleContent&sq=005d0000001T44zAAC_20179310650705 2. See the script named ./scripts/innovus.aocv.tcl. The following two variables should be set before reading in libraries or the init_design command: set timing_library_infer_socv_from_aocv 1 set timing_library_scale_aocv_to_socv_to_n_sigma 1 Run ./scripts/innovus.aocv.tcl to check how the AOCV side file affects SOCV analysis. linux% innovus –nowin –log ./LOG –init ./scripts/innovus.aocv.tcl report_timing is executed at the last step in innovus.tcl. Path 1: MET Late External Delay Assertion Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 11 SOCV Optimization on Innovus for Beginners: RAK Endpoint: o2 (^) checked with leading edge of 'clk' Beginpoint: RT/Q (^) triggered by leading edge of 'clk' Path Groups: {clk} Analysis View: func_slow_max Other End Arrival Time 0.0000 (-3.00S) | 0.0000 | 0.0000 - External Delay 1.0000 + Phase Shift 10.0000 + CPPR Adjustment 0.0000 (+3.00S) | 0.0000 | 0.0000 = Required Time 9.0000 (-3.00S) | 9.0000 | 0.0000 - Arrival Time 0.3612 (+3.00S) | 0.3534 | 0.0026 = Slack Time 8.6388 (-3.00S) | 8.6466 | 0.0026 Clock Rise Edge 0.0000 + Clock Network Latency (Ideal) 0.0000 (+3.00S) | 0.0000 | 0.0000 = Beginpoint Arrival Time 0.0000 (+3.00S) | 0.0000 | 0.0000 +----------------------------------------------------------------+ | Instance | Delay | Delay | Delay | Arrival | Arrival | Arrival | | | | Mean | Sigma | Time | Mean | Sigma | |----------+-------+-------+-------+---------+---------+---------| | RT | | | | 0.0000 | 0.0000 | 0.0000 | | RT | 0.2771| 0.2698| 0.0024| 0.2771 | 0.2698 | 0.0024 | | U2 | 0.0864| 0.0836| 0.0009| 0.3612 | 0.3534 | 0.0026 | | | 0.0000| 0.0000| 0.0000| 0.3612 | 0.3534 | 0.0026 | You can see delay sigma and arrival sigma on the Delay Sigma and Arrival Sigma columns. The sigma delay of RT is 0.0024 and it can be derived as follows: 𝜎 𝜎 𝜇 𝜇 Since 1.009 = 1 + , 0.009 = . Delay Sigma = 0.009 * Delay Mean = 0.009 * 0.2698 ≒ 0.0024 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 12 SOCV Optimization on Innovus for Beginners: RAK 1-2-3: Checking ocv_sigma information on Innovus through the property 3. Check the has_socv property in a library cell: innovus 1> get_cells * RT U2 U3 U4 0x2e innovus 2> get_property [get_cells RT] has_socv **WARN: (TCLCMD-742): Property 'has_socv' is not supported for Instance. Command get_property ignored innovus 3> get_property [get_lib_cells -of_objects RT] has_socv true innovus 4> get_property [get_lib_cells -of_objects U2] has_socv true 4. You can do the above step with the Tcl proc. The innovus.tcl file reads in report_ocvm.tcl, which has several options to check which instances or libcells have the “has_socv” property. innovus 5> report_ocvm -cell_delay [get_cells *] The number of cell objects is 4 | Total | has_socv | not has_socv | -----------+----------------+----------------+---------------+ Leaf cells | 4| 4| 0| Through the above results, you can see that SOCV analysis is possible through the AOCV file with AOCV Bootstrap mode. 5. Exit Innovus Implementation as follows: innovus 6> exit Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 13 SOCV Optimization on Innovus for Beginners: RAK Lab 1-3: Checking ocv_sigma information with SOCV file In this lab, you will check ocv_sigma information by reading in the SOCV file. 1-3-1: Checking RAK data and Innovus software To use SOCV-based analysis and optimization, you need to check if there is ocv_sigma information inside LVF liberty files, SOCV text files, or AOCV text files. Go to the ./RAK_SOCV/LAB2 directory. linux% cd RAK_SOCV/LAB2 1-3-2: Checking library files 1. First, check the viewDefinition.socv.tcl file if it has ocv_sigma information on cells: linux% more ./design/viewDefinition.socv.tcl create_library_set -name fast\ -timing\ [list LIBS/lib/min/fast.lib] \ -aocv ./design/side_file.aocv \ -socv ./design/side_file.socv create_library_set -name slow\ -timing\ [list LIBS/lib/max/slow.lib] \ -aocv ./design/side_file.aocv \ -socv ./design/side_file.socv linux% more ./design/side_file.socv object_spec: gpdk045*/BUFX2 pin: Y pin_direction: rise Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 14 SOCV Optimization on Innovus for Beginners: RAK related_pin: A related_direction: rise type: delay when: related_transition: 0.008, 0.04, 0.08, 0.12, 0.16, 0.224, 0.28 output_loading: 0.01, 0.06, 0.1, 0.15, 0.2, 0.25, 0.3 sigma: 0.02000, 0.02100, 0.02200, 0.02300, 0.02400, 0.02500, 0.02600, 0.02010, 0.02110, 0.02210, 0.02310, 0.02410, 0.02510, 0.02610, 0.02020, 0.02120, 0.02220, 0.02320, 0.02420, 0.02520, 0.02620, 0.02030, 0.02130, 0.02230, 0.02330, 0.02430, 0.02530, 0.02630, 0.02040, 0.02140, 0.02240, 0.02340, 0.02440, 0.02540, 0.02640, 0.02050, 0.02150, 0.02250, 0.02350, 0.02450, 0.02550, 0.02650, 0.02060, 0.02160, 0.02260, 0.02360, 0.02460, 0.02560, 0.02660 object_spec: gpdk045*/BUFX2 pin: Y pin_direction: fall related_pin: A related_direction: fall type: delay when: related_transition: 0.008, 0.04, 0.08, 0.12, 0.16, 0.224, 0.28 output_loading: 0.01, 0.06, 0.1, 0.15, 0.2, 0.25, 0.3 sigma: 0.02000, 0.02100, 0.02200, 0.02300, 0.02400, 0.02010, 0.02110, 0.02210, 0.02310, 0.02410, 0.02020, 0.02120, 0.02220, 0.02320, 0.02420, 0.02030, 0.02130, 0.02230, 0.02330, 0.02430, 0.02040, 0.02140, 0.02240, 0.02340, 0.02440, 0.02050, 0.02150, 0.02250, 0.02350, 0.02450, 0.02060, 0.02160, 0.02260, 0.02360, 0.02460, Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 15 SOCV Optimization on Innovus for Beginners: RAK 0.02500, 0.02510, 0.02520, 0.02530, 0.02540, 0.02550, 0.02560, 0.02600, 0.02610, 0.02620, 0.02630, 0.02640, 0.02650, 0.02660 object_spec: gpdk045*/SDFFRHQX1 pin: Q pin_direction: rise related_pin: CK related_direction: rise type: delay when: related_transition: 0.008, 0.04, 0.08, 0.12, 0.16, 0.224, 0.28 output_loading: 0.01, 0.016, 0.05, 0.08, 0.12, 0.2, 0.25 sigma: 0.02000, 0.02100, 0.02200, 0.02300, 0.02400, 0.02500, 0.02600, 0.02010, 0.02110, 0.02210, 0.02310, 0.02410, 0.02510, 0.02610, 0.02020, 0.02120, 0.02220, 0.02320, 0.02420, 0.02520, 0.02620, 0.02030, 0.02130, 0.02230, 0.02330, 0.02430, 0.02530, 0.02630, 0.02040, 0.02140, 0.02240, 0.02340, 0.02440, 0.02540, 0.02640, 0.02050, 0.02150, 0.02250, 0.02350, 0.02450, 0.02550, 0.02650, 0.02060, 0.02160, 0.02260, 0.02360, 0.02460, 0.02560, 0.02660 object_spec: gpdk045*/SDFFRHQX1 pin: Q pin_direction: fall related_pin: CK related_direction: rise type: delay when: related_transition: 0.008, 0.04, 0.08, 0.12, 0.16, 0.224, 0.28 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 16 SOCV Optimization on Innovus for Beginners: RAK output_loading: 0.01, 0.016, 0.05, 0.08, 0.12, 0.2, 0.25 sigma: 0.02000, 0.02100, 0.02200, 0.02300, 0.02400, 0.02500, 0.02600, 0.02010, 0.02110, 0.02210, 0.02310, 0.02410, 0.02510, 0.02610, 0.02020, 0.02120, 0.02220, 0.02320, 0.02420, 0.02520, 0.02620, 0.02030, 0.02130, 0.02230, 0.02330, 0.02430, 0.02530, 0.02630, 0.02040, 0.02140, 0.02240, 0.02340, 0.02440, 0.02540, 0.02640, 0.02050, 0.02150, 0.02250, 0.02350, 0.02450, 0.02550, 0.02650, 0.02060, 0.02160, 0.02260, 0.02360, 0.02460, 0.02560, 0.02660 You can see the ocv_sigma values. These values depend on related_transition and output_loading. 2. See the script named ./scripts/innovus.socv.tcl and run it to understand how the SOCV side file affects SOCV analysis. linux% innovus –nowin –log ./LOG –init ./scripts/innovus.socv.tcl report_timing is executed at the last step in innovus.tcl. Path 1: MET Late External Delay Assertion Endpoint: o2 (^) checked with leading edge of 'clk' Beginpoint: RT/Q (^) triggered by leading edge of 'clk' Path Groups: {clk} Analysis View: func_slow_max Other End Arrival Time 0.0000 (-3.00S) | 0.0000 | 0.0000 - External Delay 1.0000 + Phase Shift 10.0000 + CPPR Adjustment 0.0000 (+3.00S) | 0.0000 | = Required Time 9.0000 (-3.00S) | 9.0000 | 0.0000 - Arrival Time 0.4414 (+3.00S) | 0.3534 | 0.0293 = Slack Time 8.5586 (-3.00S) | 8.6466 | 0.0293 0.0000 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 17 SOCV Optimization on Innovus for Beginners: RAK Clock Rise Edge 0.0000 + Clock Network Latency (Ideal) 0.0000 (+3.00S) | 0.0000 | 0.0000 = Beginpoint Arrival Time 0.0000 (+3.00S) | 0.0000 | 0.0000 +----------------------------------------------------------------+ | Instance | Delay | Delay | Delay | Arrival | Arrival | Arrival | | | | Mean | Sigma | Time | Mean | Sigma | |----------+-------+-------+-------+---------+---------+---------| | RT | | | | 0.0000 | 0.0000 | 0.0000 | | RT | 0.3293| 0.2698| 0.0198| 0.3293 | | U2 | 0.1484| 0.0836| 0.0216| 0.4414 | 0.3534 | 0.0293 | | | 0.0000| 0.0000| 0.0000| 0.4414 | 0.3534 | 0.0293 | 0.2698 | 0.0198 | +----------------------------------------------------------------+ You can see delay sigma and arrival sigma on the Delay Sigma and Arrival Sigma columns. With the AOCV side file, you got the delay sigma as 0.0024 in the previous section: | RT | 0.2771 | 0.2698 | 0.0024 | 0.2771 | 0.2698 | 0.0024 | With the SOCV side file, you got the delay sigma as 0.0198: | RT | 0.3293 | 0.2698 | 0.0198 | 0.3293 | 0.2698 | 0.0198 | Through the above results, you can see that the SOCV file has more priority over the AOCV file. 1-3-3: Checking ocv_sigma information on Innovus 3. Check the has_socv property in a library cell: innovus 1> get_cells * RT U2 U3 U4 0x2e Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 18 SOCV Optimization on Innovus for Beginners: RAK innovus 2> get_property [get_cells RT] has_socv **WARN: (TCLCMD-742): Property 'has_socv' is not supported for Instance. Command get_property ignored innovus 3> get_property [get_lib_cells -of_objects RT] has_socv true innovus 4> get_property [get_lib_cells -of_objects U2] has_socv true 4. You can do the above step with the Tcl proc. The innovus.tcl file reads in report_ocvm.tcl, which has several options to check which instances or libcells have the “has_socv” property. innovus 5> report_ocvm -cell_delay [get_cells *] The number of cell objects is 4 | Total | has_socv | not has_socv | --- ---------+-------------+----------------+----------------+ Leaf cells | 4| 4| 0| 5. Exit Innovus Implementation as follows: innovus 6> exit Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 19 SOCV Optimization on Innovus for Beginners: RAK Lab 1-4: Checking ocv_sigma information with LVF liberty file In this lab, you will check ocv_sigma information by reading in the LVF liberty file. 1-4-1: Checking RAK data and Innovus software To use SOCV-based analysis and optimization, you need to check if there is ocv_sigma information inside LVF liberty files, SOCV text files, or AOCV text files. Go to the ./RAK_SOCV/LAB2 directory. linux% cd RAK_SOCV/LAB2 1-4-2: Checking library files 1. First, check the viewDefinition.lvf.tcl file if it has ocv_sigma information on cells: linux% more ./design/viewDefinition.lvf.tcl create_library_set -name fast\ -timing\ [list LIBS/lib/min/fast.lib_lvf] \ -aocv ./design/side_file.aocv \ -socv ./design/side_file.socv create_library_set -name slow\ -timing\ [list LIBS/lib/max/slow.lib_lvf] \ -aocv ./design/side_file.aocv \ -socv ./design/side_file.socv linux% grep ocv_sigma ./LIBS/lib/max/slow.lib_lvf ocv_sigma_cell_rise(delay_template_7x7) { ocv_sigma_cell_rise(delay_template_7x7) { ocv_sigma_rise_transition(delay_template_7x7) { Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 20 SOCV Optimization on Innovus for Beginners: RAK ocv_sigma_rise_transition(delay_template_7x7) { ocv_sigma_cell_fall(delay_template_7x7) { ocv_sigma_cell_fall(delay_template_7x7) { ocv_sigma_fall_transition(delay_template_7x7) { ocv_sigma_fall_transition(delay_template_7x7) { You can see that ocv_sigma* constructs exist in the liberty file. 2. See the script named ./scripts/innovus.lvf.tcl and run it to understand how the LVF liberty file affects SOCV analysis. linux% innovus –nowin –log ./LOG –init ./scripts/innovus.lvf.tcl report_timing is executed at the last step in innovus.tcl. Path 1: MET Late External Delay Assertion Endpoint: o2 (^) checked with leading edge of 'clk' Beginpoint: RT/Q (^) triggered by leading edge of 'clk' Path Groups: {clk} Analysis View: func_slow_max Other End Arrival Time 0.0000 (-3.00S) | 0.0000 | 0.0000 - External Delay 1.0000 + Phase Shift 10.0000 + CPPR Adjustment 0.0000 (+3.00S) | 0.0000 | 0.0000 = Required Time 9.0000 (-3.00S) | 9.0000 | 0.0000 - Arrival Time 0.4026 (+3.00S) | 0.3562 | 0.0155 = Slack Time 8.5974 (-3.00S) | 8.6438 | 0.0155 Clock Rise Edge 0.0000 + Clock Network Latency (Ideal) 0.0000 (+3.00S) | 0.0000 | 0.0000 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 21 SOCV Optimization on Innovus for Beginners: RAK = Beginpoint Arrival Time 0.0000 (+3.00S) | 0.0000 | 0.0000 +-------------------------------------------------------------------+ | Instance | Delay | Delay | Delay | Arrival | Arrival | Arrival | | Sigma | Time | | Mean | | Mean | Sigma | |----------+--------+--------+--------+---------+---------+---------| | RT | | | | 0.0000 | 0.0000 | 0.0000 | | RT | 0.3120 | 0.2713 | 0.0136 | 0.3120 | 0.2713 | 0.0136 | | U2 | 0.1073 | 0.0849 | 0.0075 | | | 0.0000 | 0.0000 | 0.0000 | 0.4026 | 0.4026 | 0.3562 | 0.0155 | 0.3562 | 0.0155 | +-------------------------------------------------------------------+ You can see delay sigma and arrival sigma on the Delay Sigma and Arrival Sigma columns. With the LVF liberty file, you got the delay sigma as 0.0136 on the RT instance (CK->Q). Through the above results, you can see the preference order of LVF > SOCV file > AOCV file over ocv_sigma information. 1-4-3: Checking ocv_sigma information on Innovus 3. Check the has_socv property in a library cell: innovus 1> get_cells * RT U2 U3 U4 0x2e innovus 2> get_property [get_lib_cells -of_objects RT] has_socv true innovus 3> get_property [get_lib_cells -of_objects U2] has_socv Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 22 SOCV Optimization on Innovus for Beginners: RAK true 4. You can do the above step with the Tcl proc. The innovus.tcl reads in report_ocvm.tcl, which has several options to check which instances or libcells have the “has_socv” property. innovus 4> report_ocvm -cell_delay [get_cells *] The number of cell objects is 4 | Total | has_socv | not has_socv | -------------+--------------+---------------+----------------+ Leaf cells | 4| 4| 0| innovus 5> report_property [get_lib_cells –of_objects RT] property | value ------------------------------------------------area | 0.0000 early_clock_check_incremental_derate_factor | 0.0000 early_data_check_incremental_derate_factor | 0.0000 early_fall_clock_incremental_derate_factor | 0.0000 early_fall_data_incremental_derate_factor | 0.0000 early_rise_clock_incremental_derate_factor | 0.0000 early_rise_data_incremental_derate_factor | 0.0000 fall_input_switching_derate_factor | ground_pins | {...} has_ccs_noise | false has_socv | true has_spatial | false hierarchical_name | gpdk045wc/SDFFRHQX1 is_always_on | false Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 23 SOCV Optimization on Innovus for Beginners: RAK is_black_box | false is_buffer | false is_combinational | false is_disable_timing | false is_dont_touch | false is_dont_use | false is_fall_edge_triggered | false is_integrated_clock_gating_cell | false is_interface_timing | false is_inverter | false is_isolation_cell | false is_level_shifter | false is_macro_cell | false is_memory_cell | false is_msv | false is_negative_level_sensitive | false is_pad_cell | false is_pll_cell | false is_positive_level_sensitive | false is_power_switch | false is_retention | false is_rise_edge_triggered | true is_sequential | true is_tristate | false Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 24 SOCV Optimization on Innovus for Beginners: RAK is_unmapped | false late_clock_check_incremental_derate_factor | 0.0000 late_data_check_incremental_derate_factor | 0.0000 late_fall_clock_incremental_derate_factor | 0.0000 late_fall_data_incremental_derate_factor | 0.0000 late_rise_clock_incremental_derate_factor | 0.0000 late_rise_data_incremental_derate_factor | 0.0000 leakage | 0.0000 level_shifter_type | lib_pg_pins | {} name | SDFFRHQX1 object_type | lib_cell pin_count | 6 power_pins | {...} power_switch_type | rise_input_switching_derate_factor | signal_pins | {...} std_cell_main_rail_name | threshold_voltage_group | timing_model_type | You can see that the has_ccs_noise property exists in the above report and there is no CCS noise information on the cell because its value is false. Exit Innovus Implementation as follows: innovus 6> exit Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 25 SOCV Optimization on Innovus for Beginners: RAK Module 2: Checking with a preCTS db for SOCV analysis Lab 2-1: Checking SOCV data through a db on Innovus In this lab, you will check ocv_sigma information with a preCTS db. Go to the ./RAK_SOCV/LAB3 directory. linux% cd RAK_SOCV/LAB3 2-1-1: Checking LVF information in timing libraries The standard cell library should have the following constructs to do SOCV analysis: Cell Delay: ocv_sigma_cell_rise(delay_template) { sigma_type : “early”; index_1 ( … ); index_2 (…); values ( “ …”, … “…”); } ocv_sigma_cell_rise(delay_template) { sigma_type : “late”; index_1 ( … ); index_2 (…); values ( “ …”, … “…”); } Transition Time: ocv_sigma_rise_transition(delay_template) { sigma_type : “early”; Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 26 SOCV Optimization on Innovus for Beginners: RAK index_1 ( … ); index_2 (…); values ( “ …”, … “…”); } ocv_sigma_rise_transition(delay_template) { sigma_type : “late”; index_1 ( … ); index_2 (…); values ( “ …”, … “…”); } Constraint: ocv_sigma_rise_constraint(delay_template) { sigma_type : “early”; index_1 ( … ); index_2 (…); values ( “ …”, … “…”); } ocv_sigma_rise_constraint(delay_template) { sigma_type : “late”; index_1 ( … ); index_2 (…); values ( “ …”, … “…”); } The above constructs show only rise. You can easily guess the fall constructs. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 27 SOCV Optimization on Innovus for Beginners: RAK Open the./LIBS/lib/min/fast.lib_lvf or ./LIBS/lib/max/slow.lib_lvf file. 2-1-2: How to check if library cells have LVF information on Innovus Innovus adds the has_socv property while reading libraries. 1. Invoke Innovus as follows: csh% cd RAK_SOCV/LAB3 csh% innovus –nowin –file ./SCRIPTS/LAB3.tcl 2. Then, on the Innovus prompt, run the following command: innovus 1> get_property [get_lib_cells */*] has_socv It is better that you use the Tcl command named report_ocvm. innovus 2> report_ocvm -help Description: Reports LVF annotation status Usage: report_ocvm [-help] [<collection <collection>>] [cell_delay] [-coefficient] [-lib_cell] [-list_annotated] [-list_not_annotated] [-max_cnt <integer>] [-nosplit] [-type <aocvm|socvm>] Where: -help # Prints out the command usage <collection <collection>> # cell/lib_cell list (string, required) -cell_delay # cell delay (bool, optional) -coefficient # coefficient (bool, optional) -lib_cell # lib cell (bool, optional) -list_annotated # annotated (bool, optional) Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 28 SOCV Optimization on Innovus for Beginners: RAK -list_not_annotated # not annotated (bool, optional) -max_cnt <integer> # max count value (default=100000) (string, optional) -nosplit # no split (bool, optional) -type <aocvm|socvm> # aocvm or socvm (string, optional) innovus 3> report_ocvm -lib_cell [get_lib_cells */*] The number of libcell objects is 956 | Total | has_socv | not has_socv | ----------+-------------+--------------+-----------------+ Lib cells| 956| 948| 8| 3. You can see that 948 lib cells have the has_socv property, and 8 libcells do not have the property. 4. Check which library cells do not have the property as follows: innovus 4> report_ocvm -lib_cell [get_lib_cells */*] list_not_annotated The number of libcell objects is 956 # List of Not Annotated LibCells: library/libcell gpdk045wc/HOLDX1 gpdk045wc/TIELO gpdk045wc/TIEHI MEM1_256X32/MEM1_256X32 MEM2_128X32/MEM2_128X32 gpdk045bc/HOLDX1 gpdk045bc/TIELO gpdk045bc/TIEHI | Total | has_socv | not has_socv | -------------+----------------+-----------------+--------------------+ Lib cells | 956| 948| 8| Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 29 SOCV Optimization on Innovus for Beginners: RAK 5. If you want to see the list of library cells that have the has_socv property, use the –list_annotated option. innovus 5> report_ocvm -lib_cell [get_lib_cells */*] list_annotated The number of libcell objects (ceels present in the standard cell libraries) is 956 # List of Annotated Cells gpdk045bc/ADDFHX2 gpdk045bc/ADDFHX4 gpdk045bc/ADDFHXL gpdk045bc/ADDFXL gpdk045bc/ADDHX2 gpdk045bc/ADDHXL gpdk045bc/AND2X4 gpdk045bc/AND2X6 gpdk045bc/AND2XL gpdk045bc/AND3X1 | Total | has_socv | not has_socv | ------------+----------------+---------------+------------------+ Lib cells | 956| 948| 8| You can use the two options together as follows: report_ocvm -lib_cell [get_lib_cells */*] -list_annotated list_not_annotated You can use the –cell_delay option as follows: innovus 6> report_ocvm -cell_delay [get_cells *] The number of cell objects is 130 | Total | has_socv | not has_socv | ------------+---------------+---------------+-----------------+ Leaf cells | 130| 130| 0| innovus 7> report_ocvm -cell_delay [get_cells -hier *] Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 30 SOCV Optimization on Innovus for Beginners: RAK The number of cell objects (cells instantiated in the design from the standard cell library) is 35773 | Total | has_socv | not has_socv | ------------+-----------------+----------------+-----------------+ Leaf cells | 35773| 35769| 4| Previously, you got the number 8 with report_ocvm –lib_cell but the number 4 with report_ocvm –cell_delay. The latter considers only the instantiated cells. You need to check that the following libcells are not instantiated in the current design: gpdk045wc/HOLDX1 gpdk045wc/TIELO gpdk045wc/TIEHI MEM1_256X32/MEM1_256X32 MEM2_128X32/MEM2_128X32 gpdk045bc/HOLDX1 gpdk045bc/TIELO gpdk045bc/TIEHI innovus 8> get_cells -of_objects [get_lib_cells MEM*X32/MEM*X32] proc0/cmem0/ddata0/u0/id0 proc0/cmem0/dtags0/u0/id0 proc0/cmem0/idata0/u0/id0 proc0/cmem0/itags0/u0/id0 0xa218 innovus 9> get_cells -of_objects [get_lib_cells "*/TIE* */HOLD*"] **ERROR: (TCLCMD-927): Can not find 'cells' for specified 'pins or nets or library cells or design cells' This means that the 2 instances of TIELO and 2 instances of TIEHI aren’t instantiated in the current design. innovus 10> get_cells -of_objects [get_lib_cells "*/MEM1* */MEM2*"] proc0/cmem0/ddata0/u0/id0 proc0/cmem0/dtags0/u0/id0 proc0/cmem0/idata0/u0/id0 proc0/cmem0/itags0/u0/id0 0xa21b Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 31 SOCV Optimization on Innovus for Beginners: RAK So, you can conclude that the memory cells do not have LVF information in their liberty files. 2-1-3: How to annotate variation information for memory cells Most customers have an AOCV coefficient file for memory cells. The AOCV table has 1 + 𝜎 𝜇 for late table and 1 − 𝜎 𝜇 for early table, as you saw in the previous module (Module 2, Lab 2). So, you can reuse it during SOCV analysis. To do so, you need to get the AOCV file. See the following AOCV file for memory cells (the filename is ./DATA/side_file.aocv): object_type: lib_cell delay_type : cell derate_type: early rf_type : rise fall object_spec : -quiet [get_lib_cells -quiet "MEM1_*X32/MEM1_*X32"] depth: 1 distance: table: 0.989 object_type: lib_cell delay_type : cell derate_type: late rf_type : rise fall object_spec : -quiet [get_lib_cells -quiet MEM1_*X32/MEM1_*X32 ] depth: 1 distance: Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 32 SOCV Optimization on Innovus for Beginners: RAK table: 1.011 object_type: lib_cell delay_type : cell derate_type: early rf_type : rise fall object_spec : -quiet [get_lib_cells -quiet MEM2_*X32/MEM2_*X32 ] depth: 1 distance: table: 0.991 object_type: lib_cell delay_type : cell derate_type: late rf_type : rise fall object_spec : -quiet [get_lib_cells -quiet MEM2_*X32/MEM2_*X32 ] depth: 1 distance: table: 1.009 Innovus can use AOCV information during SOCV analysis. To do that, you need to set AOCV Bootstrap mode for SOCV. Then, Innovus can do SOCV analysis for the cells with AOCV. See the man pages of the following two variables: set timing_library_infer_socv_from_aocv 1 set timing_library_scale_aocv_to_socv_to_n_sigma 1 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 33 SOCV Optimization on Innovus for Beginners: RAK innovus 11> source ./SCRIPTS/read_aocvm.tcl innovus 12> read_aocvm -help Description: Reads the AOCVM file to run SOCV analysis as AOCV Bootstrap mode Usage: read_aocvm [-help] <aocvm_filename <string>> [-library_set <string>] Where: -help # Prints out the command usage <aocvm_filename <string>> # aocvm_filename (string, required) -library_set <string> # library_set name (string, required) You need to know library_set. innovus 13> report_analysis_views Multi-Mode Analysis View Report _______________________________ + ALL Views | + Analysis View: func_slow_max | + Delay Calc Corner: slow_max | | | + library_set: slow | | | | | + timing: LIBS/lib/max/slow.lib_lvf Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 34 SOCV Optimization on Innovus for Beginners: RAK LIBS/lib/min/MEM1_256X32_slow.lib LIBS/lib/min/MEM2_128X32_slow.lib | | | | You can see that only timing libraries are linked to the slow library set. Now, add the AOCV file to the library set. innovus 14> read_aocvm ./DATA/side_file.aocv -library_set slow WARN(read_aocvm): Please check if you set the following before loading your libraries set timing_library_infer_socv_from_aocv true set_global timing_derate_spatial_distance_unit 1nm set timing_library_scale_aocv_to_socv_to_n_sigma <value> INFO(read_aocvm): update_library_set -name slow -aocv ./DATA/side_file.aocv You can check with " get_library_set slow -aocv " innovus 15> read_aocvm ./DATA/side_file.aocv -library_set fast WARN(read_aocvm): Please check if you set the following before loading your libraries set timing_library_infer_socv_from_aocv true set_global timing_derate_spatial_distance_unit 1nm set timing_library_scale_aocv_to_socv_to_n_sigma <value> INFO(read_aocvm): update_library_set -name fast -aocv ./DATA/side_file.aocv You can check with " get_library_set fast -aocv " innovus 16> report_analysis_views Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 35 SOCV Optimization on Innovus for Beginners: RAK Multi-Mode Analysis View Report _______________________________ + ALL Views | + Analysis View: func_slow_max | + Delay Calc Corner: slow_max | | | + library_set: slow | | | | | + timing: LIBS/lib/max/slow.lib_lvf LIBS/lib/min/MEM1_256X32_slow.lib LIBS/lib/min/MEM2_128X32_slow.lib | | | | | + aocv: side_file.aocv innovus 17> report_ocvm -coeff -lib_cell [get_lib_cells */*] –list_annotated The number of libcell objects is 956 # Library SetType and Name-> library_set_slow AOCV sigma/mean file= ./DATA/side_file.aocv ## Lib Cell List MEM1_256X32/MEM1_256X32 ### derate_type=early, rf_type : rise fall, sigma/mean (coeff.) = 0.011 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 36 SOCV Optimization on Innovus for Beginners: RAK ## Lib Cell List MEM1_256X32/MEM1_256X32 ### derate_type=late, rf_type : rise fall, sigma/mean (coeff.) = 0.011 ## Lib Cell List MEM2_128X32/MEM2_128X32 ### derate_type=early, rf_type : rise fall, sigma/mean (coeff.) = 0.009 ## Lib Cell List MEM2_128X32/MEM2_128X32 ### derate_type=late, rf_type : rise fall, sigma/mean (coeff.) = 0.009 # Library SetType and Name-> library_set_fast AOCV sigma/mean file= ./DATA/side_file.aocv ## Lib Cell List MEM1_256X32/MEM1_256X32 ### derate_type=early, rf_type : rise fall, sigma/mean (coeff.) = 0.011 ## Lib Cell List MEM1_256X32/MEM1_256X32 ### derate_type=late, rf_type : rise fall, sigma/mean (coeff.) = 0.011 ## Lib Cell List MEM2_128X32/MEM2_128X32 ### derate_type=early, rf_type : rise fall, sigma/mean (coeff.) = 0.009 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 37 SOCV Optimization on Innovus for Beginners: RAK ## Lib Cell List MEM2_128X32/MEM2_128X32 ### derate_type=late, rf_type : rise fall, sigma/mean (coeff.) = 0.009 |Total| has_coef.|not has_coef.|Library Set: Name, derate_type ---------+----------------+-------------+-----------------------------Lib cells| 956| 2| 954| library_set: slow, early Lib cells| 956| 2| 954| library_set: slow, late Lib cells| 956| 2| 954| library_set: fast, early Lib cells| 956| 2| 954| library_set: fast, late You see that two memory cells have AOCV coefficient for SOCV analysis. innovus 18> report_ocvm -coeff -cell_delay [get_cells -hier ] The number of cell objects is 35773 # Library SetType and Name-> library_set_slow AOCV sigma/mean file= ./DATA/side_file.aocv # Library SetType and Name-> library_set_fast AOCV sigma/mean file= ./DATA/side_file.aocv |Total| has_coef.| not has_coef.| Library Set: Name, derate_type ----------+----------------+--------------+---------------------------Leaf cells|35773| 4| 35769| library_set: slow, early Leaf cells|35773| 4| 35769| library_set: slow, late Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 38 SOCV Optimization on Innovus for Beginners: RAK Leaf cells|35773| 4| 35769| library_set: fast, early Leaf cells|35773| 4| 35769| library_set: fast, late Now, you can see that four instantiated memory cells have AOCV coefficient for SOCV analysis. innovus 19> report_ocvm -cell_delay [get_cells -hier *] The number of cell objects is 35773 | Total | has_socv | not has_socv | ---------------+-----------------+--------------------+---------------+ Leaf cells | 35773| 35769| 4| So, it seems strange why the four instances do not have the has_socv property. innovus 20> report_ocvm -cell_delay [get_cells -hier *] list_not_annotated The number of cell objects is 35773 # List of Not Annotated Cells: Cell Name (libCell Name) proc0/cmem0/ddata0/u0/id0 (MEM1_256X32/MEM1_256X32) proc0/cmem0/dtags0/u0/id0 (MEM2_128X32/MEM2_128X32) proc0/cmem0/idata0/u0/id0 (MEM1_256X32/MEM1_256X32) proc0/cmem0/itags0/u0/id0 (MEM2_128X32/MEM2_128X32) | Total | has_socv | not has_socv | ---------------+-----------------+--------------------+---------------+ Leaf cells | 35773| 35769| 4| The four instances with memory cells do not have the has_socv property. Why? You ignored the following WARN message by read_aocvm: Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 39 SOCV Optimization on Innovus for Beginners: RAK WARN(read_aocvm): Please check if you set the following before loading your libraries set timing_library_infer_socv_from_aocv true set_global timing_derate_spatial_distance_unit 1nm set timing_library_scale_aocv_to_socv_to_n_sigma <value> The warning means that variables need to be set before loading libraries. Now, quit the current Innovus session and launch Innovus with ./SCRIPTS/LAB31.tcl. innovus 21> exit csh% innovus –log ./LOGS/ -file ./SCRIPTS/LAB3-1.tcl … innovus 1> report_ocvm -cell_delay [get_cells -hier *] The number of cell objects is 35773 | Total | has_socv | not has_socv | ---------------+-----------------+--------------------+---------------+ Leaf cells | 35773| 35773| 0| Now, you can see that all instantiated instances have the has_socv property. innovus 2> report_property [get_lib_cells MEM1_256X32/MEM1_256X32] property | value ------------------------------------------------area | 150000.000 early_clock_check_incremental_derate_factor | 0.000 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 40 SOCV Optimization on Innovus for Beginners: RAK early_data_check_incremental_derate_factor | 0.000 early_fall_clock_incremental_derate_factor | 0.000 early_fall_data_incremental_derate_factor | 0.000 early_rise_clock_incremental_derate_factor | 0.000 early_rise_data_incremental_derate_factor | 0.000 fall_input_switching_derate_factor | ground_pins | {...} has_ccs_noise | false has_socv has_spatial hierarchical_name | true | false | MEM1_256X32/MEM1_256X32 … You can see that the loaded library does not have CCS Noise data because the “has_ccs_noise” property is “false”. Now, check if report_timing shows delay sigma on a timing report: innovus 3> set timing_report_enable_verbose_ssta_mode true innovus 4> set_global report_timing_format { instance arc cell delay delay_mean delay_sigma user_derate total_derate arrival arrival_mean arrival_sigma required } innovus 5> report_timing -from proc0/cmem0/dtags0/u0/id0/CK2 -through proc0/c0/dcache0/i_24304/g3/A -path_type full_clock … Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 41 SOCV Optimization on Innovus for Beginners: RAK You can see 0.014 as delay sigma for the timing arc from CK2 to Q1[23] of proc0/cmem0/dtags0/u0/id0 (MEM2_128X32). innovus 6> exit Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 42 SOCV Optimization on Innovus for Beginners: RAK Module 3: How to apply timing derates for SOCV optimization Lab 3-1: Applying timing derates In this lab, you will learn how to analyze timing derates. 3-1-1: Commands and options on timing derates set_timing_derate is used to apply derates for cells and nets. So, you can practice the following commands and their options: set_timing_derate set_timing_derate –sigma set_timing_derate -multiply set_timing_derate –increment reset_timing_derate The saved db is preCTS db for CCOpt. To use SOCV-based analysis and optimization, you need to check if there is ocv_sigma information inside LVF liberty files, SOCV text files, or AOCV text files. Go to the LAB4 directory as follows: linux% cd ./RAK_SOCV/LAB4 linux% innovus –log ./LOGS/lab4.log –file ./SCRIPTS/LAB4.tcl Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 43 SOCV Optimization on Innovus for Beginners: RAK 3-1-2: Checking set_timing_derate After preCTS.enc is loaded, do “report_timing” to see the clock gating cell whose instance name is CGIC_INST. You need to focus on the cell. To do so, use “report_property [get_cells CGIC_INST]”. innovus 1> report_timing You can see that all derates are set to 1.000. innovus 2> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.000 late_clk_cell_mean_derate_factor | 1.000 late_clk_cell_sigma_derate_factor | 1.000 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 44 SOCV Optimization on Innovus for Beginners: RAK late_data_cell_derate_factor | 1.000 late_data_cell_mean_derate_factor | 1.000 late_data_cell_sigma_derate_factor | 1.000 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.000 late_fall_clk_cell_mean_derate_factor | 1.000 late_fall_clk_cell_sigma_derate_factor | 1.000 late_fall_data_cell_derate_factor | 1.000 late_fall_data_cell_mean_derate_factor | 1.000 late_fall_data_cell_sigma_derate_factor | 1.000 late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.000 late_rise_clk_cell_mean_derate_factor | 1.000 late_rise_clk_cell_sigma_derate_factor | 1.000 late_rise_data_cell_derate_factor | 1.000 late_rise_data_cell_mean_derate_factor | 1.000 late_rise_data_cell_sigma_derate_factor | 1.000 … Now, change derates on the CGIC_INST cell with the set_timing_derate command. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 45 SOCV Optimization on Innovus for Beginners: RAK innovus 3> set_timing_derate 1.1 –cell_delay –late – delay_corner slow_max innovus 4> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.100 late_clk_cell_mean_derate_factor | 1.100 late_clk_cell_sigma_derate_factor | 1.100 late_data_cell_derate_factor | 1.100 late_data_cell_mean_derate_factor | 1.100 late_data_cell_sigma_derate_factor | 1.100 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.100 late_fall_clk_cell_mean_derate_factor | 1.100 late_fall_clk_cell_sigma_derate_factor | 1.100 late_fall_data_cell_derate_factor | 1.100 late_fall_data_cell_mean_derate_factor | 1.100 late_fall_data_cell_sigma_derate_factor | 1.100 late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 46 SOCV Optimization on Innovus for Beginners: RAK late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.100 late_rise_clk_cell_mean_derate_factor | 1.100 late_rise_clk_cell_sigma_derate_factor | 1.100 late_rise_data_cell_derate_factor | 1.100 late_rise_data_cell_mean_derate_factor | 1.100 late_rise_data_cell_sigma_derate_factor | 1.100 … In the above step, the properties named late*mean_derate_factor and late *sigma_derate_factor (not *check*) are set to 1.100. Then, you can change only late*mean_derate_factor by adding the –mean option as follows: innovus 5> set_timing_derate 1.2 -cell_delay -late -mean delay_corner slow_max [get_cells CGIC_INST] innovus 6> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.100 late_clk_cell_mean_derate_factor | 1.200 late_clk_cell_sigma_derate_factor | 1.100 late_data_cell_derate_factor | 1.100 late_data_cell_mean_derate_factor | 1.200 late_data_cell_sigma_derate_factor | 1.100 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 47 SOCV Optimization on Innovus for Beginners: RAK late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.100 late_fall_clk_cell_mean_derate_factor | 1.200 late_fall_clk_cell_sigma_derate_factor | 1.100 late_fall_data_cell_derate_factor | 1.100 late_fall_data_cell_mean_derate_factor | 1.200 late_fall_data_cell_sigma_derate_factor | 1.100 late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.100 late_rise_clk_cell_mean_derate_factor | 1.200 late_rise_clk_cell_sigma_derate_factor | 1.100 late_rise_data_cell_derate_factor | 1.100 late_rise_data_cell_mean_derate_factor | 1.200 late_rise_data_cell_sigma_derate_factor | 1.100 … All properties named late_*_mean_derate_factor are changed to 1.200. All properties named late_*_sigma_derate_factor are unchanged as 1.100. Then, you will add the–multiply option with the–mean option as follows: innovus 7> set_timing_derate 1.2 –cell_delay –late –mean – multiply –delay_corner slow_max [get_cells CGIC_INST] Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 48 SOCV Optimization on Innovus for Beginners: RAK innovus 8> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.100 late_clk_cell_mean_derate_factor | 1.440 late_clk_cell_sigma_derate_factor | 1.100 late_data_cell_derate_factor | 1.100 late_data_cell_mean_derate_factor | 1.440 late_data_cell_sigma_derate_factor | 1.100 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.100 late_fall_clk_cell_mean_derate_factor | 1.440 late_fall_clk_cell_sigma_derate_factor | 1.100 late_fall_data_cell_derate_factor | 1.100 late_fall_data_cell_mean_derate_factor | 1.440 late_fall_data_cell_sigma_derate_factor | 1.100 late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.100 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 49 SOCV Optimization on Innovus for Beginners: RAK late_rise_clk_cell_mean_derate_factor | 1.440 late_rise_clk_cell_sigma_derate_factor | 1.100 late_rise_data_cell_derate_factor | 1.100 late_rise_data_cell_mean_derate_factor | 1.440 … You can see that the late_*_mean_derate_factor properties are changed to 1.440 (1.200 * 1.200). Then, you can add some value to the above *mean* properties: innovus 9> set_timing_derate 0.06 –cell_delay –late –mean –add –delay_corner slow_max [get_cells CGIC_INST] innovus 10> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.100 late_clk_cell_mean_derate_factor | 1.500 late_clk_cell_sigma_derate_factor | 1.100 late_data_cell_derate_factor | 1.100 late_data_cell_mean_derate_factor | 1.500 late_data_cell_sigma_derate_factor | 1.100 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.100 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 50 SOCV Optimization on Innovus for Beginners: RAK late_fall_clk_cell_mean_derate_factor | 1.500 late_fall_clk_cell_sigma_derate_factor | 1.100 late_fall_data_cell_derate_factor | 1.100 late_fall_data_cell_mean_derate_factor | 1.500 late_fall_data_cell_sigma_derate_factor | 1.100 late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.100 late_rise_clk_cell_mean_derate_factor | 1.500 late_rise_clk_cell_sigma_derate_factor | 1.100 late_rise_data_cell_derate_factor | 1.100 late_rise_data_cell_mean_derate_factor | 1.500 late_rise_data_cell_sigma_derate_factor | 1.100 … By applying the –add option, you can see that the *mean* properties are changed to 1.500 (1.440 + 0.06). Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 51 SOCV Optimization on Innovus for Beginners: RAK Now, you will change the *sigma* properties. Do the following with the–sigma option. innovus 11> set_timing_derate 1.3 –cell_delay –late –sigma – delay_corner slow_max [get_cells CGIC_INST] innovus 12> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.500 late_clk_cell_mean_derate_factor | 1.500 late_clk_cell_sigma_derate_factor | 1.300 late_data_cell_derate_factor | 1.500 late_data_cell_mean_derate_factor | 1.500 late_data_cell_sigma_derate_factor | 1.300 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.500 late_fall_clk_cell_mean_derate_factor | 1.500 late_fall_clk_cell_sigma_derate_factor | 1.300 late_fall_data_cell_derate_factor | 1.500 late_fall_data_cell_mean_derate_factor | 1.500 late_fall_data_cell_sigma_derate_factor | 1.300 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 52 SOCV Optimization on Innovus for Beginners: RAK late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.500 late_rise_clk_cell_mean_derate_factor | 1.500 late_rise_clk_cell_sigma_derate_factor | 1.300 late_rise_data_cell_derate_factor | 1.500 late_rise_data_cell_mean_derate_factor | 1.500 late_rise_data_cell_sigma_derate_factor | 1.300 … The *sigma* properties are changed from 1.100 to 1.300. Then, do the following: innovus 13> set_timing_derate 1.3 –cell_delay –late –sigma – multiply –delay_corner slow_max [get_cells CGIC_INST] innovus 14> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.500 late_clk_cell_mean_derate_factor | 1.500 late_clk_cell_sigma_derate_factor | 1.690 late_data_cell_derate_factor | 1.500 late_data_cell_mean_derate_factor | 1.500 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 53 SOCV Optimization on Innovus for Beginners: RAK late_data_cell_sigma_derate_factor | 1.690 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.500 late_fall_clk_cell_mean_derate_factor | 1.500 late_fall_clk_cell_sigma_derate_factor | 1.690 late_fall_data_cell_derate_factor | 1.500 late_fall_data_cell_mean_derate_factor | 1.500 late_fall_data_cell_sigma_derate_factor | 1.690 late_rise_cell_check_derate_factor | 1.000 late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.500 late_rise_clk_cell_mean_derate_factor | 1.500 late_rise_clk_cell_sigma_derate_factor | 1.690 late_rise_data_cell_derate_factor | 1.500 late_rise_data_cell_mean_derate_factor | 1.500 … All *sigma* properties are changed to 1.690 (1.300 * 1.300). Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 54 SOCV Optimization on Innovus for Beginners: RAK Then, do the following (-add option instead of –multiply): innovus 15> set_timing_derate 0.01 –cell_delay –late –sigma – add –delay_corner slow_max [get_cells CGIC_INST] innovus 16> report_property [get_cells CGIC_INST] … late_cell_check_derate_factor | 1.000 late_cell_check_mean_derate_factor | 1.000 late_cell_check_sigma_derate_factor | 1.000 late_clk_cell_derate_factor | 1.500 late_clk_cell_mean_derate_factor | 1.500 late_clk_cell_sigma_derate_factor | 1.700 late_data_cell_derate_factor | 1.500 late_data_cell_mean_derate_factor | 1.500 late_data_cell_sigma_derate_factor | 1.700 late_fall_cell_check_derate_factor | 1.000 late_fall_cell_check_mean_derate_factor | 1.000 late_fall_cell_check_sigma_derate_factor | 1.000 late_fall_clk_cell_derate_factor | 1.500 late_fall_clk_cell_mean_derate_factor | 1.500 late_fall_clk_cell_sigma_derate_factor | 1.700 late_fall_data_cell_derate_factor | 1.500 late_fall_data_cell_mean_derate_factor | 1.500 late_fall_data_cell_sigma_derate_factor | 1.700 late_rise_cell_check_derate_factor | 1.000 Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 55 SOCV Optimization on Innovus for Beginners: RAK late_rise_cell_check_mean_derate_factor | 1.000 late_rise_cell_check_sigma_derate_factor | 1.000 late_rise_clk_cell_derate_factor | 1.500 late_rise_clk_cell_mean_derate_factor | 1.500 late_rise_clk_cell_sigma_derate_factor | 1.700 late_rise_data_cell_derate_factor | 1.500 late_rise_data_cell_mean_derate_factor | 1.500 late_rise_data_cell_sigma_derate_factor | 1.700 … All *sigma* properties are changed to 1.700 (1.690 + 0.1=1.700). Now, you will check all derates with the report_timing_derate command. Do the following: innovus 17> report_timing_derate –delay_corner slow_max [get_cells CGIC_INST] You can see 1.500 as mean and 1.700 as sigma. 1.500:1.700 means that the first value is a mean and the last value is a sigma. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 56 SOCV Optimization on Innovus for Beginners: RAK Check the above with the report_timing command. innovus 18> report_timing –through CGIC_INST/* The CGIC_INST instance has 1.500:1.700. The other instance, clk_out_mux, has 1.100:1.100. Derate on the proc0/cmem0/dtags0/u0/id0 instance has 1.000:1.000, which means no derate. You can confirm through the following full_clock report: innovus 19> report_timing –through CGIC_INST/* -path_type full_clock Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 57 SOCV Optimization on Innovus for Beginners: RAK Then, do the following: innovus 20> reset_timing_derate –delay_corner slow_max [get_cells CGIC_INST] innovus 21> report_timing_derate –delay_corner slow_max [get_cells CGIC_INST] You might wonder why the derate on the CGIC_INST instance is not reset to 0. Remember that you ran the following commands at the beginning of this lab: set_timing_derate 1.1 –cell_delay –late –delay_corner slow_max. The instance-specific derate has priority over global cell derate. So, derate (1.500:1.700) on CGIC_INST instance affected the instance. After derates are reset, the global cell derate is applied to the call and all instances. Learn more at Cadence Support Portal - https://support.cadence.com © 2019 Cadence Design Systems, Inc. All rights reserved worldwide. Page 58 SOCV Optimization on Innovus for Beginners: RAK Now, you will reset all timing derates as follows: innovus 22> reset_timing_derate –delay_corner slow_max innovus 23> report_timing_derate –delay_corner slow_max [get_cells CGIC_INST] Innovus 24> report_timing_derate –delay_corner slow_max You can see that, as expected, there is no message through the above two report_timing_derate commands. Now, you will do report_timing and can find no timing derate. innovus 25> report_timing –through CGIC_INST/* 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 59