Translate page

Thursday, November 7, 2019

STA Tool Command - report_timing -max_paths_count (OpenSTA -group_count) : Part 2


In the previous part (STA Tool Command - report_timing -max_paths_count (OpenSTA -group_count) : Part 1) we have discussed about the switch -group_count for 1 circuit. As per our initial understanding -group_count is correspond to "The number of paths to report in each path group". But when we have checked practically, we have noticed different behavior (Summarized in the below table).


Clock Group group_count Total No. Of Reports
1 1 1
1 2 2
1 3 3
1 4 3
1 5 3
1 ... 3
2 1 2
2 2 3
2 3 3
2 4 3
2 5 3
2 ... 3

I have asked all of you to guess the reason of that but I am not sure how many of you were able to do it. :) Maybe, some of you have created a relationship between Total no of Reports Vs Total Number of Flipflop present in the circuit. :) Let's see if it's true for another circuit also. :)



CASE1:
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 -group_count 1
Startpoint           Endpoint        Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1) r3/D (DFF_X1) 9.22
I have made only one clock group therefore when group_count is 1 only one path is reported. Lets increase group_count and see what will happen.

report_checks -format summary -path_group clk -group_count 2
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
r2/Q (DFF_X1)           r4/D (DFF_X1)           9.24
Here group_count is 2 that’s why two paths are reported.

For group_count = 3
report_checks -format summary -path_group clk -group_count 3
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
r2/Q (DFF_X1)           r4/ (DFF_X1)           9.24
in1 (input)                 r1/D (DFF_X1)           9.85
Here group_count is 3 that’s why three paths are reported.

report_checks -format summary -path_group clk -group_count 4
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
r2/Q (DFF_X1)           r4/D (DFF_X1)           9.24
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85
Four reports since group_count is 4

report_checks -format summary -path_group clk -group_count 5
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
r2/Q (DFF_X1)           r4/D (DFF_X1)           9.24
in1 (input)                r1/D (DFF_X1)           9.85
in2 (input)                r2/D (DFF_X1)           9.85
The question arises here, that group_count is 5 then why only four paths are reported?

Now, try to compare previous example (in the previous part of this article) and this example. In previous example, with 1 clock group, maximum paths were reported 3 even though we have increases group_count more then 3. In this example, maximum paths reported are 4 even if we increase group_count more then 4.

Hint is – check number of Flipflop in both circuit and now, I am sure that you can say that it's related to total number of Flipflop. :) But remember - this is just HINT - Answer is something else.

CASE2:
create_clock -name ck1 -period 10 {clk1 clk2}
create_clock -name ck2 -period 10 {clk3 clk4}
set_input_delay -clock ck1 0 {in1 in2}
set_input_delay -clock ck2 0 {in3}


report_checks -format summary -path_group {ck1 ck2} -group_count 1
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
in1 (input)                 r1/D (DFF_X1)           9.85
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
report_checks -format short -path_group {ck1 ck2} -group_count 1
Startpoint: in1 (input port clocked by ck1)
Endpoint: r1 (rising edge-triggered flip-flop clocked by ck1)
Path Group: ck1
Path Type: max

Startpoint: r2 (rising edge-triggered flip-flop clocked by ck1)
Endpoint: r3 (rising edge-triggered flip-flop clocked by ck2)
Path Group: ck2
Path Type: max
Here I have made two clock groups that’s why one path is reported from each clock group when group_count is 1

For group count = 2
report_checks -format summary -path_group {ck1 ck2} -group_count 2
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85
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 {ck1 ck2} -group_count 2
Startpoint: in1 (input port clocked by ck1)
Endpoint: r1 (rising edge-triggered flip-flop clocked by ck1)
Path Group: ck1
Path Type: max

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

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

Startpoint: r2 (rising edge-triggered flip-flop clocked by ck1)
Endpoint: r4 (rising edge-triggered flip-flop clocked by ck2)
Path Group: ck2
Path Type: max
group_count is 2 here, therefore two paths from each clock is reported.

When group_count = 3
report_checks -format summary -path_group {ck1 ck2} -group_count 3
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
r2/Q (DFF_X1)           r4/D (DFF_X1)           9.24
Now again something happens๐Ÿ˜Š. Here group_count is 3, but path reported are only four why?

