Uploaded by 陈梦成Terry CHEN

SOCV Optimization on Innovus for Beginners

advertisement
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
Download