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)


Monday, November 4, 2019

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


As, I have shared last time that in this series of articles, we are going to discuss about the different command of STA Tools along with the concepts. We have used OpenSTA which is an open source tool and can be downloaded from OpenSTA. It’s commands are similar to Primetime (Industry standard tool). 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

In the previous Article, we have discussed in great detail about the report_timing -group (report_checks -path_group). How to create clock group and how tool by default reports only 1 report per path group. But now you can ask a question – what if you need all the possible reports with respect to 1 path group. We are going to discuss the same in this Article.

Below is an example to understand the reporting of the command (Same example which we have used last time).


In this circuit, depending upon the way we create path_group, we can get timing reports. But in general, there are several Timing path in any circuit. As a STA engineer, we need to analyse all of them.
Below commands and reporting structure can remind you by default options.

Case(1):

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


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


Same reporting, I can achieve by adding one more switch with value 1 (i.e. -group_count 1)

Case(1):

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


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

report_checks -format short -path_group clk -group_count 1
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

If you have noticed the difference, we have used one more argument / switch group_count.

group_count The number of paths to report in each path group

But it’s not that simple. Let’s understand this command more in detail using different test cases and different scenerios.
In above example, only 1 path is reported with respect to clock group clk? Why ONE, because I have given group_count == 1. What if I give group_count = 2? let’s check

Case(1):

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


report_checks -format summary -path_group clk -group_count 2
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.43
in1 (input)                r1/D (DFF_X1)           9.85

we obtain 2 worst reports from path group clk

Similarly, we can check 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.43
in1 (input)                r1/D (DFF_X1)           9.85
in2 (input)                r2/D (DFF_X1)           9.85

What if, I give group_count = 4? I am sure, you will say 4 paths should be reported. Let’s check

report_checks -format summary -path_group clk -group_count 4
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.43
in1 (input)                r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85

Here we see only 3 paths.... Why??

Let’s check for group_count = 5

report_checks -format summary -path_group clk -group_count 5
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------

r2/Q (DFF_X1)           r3/D (DFF_X1)           9.43
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)          9.85

Here also only three paths. Why is this thing happening.

Let’s check for group_count = 6

report_checks -format summary -path_group clk -group_count 6
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.43
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85
Here also the same,

I have summarized the result in the table

group_count No. Of Reports
1 1
2 2
3 3
4 3
5 3
6 3
7 3
8 3
9 3
10 3

Now the question is although we have increased group_count but number of paths reported is three only? As per the definition, it should also increase. I am leaving his question to you right now and let’s see if you can think/guess something about this. Else we obviously discuss it later.

Let’s try to understand it by creating 2 different clock group and play with value of group_count.


Consider case(2) to understand group_count clearly

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


report_checks -format summary -path_group {clk clkc} -group_count 1
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} -group_count 1
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

Since group count is one therefore one path from each path group is reported i.e. one path from clock group clk and other from clock group clkc.

Let’s make group_count 2 and observe the changes in report

report_checks -format summary -path_group {clk clkc} -group_count 2
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.43
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85