Now, lets try to understand this with the help of grouping of clock in different way.
In the last case, clk1 - clk2 & clk3 - clk4 were grouped together but in below case clk1 – clk3 & clk2 - clk4 group together. And see the difference and I am sure you can solve this puzzle.

CASE3:
create_clock -name ck1 -period 10 {clk1 clk3}
create_clock -name ck2 -period 10 {clk2 clk4}
set_input_delay -clock ck1 0 {in1 in3}
set_input_delay -clock ck2 0 {in2}


report_checks -format summary -path_group {ck1 ck2} -group_count 1
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 {ck1 ck2} -group_count 1
Startpoint: r2 (rising edge-triggered flip-flop clocked by ck2)
Endpoint: r3 (rising edge-triggered flip-flop clocked by ck1)
Path Group: ck1
Path Type: max

Startpoint: r2 (rising edge-triggered flip-flop clocked by ck2)
Endpoint: r4 (rising edge-triggered flip-flop clocked by ck2)
Path Group: ck2
Path Type: max
In case 3 also I have made two clock groups but the clocks grouped together are different. The results which you will observe here are same with respect to number of reports.

Now, lets see what will happen if we will increase group_count.

report_checks -format summary -path_group {ck1 ck2} -group_count 2
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)          r3/D (DFF_X1)           9.22
in1 (input)                 r1/D (DFF_X1)           9.85
r2/Q (DFF_X1)          r4/D (DFF_X1)           9.24
in2 (input)                 r2/D (DFF_X1)           9.85
report_checks -format short -path_group {ck1 ck2} -group_count 2
Startpoint: r2 (rising edge-triggered flip-flop clocked by ck2)
Endpoint: r3 (rising edge-triggered flip-flop clocked by ck1)
Path Group: ck1
Path Type: max

Startpoint: in1 (input port clocked by ck1)
Endpoint: r1 (rising edge-triggered flip-flop clocked by ck1)
Path Group: ck1
Path Type: max

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

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

For group_count = 3

report_checks -format summary -path_group {ck1 ck2} -group_count 3
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)          r3/D (DFF_X1)          9.22
in1 (input)                 r1/D (DFF_X1)           9.85
r2/Q (DFF_X1)           r4/D (DFF_X1)           9.24
in2 (input)                 r2/D (DFF_X1)           9.85

Path reported is four, why? Here, I want to give you one more hint – Check number of flops associated per clock group. ๐Ÿ˜Š

Below scenario, can help you to understand more clearly. Here I have created 4 clock groups

CASE4:
create_clock -name ck1 -period 10 {clk1}
create_clock -name ck2 -period 10 {clk2}
create_clock -name ck3 -period 10 {clk3}
create_clock -name ck4 -period 10 {clk4}
set_input_delay -clock ck1 0 {in1}
set_input_delay -clock ck2 0 {in2}
set_input_delay -clock ck3 0 {in3}


report_checks -format summary -path_group {ck1 ck2 ck3 ck4} -group_count 1
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85
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 {ck1 ck2 ck3 ck4} -group_count 1
Startpoint: in1 (input port clocked by ck1)
Endpoint: r1 (rising edge-triggered flip-flop clocked by ck1)
Path Group: ck1
Path Type: max

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

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

Startpoint: r2 (rising edge-triggered flip-flop clocked by ck2)
Endpoint: r4 (rising edge-triggered flip-flop clocked by ck4)
Path Group: ck4
Path Type: max
Here 4 paths are reported since we have 4 clock groups so one path from each clock group is reported when group_count is 1.

For group_count = 2
report_checks -format summary -path_group {ck1 ck2 ck3 ck4} -group_count 2
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.22
r2/Q (DFF_X1)           r4/D (DFF_X1)           9.24

You are expecting here 2 paths from each clock group that is total 8 paths, but only 4 paths are present in the reporting. WHY? I am sure by now, it’s easy for you to understand the reason of that. Like I gave hint last time – Flops per clock group. ๐Ÿ˜Š
Now, do you think Flops per clock group is the answer or there is something else behind this. Or may be any other technical term or terminology. That you can find out in our next article, where we are going to discuss one more option and that’s going to help you to understand this very well.


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


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


No comments:

Post a Comment

Must Read Article

Related Posts Plugin for WordPress, Blogger...