Académique Documents
Professionnel Documents
Culture Documents
Transistor level
Gate level
Register transfer level (RTL)
In many companies RTL simulations is the basic requirement to signoff design cycle, but
lately there is an increasing trend in the industry [1] to run gate level simulations (GLS)
before going into the last stage of chip manufacturing. Improvements in static verification
tools like Static timing analysis (STA) and Equivalence Checking (EC) have leveraged GLS
to some extent but so far none of the tools have been able to completely remove it. GLS still
remains a significant step of the verification cycle footprint. This paper focuses mainly on
the steps to run GLS from verification perspective and the challenges faced while running it.
Firstly, let us look at the reasons why GLS is still used in the industry despite all the
challenges associated with its execution.
Motivation for running gate level simulations
The main reasons for running GLS are as follows:
1. To verify the power up and reset operation of the design and also to check that the
design does not have any unintentional dependencies on initial conditions.
2. To give confidence in verification of low power structures, absent in RTL and added
during synthesis.
3. It is a probable method to catch multicycle paths if tests exercising them are
available.
4. Power estimation is done on netlist for the power numbers.
5. To verify DFT structures absent in RTL and added during or after synthesis. Scan
chains are generally inserted after the gate level netlist has been created. Hence,
gate level simulations are often used to determine whether scan chains are correct.
GLS is also required to simulate ATPG patterns.
6. Tester patterns (patterns to screen parts for functional or structural defects on tester)
simulations are done on gate level netlist.
7. To help reveal glitches on edge sensitive signals due to combination logic. Using
both worst and best-case timing may be necessary.
A list of all the synchronizer flops is generated using CDC tools. Also, other known
asynchronous paths where timing checks needs to be turned off are analyzed and complete
list of such flops is prepared which also includes reset synchronizers. The timing checks are
turned off on all such flops to avoid any redundant debugging, otherwise they will cause x
corruption in GLS. This work should be ideally done before the SDF arrives .It may happen
that the name of the synchronizers in RTL and the netlist are different. All such flops should
be updated as per netlist .Also, the correct standard cell libraries, correct models of analog
blocks, etc. need to be picked for GLS.
4. Initialization of non resettable flops in the design
One of the main challenges in GLS is the x propagation debug. X corruption may be
caused by a number of reasons such as timing violations, uninitialized memory and non
resettable flops . There are uninitialized flops in design which by architecture are
guaranteed to not cause any problems (if they settle to any value at start). Thus, there is a
need to find out all such flops in the design (which are reviewed with designers) and
initialize them to some random value (either 0 or 1) so as to mimic silicon.
5. Unit delay GLS for testbench cleanup
This step is not compulsory but is generally very fruitful if employed in the GLS execution.
The setup is done for unit delay GLS (no SDF) and the testcases that are planned to be run
on gate level are run with this setup to clean the testbench. This is done because the unit
delay simulations are relatively faster (than those with SDF) and all the testbench/testcase
related issues can be resolved here (for example - change probed logic hierarchy from rtl to
gate, wrong flow of testcase, use of uninitialized variables in the testcases that can cause
corruption when read via core, etc). Running the unit delay GLS is recommended because
one can catch most of the testbench/testcase issues before the arrival of SDF. After the
SDF arrives, focus should be more on finding the real design/timing issues, so we need to
make sure that the time does not get wasted in debugging the testcase related issues at
that time.
NOTES:
The notifier is the value in the specify block that is triggered to possibly cause X output from library
cells (gates). This triggering occurs when you have a timing violation. So when we want that the
particular flop should not drive X on the timing violation we generally force its corresponding notifier
to '1' or '0' so that it wont propagate X
What
is
IR
drop
calculation?
Why
is
it
done?
A: To calculate if the device is safe against the maximum activity of the design.
2) Does it really matter if the vcd is of timing simulations or no timing simulations? Because the purpose of the
vcd
is
to
only
capture
the
activity
triggered
by
the
test.
Which
test
is
best
suited
for
vcd
cut
for
IR
drop?
Inputs required:
1) netlist : A backend netlist.
2) sdf: A file which contains all the net delays in the design.An sdf has 3 kinds of delay for each net as
<min:typ:max> (not sure of the order). The choice of delay is chosen by the parameter MTM_CONTROL in
ncsim. The relationship is as follows:
Condition
MTM_CONTROL
Best
Minimum
Worst
Maximum
Typical
Typical
3) tcheck file : A file containing a list of all the first flops of the synchronizes in the design where a timing
violation is guaranteed and thus taken cared of by the design such as placing synchronizers.Therefore we dont
check
timing
violations
in
this
path.
4) no reset flop list : To deposit either 1 or 0 to outputs of these flops to avoid X propagation in the design
during simulation. Since we get only the list of flops from synthesis guys, we assume the flops have both Q
Take Care
1. Enable timing checks during elaboration. In ncsim, its done by not including the switch
-NoTimingChecks in ncelab.
2. Compile all the netlists and library RTL without the -functional switch defined otherwise no-timing
code will be compiled.
Setup Issues
There could be several setup issues encountered while setting up a gate level simulation environment.
1) Setup/Hold violations : There could be several setup/hold violations during the simulation. Please go ahead
and debug the first violation. It will give an idea if the environment is properly set up. Please check if :
Your sdf is properly annotated and there are no errors/warnings which are
terminating the annotation process prematurely. This could lead to wrong delays in
the design and thus wrong timing violations during simulations.
The Pins that are driven directly by the testbench might cause a timing violation
on the first encountered flop in the design as your testbench might be using the
same clock to generate the data which is used to capture the data in the design. In
this case since the testbench in pure RTL. Its delay is zero and thus first flop might
face a unwanted timing violations sue to clock skew and data delay. Such violations
are wrong and can be avoided by delaying the input w.r.t the clock.
Any timing violation that occurs before the design comes out of reset should be
safely ignored.
2) X propagation : If you see no timing violations and still see an X propagation in the design, Please check
if:
All your non resettable flops are properly initialized to either 1b0 and 1b1. The
list of non resettable flops is complete.