report_checks -format short -path_group {clk clkc} -group_count 2
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: in1 (input port clocked by clk)
Endpoint: r1 (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

In this case we observe thee paths, two from the clock group clk and one from the clock group clkc
You must be thinking why only one path is reported from clock group clkc. Just think over it

Now, I’m increasing the group_count

report_checks -format summary -path_group {clk clkc} -group_count 3
Startpoint              Endpoint           Slack
--------------------------------------------------------------------------------
r2/Q (DFF_X1)           r3/D (DFF_X1)           9.43
in1 (input)                 r1/D (DFF_X1)           9.85
in2 (input)                 r2/D (DFF_X1)           9.85

report_checks -format short -path_group {clk clkc} -group_count 3
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: in1 (input port clocked by clk)
Endpoint: r1 (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

We should get here 3 paths from clock group clk and three path from clock group clkc but overall we are getting only three paths
why?? Still not able to get / guess answer? 😊

Again, I am trying summarize my analysis

I have summarized the result in the table

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


Let’s discuss another circuit and see if you can figure out but that we will discuss in part 2 of this article. :)


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


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

Wednesday, October 16, 2019

10 Employee Awards To Boost Morale At The Workplace

Employees function as the backbone of any company and making sure that employee satisfaction is at its highest is incredibly important for the smooth functioning of a corporation. Employees who come in day in and day out are generally dedicated to improving the manner in which the company works. They are one of the main reasons why the company has been able to function as intended. For employers, making sure that you are giving your employees all that they need to perform their jobs well is incredibly important. 
One way of making your employees feel appreciated in the workplace is to hand out awards. When running a company, you always want your employees to feel like they have a special place at the company. This encourages individuals to do their work better. While this is important for companies, it is essential for employers to take a few additional steps that their employees will respond well to. 
Hosting an awards ceremony and honoring your employees is a brilliant idea for improving employee engagement. It is incredibly important for brands to understand the positive impact that these kinds of activities can have, which is why it is important for companies to implement this on a regular basis. If you are thinking of handing out employee awards or custom trophies at a company, there are a number of routes that you can take in this regard. 
No matter what kind of company you operate as, be it an electronics company or even a paper manufacturing unit, partaking in employee awards ceremonies can help boost morale at the workplace, and can improve the employee satisfaction at a workplace. Here are some of the employee award ideas you can use when trying to honor the people working at the company:
1. Customer Service Performance Award
If you have any kind of customer service department at your company, offering an award for customer service performances can help boost morale, and can make customer service representatives feel more appreciated. 
2. Chief Happiness Director Award
There are always employees at the workplace that bring a certain amount of joy into every room that they enter, and honoring these employees is incredibly essential.
3. First Class Service Award
For companies operating within the service category, employees who have had the highest rating in terms of their services can be given an award for their good work.
4. Hall of Fame Award
The Hall of Fame Award is one that can be given to employees who have been working at a company for a long period of time and who have made significant contributions.
5. Top Performer Award
The Top Performer Award should be given to individuals who have made a good impression on the company, as well as the clients, and who have had a good reputation for the work that they do.
6. An Employee of the Month Award
An Employee of the Month Award is one of the most commonly found awards and is great for honoring employees on a regular basis. The employee of the month award is generally given to individuals who have had an outstanding performance over the past month of work.
7. Leaderboard Award
For companies that have operations that can integrate a scoring system, having a Leaderboard Award can motivate employees to work harder to rise up the ranks and earn their spot, thereby helping the company operate in a more efficient manner.
8. Retirement Award
Honoring people who are retiring from the company is important because of the contribution they have made. It is important to improve the image of a company.
9. Team Leader Award
The Team Leader Award is mainly for those who have worked in groups and who have exhibited strong leadership qualities. This award can also encourage others to step up and work as leaders in a group situation.
10. Top Collaborator Award
Top Collaborator Award can be given to those who work well as a team, and who have had a significant impact on the people that they work with and the projects that they work on. This can help encourage individuals to work better with their colleagues and can give them the impetus that they need to work hard in their positions.

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)

Friday, May 24, 2019

Unix For VLSI Industry - Part 1


Unix is universal and lot of Industry is using this. But still in our education system, it's not part of curriculum. And that's the reason lot of Students faces issues during Interview or after joining companies. Today, I am going to capture few of the commands, I have used in my career and I wish it will help everyone. From Interview point of view, if you will practice to all these - I am sure you will be at good position.

UNIX Commands

  • Few commands- which are not that important but still good to know
    • date
    • whoami: Who Am I - Tells you your user information.
    • clear
    • ps
    • kill
    • basename / dirname : extract file / directory name from full path
    • touch: change file timestamp
  • Commonly used commands
    • echo : print command
    • env:
    • df
    • head / tail : returns first / last lines of a file
    • more
    • wc : word count on files
  • Must known command :)
    • sort : used to sort files in lexicographic order
    • cat: concatenate files and print
    • ls (it's options)
    • cd
    • mkdir
    • rm
    • cp
    • chmod
    • mv
    • pwd
    • grep (it's options): find regular expressions in files
    • vi
    • awk
    • xterm
    • man
    • find: find files by criteria
    • diff: find differences between files
    • tkdiff
    • which

Redirection and pipes: Apart of this there are few processes which we uses very commonly to handle the output of a particular command.
  • prog redirection file
    • < : redirect stdin
    • > : redirect stdout
    • >> : append stdout
    • >& : redirect stdout and stderr
    • >>& : append stdout and stderr
  • prog1 pipe prog2
    • | : redirect stdout of prog1 to stdin of prog2
    • |& : same, with stdout and stderr

Unix Concepts: Understanding of below concepts are necessary.
  • Relative Path and Absolute Path
  • Alias Concepts
  • Tool Binary concepts : It's similar to exe in windows

VI Editor: Few things in the VI Editor (it's very powerful editor in Unix environment).
  • How to Open a file
  • How to Close a file
  • How to Save file
  • Write-append
  • Set number
  • Set nonumber
  • Search – reverse and forward
  • Search and replace – prefix, suffix
  • Delete character
  • Delete line
  • Delete para
  • Jump to any line number
  • Jump to Last line
  • Figure out total line and name of file


In next article, I will try to show you the use model of few of the important commands. Also, I will try to update this list - If, I can figure out any command I have missed here.

Must Read Article

Related Posts Plugin for WordPress, Blogger...

Follow by Email