Line 1... |
Line 1... |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
<html>
|
<html>
|
<head>
|
<head>
|
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
|
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8">
|
<title>start</title>
|
<title>Reset System Design</title>
|
<meta name="GENERATOR" content="OpenOffice.org 3.0 (Linux)">
|
<meta name="GENERATOR" content="OpenOffice.org 3.0 (Linux)">
|
<meta name="CREATED" content="0;0">
|
<meta name="CREATED" content="0;0">
|
<meta name="CHANGED" content="20100309;9305300">
|
<meta name="CHANGED" content="20100309;9305300">
|
<meta name="KEYWORDS" content="start">
|
<meta name="KEYWORDS" content="start">
|
<meta name="Info 3" content="">
|
<meta name="Info 3" content="">
|
Line 87... |
Line 87... |
</p>
|
</p>
|
<br>
|
<br>
|
<h3 class="western">All components must come out of reset on exactly
|
<h3 class="western">All components must come out of reset on exactly
|
the same clock<br>
|
the same clock<br>
|
</h3>
|
</h3>
|
Thats true, or at least it was back in the 60's. Back then every
|
That's true, or at least it was back in the 60's. Back then every
|
component would come out of reset and start "componenting". The reset
|
component would come out of reset and start "componenting". The reset
|
system acted like a conductor so that everybody started on the
|
system acted like a conductor so that everybody started on the
|
same beat. Those types of systems are rare today. Most major chips have
|
same beat. Those types of systems are rare today. Most major chips have
|
one or more microprocessors in side so components come out of reset
|
one or more microprocessors in side so components come out of reset
|
only to sit there waiting for the cpu to configure them and get them
|
only to sit there waiting for the cpu to configure them and get them
|
Line 126... |
Line 126... |
<br>
|
<br>
|
<br>
|
<br>
|
<h3 class="western">You must design your logic using synchronous design
|
<h3 class="western">You must design your logic using synchronous design
|
methods<br>
|
methods<br>
|
</h3>
|
</h3>
|
Absolutely. Todays chips are huge. The only way that you can close
|
Absolutely. Today's chips are huge. The only way that you can close
|
timing on a large design is if everyone follows strict synchronous
|
timing on a large design is if everyone follows strict synchronous
|
design rules. The mistake that many of todays designers make is
|
design rules. The mistake that many of todays designers make is
|
that they think that because they have to design an asynchronous reset
|
that they think that because they have to design an asynchronous reset
|
system that they get an exemption from following the rules for
|
system that they get an exemption from following the rules for
|
synchronous design. Sorry guys, it not one or the other its BOTH.
|
synchronous design. Sorry guys, it not one or the other its BOTH.
|
Line 150... |
Line 150... |
That used to be true. The first thing a vendor does when they get a net
|
That used to be true. The first thing a vendor does when they get a net
|
list is to run a full drc that looks for dft issues. If anybody has any
|
list is to run a full drc that looks for dft issues. If anybody has any
|
signals crossing between the async reset port on a flipflop and
|
signals crossing between the async reset port on a flipflop and
|
either a D or a Q port then it flags it as a violation. So you can
|
either a D or a Q port then it flags it as a violation. So you can
|
either send it back to the customer and wait a week for them to find
|
either send it back to the customer and wait a week for them to find
|
it, fix it, and resynthesizes or you can eco in a test mux at the flop
|
it, fix it, and re-synthesizes or you can eco in a test mux at the flop
|
and have it fixed in 5 minutes. Everyone took the easy way out.<br>
|
and have it fixed in 5 minutes. Everyone took the easy way out.<br>
|
<br>
|
<br>
|
But then along came Logic equivalence checking (LEC). The final
|
But then along came Logic equivalence checking (LEC). The final
|
routed net list will be sent back and compared with the customers
|
routed net list will be sent back and compared with the customers
|
golden net list and all of these ecos will show up in the report.
|
golden net list and all of these ecos will show up in the report.
|
Line 218... |
Line 218... |
in a known state but it is lousy when dealing with unknowns. There are
|
in a known state but it is lousy when dealing with unknowns. There are
|
times like this when it is possible to resolve a X into a known
|
times like this when it is possible to resolve a X into a known
|
value and it can't. There are also times when it will resolve an
|
value and it can't. There are also times when it will resolve an
|
X to a known value when it shouldn't. The only way to use verilog is to
|
X to a known value when it shouldn't. The only way to use verilog is to
|
start with everything in a known state and stop it when anything goes
|
start with everything in a known state and stop it when anything goes
|
X. That means theres a problem and nothing downstream from that X
|
X. That means there's a problem and nothing downstream from that
|
|
X
|
can be trusted.<br>
|
can be trusted.<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
You do not prove your reset system design in gates sims. You prove the
|
You do not prove your reset system design in gates sims. You prove the
|
design in rtl sims and use LEC to prove that gates matches the design
|
design in rtl sims and use LEC to prove that gates matches the design
|
Line 273... |
Line 274... |
</ul>
|
</ul>
|
You are looking at activity that is measured in the milliseconds on a
|
You are looking at activity that is measured in the milliseconds on a
|
system clock that is measured in the nanoseconds. Performing a reset in
|
system clock that is measured in the nanoseconds. Performing a reset in
|
one clock cycle requires adding logic to every single flipflop<br>
|
one clock cycle requires adding logic to every single flipflop<br>
|
for no good reason. A designer should only add reset logic as a last
|
for no good reason. A designer should only add reset logic as a last
|
resort. The prefered method is to use the existing mission mode logic
|
resort. The preferred method is to use the existing mission mode logic
|
to perform the reset. If you have a computational block with a fifty
|
to perform the reset. If you have a computational block with a fifty
|
stage deep pipeline then reset should force it's inputs to 0 and open
|
stage deep pipeline then reset should force it's inputs to 0 and open
|
all the gates so that every flipflop will be flushed out in 50 clocks.
|
all the gates so that every flipflop will be flushed out in 50 clocks.
|
Better yet would be to have the block feeding your input force it's
|
Better yet would be to have the block feeding your input force it's
|
output to all 0's during reset.<br>
|
output to all 0's during reset.<br>
|
Line 348... |
Line 349... |
<li>The reset signal has a metastable filter to sync it with
|
<li>The reset signal has a metastable filter to sync it with
|
the clock.<br>
|
the clock.<br>
|
</li>
|
</li>
|
</ul>
|
</ul>
|
The last is important because some designers will forget that the
|
The last is important because some designers will forget that the
|
filtered output is actually it's own seperate reset domain<br>
|
filtered output is actually it's own separate reset domain<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<h3 class="western">3) Define a known good state<br>
|
<h3 class="western">3) Define a known good state<br>
|
Line 383... |
Line 384... |
</ul>
|
</ul>
|
<ul>
|
<ul>
|
<li>an active low on the output of the metastable filter</li>
|
<li>an active low on the output of the metastable filter</li>
|
</ul>
|
</ul>
|
<br>
|
<br>
|
The jtag reset is not included because it doesnt reset the timer.
|
The jtag reset is not included because it doesn't reset the
|
|
timer.
|
Once this step is complete it will provide a map for the reset
|
Once this step is complete it will provide a map for the reset
|
distribution tree that you will need. The best way to distribute the
|
distribution tree that you will need. The best way to distribute the
|
reset over a large design is to use what is called a "synchronous reset
|
reset over a large design is to use what is called a "synchronous reset
|
tree".<br>
|
tree".<br>
|
<br>
|
<br>
|
Line 409... |
Line 411... |
async one will enter reset one cycle before the sync one
|
async one will enter reset one cycle before the sync one
|
but they will both exit on at the same time. <br>
|
but they will both exit on at the same time. <br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
|
<h3 class="western">6) Select reset style for each flip/flop<br>
|
|
</h3>
|
|
We now need to select a reset "Style" for each flip/flop from the four
|
|
possible reset styles.<br>
|
|
<br>
|
|
<br>
|
|
<ul>
|
|
<li>Synchronous</li>
|
|
<li>Synchronous with output override</li>
|
|
<li>Asynchronous</li>
|
|
<li>Both Synchronous and Asynchronous</li>
|
|
</ul>
|
<br>
|
<br>
|
|
If the reset system is synchronous then you may choose any of the four
|
|
styles. If it is asynchronous then you cannot use the synchronous style.<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
|
<img style="width: 800px; height: 600px;" alt=""
|
|
src="../png/reset_fig1.png"><br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
|
<h3 class="western">7) Apply DFT fixes to all asynchronous ports<br>
|
|
</h3>
|
|
All paths from the Q output of a flip/flop to the asynchronous
|
|
reset/preset port of a flip/flop must be disabled during scan testing.
|
|
The use of a test mux to do this is not recommended because anytime you
|
|
use a test mux you are not testing the circuit as it is used in mission
|
|
mode. There will always be at least one point of failure inside the
|
|
test mux where scan tests will pass but the IC will not function.<br>
|
|
<br>
|
|
The recommended method is to gate off the synchronous path with a atg
|
|
test signal and then recombine it with an asynchronous reset so that
|
|
the async reset it self is still testable. The lib module
|
|
cde_asyncdisable is available for this purpose. DO NOT CREATE YOUR OWN
|
|
TEST LOGIC. Checking the rtl code to ensure that all asynchronous
|
|
resets are testable requires a fairly sophisticated and expensive tool.
|
|
Checking the rtl to ensure that all asynchronous resets are properly
|
|
connected to a cde_asyncdisable module takes a simple perl script.<br>
|
|
<br>
|
|
<br>
|
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
|
<img style="width: 800px; height: 600px;" alt=""
|
|
src="../png/reset_fig2.png"><br>
|
<br>
|
<br>
|
<p><br>
|
<p><br>
|
<br>
|
<br>
|
</p>
|
</p>
|
<p><br>
|
<p><br>
|