Effective RTL coding rules to avoid Simulation Shoot-thru

advertisement
Effective RTL coding rules to avoid
Simulation Shoot-thru
Udit Kumar1, Bhanu Prakash1, Olivier Florent1,
Paras Mal Jain2, Anshu Malani2, Shaker Sarwary2
1STMicroelectronics
2Atrenta
Inc.
Name, Affiliation and email
Author Name
Affiliation
Email
Udit Kumar
STMicroelectronics
udit-hed.kumar@st.com
Bhanu Prakash
STMicroelectronics
bhanu.prakash@st.com
Olivier Florent
STMicroelectronics
olivier.florent@st.com
Paras Mal Jain
Atrenta Inc.
paras@atrenta.com
Anshu Malani
Atrenta Inc.
anshum@atrenta.com
Shaker Sarwary
Atrenta Inc.
shaker@atrenta.com
Abstract
RTL simulations do not consider timing in all aspects and therefore, the results
produced by simulation may differ from silicon behavior. Simulation can miss
design bugs due to limitations in simulator. These differences are due to
incorrect estimation of propagation time between clock and data paths causing
data to propagate earlier than in silicon. This problem is known as shoot-thru.
We faced a silicon failure which prompted us to understand how shoot-thru
situations occur during simulation, identify these situations with higher accuracy
of analysis and fix them with minimal impact using simple RTL coding rules.
We teamed up with Atrenta to automate efficiently the check of those coding
rules.
What is Shoot-thru?
4
 When any signal jumps over an extra register within
one clock cycle.

E.g. Input “din” crosses 2 register within one clock cycle.
dint
din
D
D
cint
clk
dout
In silicon => gate delay
In simulator => events
Shoot-thru:
(events in data path ) <= (events in clock path)
How Simulation Shoot-thru occurs?
5
din
dint
D
dout
D
Reason : Extra Delta
delay in Clock Path
clk
cint
clk
0>1
dint
0>1
cint
0>1
dout 0>1
clk
cint
din
dint
dout
Consequence : “dout”
same as “din” within
single clock
Will Verilog coding rules help?
6
 blocking assignment in
combination blocks and
// Input data sampling
always @ (posedge clk, negedge rst_n) begin
if (rst_n==1’b0)
dint <= din;
else
dint <= din;
end
 non-blocking in sequential

Not, always safe….
// Capture data on divided clock
din
clk
D
dint
cdiv
dout
D
cint
Extra Delta-delay in Clock Path
always @ (posedge cint, negedge rst_n) begin
if (rst_n==1’b0)
dout <= 1’b0;
else
dout <= dint;
end
// Sequentioal clock generation
always @ (posedge clk, negedge rst_n) begin
if (rst_n==1’b0)
cint <= 1’b0;
else
cint <= !cint;
end
Non-blocking assignments consume delta delay
Case 1: Verification can miss Shoot-thru
 User specification was to transfer “din” to “dout” in 1 cycle
 Extra flop was a mistake but not caught by RTL verification.
If Simulation has shoot-thru => “din” will be captured at “dout” in 1 cycle
=> All tests pass as per user specification
din
dout
dint
D
D
cint
clk
Silicon fails as “din” will be captured at “dout” in 2 cycles
=> one cycle extra delay vs. Specification
 Existence of One extra flop causes silicon failure.
7
Case 2: Verification can miss Shoot-thru
8
 User specification was to transfer “din” to “dout” in 2 cycle
 However, shoot-thru may cause simulation failure
 User fixes it by adding an extra flop
dout
din
D
D
Simulation Fails
clk
din
dout
D
D
D New
Flop
clk
din
clk
Simulation Passes
after rtl changes
dout
D
D
D
Silicon Fails
Potential Gap in design flow
Functional Specification
HDL
Functional Design
Equivalence
check
Gates
Silicon
Pros: Verification at gate level
represents Silicon.
Cons: Huge data base and run
time.
Verification
Synthesis
N/l Simulation
Physical design
Verification
Gate Level
Simulation
can detect
shoot-thru
So, How to detect shoot-thru issues?
 By using an improved simulator?

NO, as root cause of problem is that RTL Simulation has no
notion of timing delay & Hold checks.
 By doing Gate level simulation?

Yes but it is very costly.
 By using robust RTL coding rules?

Yes! this is easy and efficient (see subsequent slides)
10
Rule 1 - Force scheduling of data
 Force physical time delay in Sequential data assignments
 Signal is delayed in ‘physical time’, instead of ‘delta’ time.
Verilog
VHDL
dint <= #1 din ;
dint<= din after 1 ns;
dint
din
clk
D
dout
D
cint
This adds an extra delay in data path
11
Rule 2 - No ‘physical delay’ in clock path
12
after 1ns
din
dint
D
clk
dout
D
 Delay on clock paths
competes with delay on
Data path
cint
after 1ns
 Clock vs Data scheduling
still un-reliable
No unwanted delay on clock path
Rule1 + Rule2 ensures no risk of shoot-thru
i.e data is updated after clock
Automation with SpyGlass RTL checker
13
Rule 1 – Reports missing needed
delay in data path
dout
din
D
D
If delta delay is different between
launch and capture flop, add delay
on launch flop
clk
cint
din
clk
dint
dout
D
D
cint
Rule 2 – Reports extra delay
(Physical) present in clock path
Easy to identify shoot-thru prone RTL
Checker catches Real Silicon Issues
 Missing delay was causing silicon failure
Missing delay at source
dout
din
tck
D
D
logic
Buffer, Clock gating etc.
 Unintentional delay in clock path found on another chip

User specified physical delay on source flop - Still problem
occurred due to physical delay specified on clock path
din
tck
D
D
clkD
Extra delay in clock divider
dout
14
Conclusion
15
 Simulators create events and schedule them, but with no
notion of timing checks across data and clock events
 Shoot-thru impacts RTL Simulation and may cause false
simulation behavior, masking the real issues
 Simple RTL coding rules can prevent the problem to
occur


Possibly add physical delays on data path to force scheduling
Avoid physical delays on clock path
 Spyglass RTL checker can help you to efficiently check
those rules and removes need of costly gate level
simulations.
 Next Steps

Extend the SpyGlass checks to ensure that every output
interface is having delayed assignment
Download