Tuesday, September 24, 2019

STA Tool Command - report_timing -group (OpenSTA-path_group)


We are going to start a new series where we are going to discuss about the different command of STA Tools along with the concepts. I have received a lot of requests about the tool understanding and their features. After discussing with them - I have figured out - problem is not HandsOn but it's all about mapping of different concepts (fundamental & Basics) with the Tool commands. So, in this series - we will make sure that every command - every option we use in detail and help you to visualize that with the help of small test cases.
Using any Industry standard Tool like Primetime or Tempus and doing all the analysis on that - It may be easy for that but those who don't have access these articles again become as Theoretical article. I would like everyone to Try at home. So, My team is using OpenSource Tool which is similar to Primetime upto a certain limit. We will share command mapping table between OpenSource tool Vs Industry standard tool (which can help you in case you have access of Industry Standard Tool). In general, we will use Opensource tool's command and reporting structure in rest of the article.

We have created / generated our own Test cases and using library data available along with OpenSource Tools. So, dnt worry - You can also Download this and try at your place. :)

OpenSTA (One of the OpenSource tool) can be downloaded from OpenSTA, have commands which works similarly as the commands of Primetime. By using OpenSTA you can understand the working of tool properly. Here, I have made some of the comparison between the commands of Primetime & OpenSTA (which I am going to use in another few articles). The command which I have selected is report_timing (in Primetime) & report_checks (in OpenSTA). The report_checks / report_timing command reports paths in the design

Primetime OpenSTA
report_timing [-group group_name][-max_paths count][-nworst paths_per_endpoint] report_checks [-path_group group_names][-group_count path_count][-endpoint_count endpoint_path_count]
group group_name:Specifies the path groups from which timing paths are selected for reporting based on other specified options for reports. path_group: List of path group names to report. All path groups are reported if this option is not specified
max_paths count:Specifies the number of paths to be reported per path group group_count: The number of paths to report in each path group
nworst paths_per_endpoint: Specifies the number of paths to be reported per endpoint per path group endpoint_count: The number of paths to report for each endpoint

Below is an example to understand the reporting of the command


In this circuit, we have 3 flipflops & the clock clk1, clk2, clk3 of these flops are related to one single clock clk. We are going to do the grouping of these clocks using the following command.

create_clock -name clk -period 10 {clk1 clk2 clk3}

Here, 10 is the period for each clock and clk is the name of the clock group. To understand why we are doing the grouping the clocks and what's significant of that, let's understand the use model of that.

path_group is one of the option which help the tool/categorize/filter different reports based on clock group. To understand argument/option path_group, below are few reports.

Case(1):

create_clock -name clk -period 10 {clk1 clk2 clk3}


report_checks -format summary -path_group clk
Startpoint           Endpoint        Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)        r3/D (DFF_X1)       9.43

report_checks -format short -path_group clk
Startpoint: r2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: r3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

Note:
  • -format summary shows only the summary of the path including startpoint, endpoint and the slack.
  • -format_short shows the start point, end point, path group and path type.

Only one path is reported here. Can you guess why?
It is because this is the worst path of clock group clk and if you notice in the command, path group mention is clk. That’s why worst path of clock group clk is reported.

Note: By default tool will report the worst path.

If I create two path group then what will happen?
To understand this let’s create two clock group, one with name clk and other with clkc

Case(2)::

create_clock -name clk -period 10 {clk1 clk3}
create_clock -name clkc -period 10 {clk2}
set_input_delay -clock clk 0 {in1 in2}


report_checks -format summary -path_group {clk clkc}

Startpoint        Endpoint        Slack
----------------------------------------------------------------------------
r2/Q (DFF_X1)        r3/D (DFF_X1)        9.43
in2 (input)        r2/D (DFF_X1)       9.85

report_checks -format short -path_group {clk clkc}
Startpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Endpoint: r3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

Startpoint: in2 (input port clocked by clk)
Endpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Path Group: clkc
Path Type: max

So, we can see here two path are reported, the question is which are they?
Since we have made two clock groups that’s why one worst path from each clock group is reported

To understand the concept of path_group let’s take one more example


Case(1):

create_clock -name clk -period 10 {clk1 clk2 clk3 clk4}
set_input_delay -clock clk 0 {in1 in2 in3}

report_checks -format summary -path_group clk

Startpoint        Endpoint        Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)        r3/D (DFF_X1)        9.22

report_checks -format short -path_group clk
Startpoint: r2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: r3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

We can see one path (worst) in reported of path group clk since we create a single clock group of name clk.

Case(2):

create_clock -name clk -period 10 {clk1 clk3}
create_clock -name clkc -period 10 {clk2 clk4}
set_input_delay -clock clk 0 {in1 in2 in3}


report_checks -format summary -path_group {clk clkc}

Startpoint        Endpoint        Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)        r3/D (DFF_X1)        9.22
r2/Q (DFF_X1)        r4/D (DFF_X1)        9.24

report_checks -format short -path_group {clk clkc}
Startpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Endpoint: r4 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

Startpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Endpoint: r4 (rising edge-triggered flip-flop clocked by clkc)
Path Group: clkc
Path Type: max

Here I have made two clock group, one is clk which is related to clock clk1 & clk3, the other is clkc which is related to clock clk2 & clk4. So one path (worst) from both the clock group is reported. Now if I create 3 clock groups then what will happen-

Case(3)::

create_clock -name clk -period 10 {clk1 clk3}
create_clock -name clkc -period 10 {clk2}
create_clock -name clck -period 10 {clk4}
set_input_delay -clock clk 0 {in1 in2 in3}


report_checks -format summary -path_group {clk clkc clck}

Startpoint        Endpoint        Slack
--------------------------------------------------------------------------------

r2/Q (DFF_X1)        r4/D (DFF_X1)        9.24
r2/Q (DFF_X1)        r3/D (DFF_X1)        9.22
in2 (input)        r2/D (DFF_X1)        9.85

report_checks -format short -path_group {clk clkc clck}
Startpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Endpoint: r4 (rising edge-triggered flip-flop clocked by clck)
Path Group: clck
Path Type: max

Startpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Endpoint: r3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

Startpoint: in2 (input port clocked by clk)
Endpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Path Group: clkc
Path Type: max

I am sure now to understand how three reports are generated. One with respect to each clock group.

Let’s try one more case-
report_checks -format short -path_group {clkc clck}
Startpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Endpoint: r4 (rising edge-triggered flip-flop clocked by clck)
Path Group: clck
Path Type: max

Startpoint: in2 (input port clocked by clk)
Endpoint: r2 (rising edge-triggered flip-flop clocked by clkc)
Path Group: clkc
Path Type: max

You should know the reason for this reporting.

In the next article we will discuss about more interesting command option (OpenSTA -group_count | Primetime -max_paths) of report_checks | report_timing.

-By Surabhi Singh
(Btech-EC:- 2019 Passout)
(ABES Engineering College)


-Supervised By Puneet Mittal
(Founder & Director)
(VLSI Expert Private Limited)

1 comment:

  1. In case(2) ,where 2 path groups clk and clkc are created using four clocks clk1,clk2,clk3,clk4 in second command there is a error (i.e -format short) both endpoints are written as r4 but one of it is r3 .Please change the correction

    ReplyDelete