Interesting and demanding!!!
Once you have your design synthesized or placed/routed or clock tree synthesized, at every step, the one thing which you want to know quick and accurate is QOR of your design. This EDA command gives an initial performance picture of your design. From a very high level point of view, the below information should be good enough as QOR of your design
Where WNS/FEP Setup/Hold is “Worst Negative Slack/Failing Endpoints” setup and hold timing for reg2reg path, and WNS/FEP RAT is the output timing (RAT is required arrival time – a term used to denote output slack in Opentimer)
Now getting this information from output of Opentimer or from any EDA tool is not tough at all. By now, you must know, any EDA tool engine is written in C++ or higher language and interface commands (like read_sdc, read_lib or above reporting QOR) are written in TCL. The engine dumps output in a certain format. It’s the job of EDA commands to represent that output to user in defined standard format, understandable to user.
Opentimer output looks something like below:
Getting basic runtime from STA engine is not more than using a ‘time’ TCL command for the Opentimer. In this way, you execute Opentimer using putting a TCL ‘time’ keyword and you can get runtime to run entire design or any part of it (like runtime of reporting setup/hold slacks). A basic TCL code is shown below: TCL gives you in microseconds. You need to convert it in seconds
Worst Negative Slack (WNS):
Any STA tool engine has got its own set of keywords, like RAT for output timing in Opentimer and there could be 1000’s of those. In order to get worst of all, just match RAT pattern once in a while loop and break the loop once you get the pattern. Since output of Opentimer is in picoseconds (ps) and most preferred time format for output slack is nanoseconds (ns), then it just becomes a matter of format conversion, as shown in below image: This can be extended to Setup/Hold keywords
Failing Endpoints (FEP):
Finally you need to count the number of failing endpoints, which is now simple as it’s a matter of finding the pattern ‘RAT’ in the Opentimer output file, incrementing a counter once you match the pattern RAT, and continuing reading the output file to find the next line matching ‘RAT’. The patterns can vary from engine to engine. Here’s the snippet of the code:
If you closely observe the above images, these are some basic TCL snippets, but plays a huge role in closing on gaps between a tool user (customers who use the tool) and product engineer/manager (one who manages the tool TCL interface)
So next time, you need an EDA command, go ahead and build it…