OpenCores
URL https://opencores.org/ocsvn/socgen/socgen/trunk

Subversion Repositories socgen

[/] [socgen/] [trunk/] [doc/] [src/] [guides/] [reset_sys_design.html] - Diff between revs 28 and 119

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 28 Rev 119
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>Reset System Design</title>
        <TITLE>Reset System Design</TITLE>
  <meta name="GENERATOR" content="OpenOffice.org 3.0  (Linux)">
        <META NAME="GENERATOR" CONTENT="LibreOffice 3.5  (Linux)">
  <meta name="CREATED" content="0;0">
        <META NAME="CREATED" CONTENT="0;0">
  <meta name="CHANGED" content="20100309;9305300">
        <META NAME="CHANGED" CONTENT="20120817;10052500">
  <meta name="KEYWORDS" content="start">
        <META NAME="KEYWORDS" CONTENT="start">
  <meta name="Info 3" content="">
        <META NAME="Info 3" CONTENT="">
  <meta name="Info 4" content="">
        <META NAME="Info 4" CONTENT="">
  <meta name="date" content="2008-01-08T12:01:41-0500">
        <META NAME="date" CONTENT="2008-01-08T12:01:41-0500">
  <meta name="robots" content="index,follow">
        <META NAME="robots" CONTENT="index,follow">
  <style type="text/css">
        <STYLE TYPE="text/css">
        <!--
        <!--
                H3.western { font-family: "Albany", sans-serif }
                H3.western { font-family: "Albany", sans-serif }
                H3.cjk { font-family: "HG Mincho Light J" }
                H3.cjk { font-family: "HG Mincho Light J" }
                H3.ctl { font-family: "Arial Unicode MS" }
                H3.ctl { font-family: "Arial Unicode MS" }
        -->
        -->
        </style>
        </STYLE>
</head>
</HEAD>
<body dir="ltr" lang="en-US">
<BODY LANG="en-US" DIR="LTR">
<div id="toc__header" dir="ltr">
<DIV ID="toc__header" DIR="LTR">
<p><br>
        <P><BR><BR>
</p>
        </P>
</div>
</DIV>
<h1><a name="socgen_project"></a>Design considerations for Reset
<H1><A NAME="socgen_project"></A>Design considerations for Reset
Systems<br>
Systems</H1>
</h1>
<P><BR><BR>
<p><br>
</P>
<br>
<P>In a world as fast moving as the semiconductor industry&nbsp; it
</p>
is essential that all designers continuously update their knowledge
<p>In a world as fast moving as the semiconductor industry&nbsp; it is
as the technology changes. It is very easy to become complacent and
essential that all designers continuously update their knowledge as the
then suddenly discover that the techniques that have served you for
technology changes. It is very easy to become complacent and then
many years no longer work.&nbsp;
suddenly discover that the techniques that have served you for many
</P>
years no longer work.&nbsp; <br>
<P>This paper was written to explore some of the mistakes that reset
<br>
 
</p>
 
<p>This paper was written to explore some of the mistakes that reset
 
system designers have made over the years and why they are no longer
system designers have made over the years and why they are no longer
true.<br>
true.</P>
</p>
<H3 CLASS="western"><BR><BR>
<h3 class="western"><br>
</H3>
</h3>
<H3 CLASS="western">Do we really need a reset system?
<h3 class="western"></h3>
</H3>
<h3 class="western">Do we really need a reset system? <br>
<P>Actually you don't. It is a good design practice to ensure that
</h3>
 
<p>Actually you don't. It is a good design practice to ensure that
 
there are no dead end states in your logic and that any state will
there are no dead end states in your logic and that any state will
eventually lead into a valid operating mode. For many years designs
eventually lead into a valid operating mode. For many years designs
were simple and robust enough that they would function even if they
were simple and robust enough that they would function even if they
were enabled without a reset. Then along came embedded processors and
were enabled without a reset. Then along came embedded processors and
the world became much more complex. I have seen some pretty audacious
the world became much more complex. I have seen some pretty audacious
attempts to create a watchdog&nbsp; to detect and restart a lost system
attempts to create a watchdog&nbsp; to detect and restart a lost
but the best that they can do is to improve the odds that the system
system but the best that they can do is to improve the odds that the
will recover. None of them were 100%.<br>
system will recover. None of them were 100%.</P>
</p>
<P>It is possible that you do not need to reset all the storage
<p>It is possible that you do not need to reset all the storage
elements in a design. In many cases the data is reloaded shortly
elements in a design. In many cases the data is reloaded shortly before
before it is needed and it doesn't care what it was before that time.
it is needed and it doesn't care what it was before that time. Some
Some designers will leave certain storage elements off of the power
designers will leave certain storage elements off of the power on reset
on reset because it has no effect on the operation.</P>
because it has no effect on the operation.<br>
<P>BUT.</P>
</p>
<P>There was a mathematician named Fermat who came up with a theorem
<p>BUT.<br>
that eventually became known as Fermat's last theorem. It was a
</p>
simple little equation that worked in every test case that&nbsp; they
<p>There was a mathematician named Fermat who came up with a theorem
threw at it and they threw a lot of test cases at it. But it took
that eventually became known as Fermat's last theorem. It was a simple
over 350 years before someone could prove that it would really work
little equation that worked in every test case that&nbsp; they threw at
in all cases.</P>
it and they threw a lot of test cases at it. But it took over 350 years
<P><BR>If you allow your designers the option to leave storage
before someone could prove that it would really work in all cases.</p>
elements off the power on reset system then they will come up with
<p><br>
these wonderful little designs that appear to work and they will work
If you allow your designers the option to leave storage elements off
in any test case that you throw at it. But it will take you FOREVER
the power on reset system then they will come up with these wonderful
to fully verify that it will work in all cases.</P>
little designs that appear to work and they will work in any test case
<P>You do not need a power on reset system for your logic to work.
that you throw at it. But it will take you FOREVER to fully verify that
You need it&nbsp; in order to verify that your logic works.&nbsp; It
it will work in all cases.<br>
takes longer to verify a design than it does to create it and not
</p>
providing a 100% known start up condition will make the verification
<p>You do not need a power on reset system for your logic to work. You
effort that much harder. All storage elements must be on a reset if
need it&nbsp; in order to verify that your logic works.&nbsp; It takes
only for test and verification purposes. If you have logic that must
longer to verify a design than it does to create it and not providing a
function during a power up reset then put it on a special reset that
100% known start up condition will make the verification effort that
is only active in test mode.</P>
much harder. All storage elements must be on a reset if only for test
<P><BR><BR>
and verification purposes. If you have logic that must function during
</P>
a power up reset then put it on a special reset that is only active in
<H3 CLASS="western">All components must come out of reset on exactly
test mode.<br>
the same clock</H3>
</p>
<P>That's true, or at least it was back in the 60's.&nbsp; Back then
<br>
every component would come out of reset and start &quot;componenting&quot;.
<h3 class="western">All components must come out of reset on exactly
The reset system acted like a conductor&nbsp; so that everybody
the same clock<br>
started on the same beat. Those types of systems are rare today. Most
</h3>
major chips have one or more microprocessors in side so components
That's true, or at least it was back in the 60's.&nbsp; Back then every
come out of reset only to sit there waiting for the cpu to configure
component would come out of reset and start "componenting". The reset
them and get them started.&nbsp; It doesn't matter what cycle you
system acted like a conductor&nbsp; so that everybody started on the
come out of reset on as long as you are up and ready&nbsp; before
same beat. Those types of systems are rare today. Most major chips have
someone else asks you to do something. <BR><BR>This has led to two
one or more microprocessors in side so components come out of reset
prong approach to reset system design.&nbsp; The majority of the chip
only to sit there waiting for the cpu to configure them and get them
is on a large slow reset distribution&nbsp; tree&nbsp; that doesn't
started.&nbsp; It doesn't matter what cycle you come out of reset on as
even try&nbsp; to get&nbsp; everybody reset on the&nbsp; same cycle.&nbsp;
long as you are up and ready&nbsp; before someone else asks you to do
Then you have a second&nbsp; smaller and faster tree that only resets
something. <br>
the cpu and anything else that can&nbsp; initiate activity.&nbsp; The
<br>
fast reset is delayed long enough to ensure that the slow reset is
This has led to two prong approach to reset system design.&nbsp; The
finished before starting the cpu. In modern designs this can be a
majority of the chip is on a large slow reset distribution&nbsp;
significant number of clock cycles. I have seen repairable memories
tree&nbsp; that doesn't even try&nbsp; to get&nbsp; everybody reset on
where you had to hold off starting the cpu for 3000 clocks to ensure
the&nbsp; same cycle.&nbsp; Then you have a second&nbsp; smaller and
that any repair would be finished before the cpu started.<BR><BR><BR>
faster tree that only resets the cpu and anything else that can&nbsp;
</P>
initiate activity.&nbsp; The fast reset is delayed long enough to
<H3 CLASS="western">You must design an asynchronous reset system</H3>
ensure that the slow reset is finished before starting the cpu. In
<P>Absolutely. Most of the time your mission mode requirements will
modern designs this can be a significant number of clock cycles. I have
 
seen repairable memories where you had to hold off starting the cpu for
 
3000 clocks to ensure that any repair would be finished before the cpu
 
started.<br>
 
<br>
 
<br>
 
<h3 class="western">You must design an asynchronous reset system<br>
 
</h3>
 
Absolutely. Most of the time your mission mode requirements will
 
dictate that the power on reset system works even in the absence of
dictate that the power on reset system works even in the absence of
clock. If it doesn't then the test engineer will require that all pads
clock. If it doesn't then the test engineer will require that all
must respond to an async reset in case a board is built missing it's
pads must respond to an async reset in case a board is built missing
clock. Asynchronous reset design is essential.&nbsp; A power up monitor
it's clock. Asynchronous reset design is essential.&nbsp; A power up
will drive the reset input&nbsp; active&nbsp; as the power is ramping
monitor will drive the reset input&nbsp; active&nbsp; as the power is
up. You will not have a clock at this time so the reset system must be
ramping up. You will not have a clock at this time so the reset
able to work without one.<br>
system must be able to work without one.<BR><BR><BR><BR>
<br>
</P>
<br>
<H3 CLASS="western">You must design your logic using synchronous
<br>
design methods</H3>
<h3 class="western">You must design your logic using synchronous design
<P>Absolutely. Today's chips are huge. The only way that you can
methods<br>
close timing on a large design is if everyone follows strict
</h3>
synchronous design rules.&nbsp; The mistake that many of todays
Absolutely. Today's chips are huge. The only way that you can close
designers make is that they think that because they have to design an
timing on a large design is if everyone follows strict synchronous
asynchronous reset system that they get an exemption from following
design rules.&nbsp; The mistake that many of todays designers make is
the rules for synchronous design.&nbsp; Sorry guys, it not one or the
that they think that because they have to design an asynchronous reset
other its BOTH. You have to design a asynchronous reset system but
system that they get an exemption from following the rules for
you cannot use any flip flops with an asynchronous reset port.<BR><BR>The
synchronous design.&nbsp; Sorry guys, it not one or the other its BOTH.
funny thing is that synchronous design methodology is quite capable&nbsp;
You have to design a asynchronous reset system but you cannot use any
of&nbsp; creating an asynchronous reset&nbsp; system and will
flip flops with an asynchronous reset port.<br>
actually&nbsp; give you&nbsp; a smaller and faster design that either
<br>
of the traditional&nbsp; async only or sync only solutions.<BR><BR><BR>
The funny thing is that synchronous design methodology is quite
</P>
capable&nbsp; of&nbsp; creating an asynchronous reset&nbsp; system and
<H3 CLASS="western">Don't worry about making the reset system
will actually&nbsp; give you&nbsp; a smaller and faster design that
testable. The test engineer has a tool that will fix any problem in
either of the traditional&nbsp; async only or sync only solutions.<br>
the back end</H3>
<br>
<P>That used to be true. The first thing a vendor does when they get
<br>
a net list is to run a full drc that looks for dft issues. If anybody
<h3 class="western">Don't worry about making the reset system
has any signals crossing between&nbsp; the async reset port on a
testable.The test engineer has a tool that will fix any problem in the
flipflop and either a D or a Q port then it flags it as a violation.
back end<br>
So you can either send it back to the customer and wait a week for
</h3>
them to find it, fix it, and re-synthesizes or you can eco in a test
That used to be true. The first thing a vendor does when they get a net
mux at the flop and have it fixed in 5 minutes. Everyone took the
list is to run a full drc that looks for dft issues. If anybody has any
easy way out.<BR><BR>But then along came Logic equivalence checking
signals crossing between&nbsp; the async reset port on a flipflop and
(LEC).&nbsp; The final routed net list will be sent back and compared
either a D or a Q port then it flags it as a violation. So you can
with the customers golden net list and all of these ecos will show
either send it back to the customer and wait a week for them to find
up&nbsp; in the report. Now somebody has check out each and every
it, fix it, and re-synthesizes or you can eco in a test mux at the flop
item in the report&nbsp; before you can release the masks. It now&nbsp;
and have it fixed in 5 minutes. Everyone took the easy way out.<br>
becomes easier for the customer to find and fix these errors before
<br>
synthesis than it is to deal with thousands of lec errors.<BR><BR>Besides
But then along came Logic equivalence checking (LEC).&nbsp; The final
with the newer processes the days when you could eco in a small tweak
routed net list will be sent back and compared with the customers
on a routed net list and not have it break something are fast
golden net list and all of these ecos will show up&nbsp; in the report.
disappearing.&nbsp; You will eco the rtl code and then re-synthesis
Now somebody has check out each and every item in the report&nbsp;
and reroute.<BR><BR><BR><BR>&nbsp;</P>
before you can release the masks. It now&nbsp; becomes easier for the
<H3 CLASS="western">You must use a sync_reset pragma if you design a
customer to find and fix these errors before synthesis than it is to
synchronous reset system</H3>
deal with thousands of lec errors.<br>
<P>I cringe whenever I hear someone&nbsp; say this. If you do a
<br>
synchronous reset design then you will find that your gate
Besides with the newer processes the days when you could eco in a small
simulations will not run. Many of your flipflops will never reset to
tweak on a routed net list and not have it break something are fast
a known value. They will get a valid clock and the reset in the block
disappearing.&nbsp; You will eco the rtl code and then re-synthesis and
will be valid but synthesis will have combined the reset logic in
reroute.<br>
with the mission mode logic and it will be distributed throughout the
<br>
logic cone feeding the D input. It also uses the flops current state
<br>
in order to compute the next state.&nbsp; It creates a situation
<br>
where if the flop has a 0 or 1 in it then the logic will compute the
&nbsp;<br>
next state as 0 when reset is active. However if the flop is unknown
<br>
as it is at power up then verilog is unable to figure out the correct
<h3 class="western">You must use a sync_reset pragma if you design a
next state and it remains at x.<BR><BR>This is a simulation only
synchronous reset system<br>
issue as flops in real silicon will always resolve to a valid
</h3>
state.<BR><BR>Tool vendors created the sync_reset pragma so that you
I cringe whenever I hear someone&nbsp; say this. If you do a
could tell the tool not to combine the reset logic with the mission
synchronous reset design then you will find that your gate simulations
mode logic. You place it at the very tip of the logic cone and it
will not run. Many of your flipflops will never reset to a known value.
will remain there in gates.<BR><BR>So whats wrong with that?<BR><BR>The
They will get a valid clock and the reset in the block will be valid
synthesis tool will make a list of all signals that enter the logic
but synthesis will have combined the reset logic in with the mission
 
mode logic and it will be distributed throughout the logic cone feeding
 
the D input. It also uses the flops current state in order to compute
 
the next state.&nbsp; It creates a situation where if the flop has a 0
 
or 1 in it then the logic will compute the next state as 0 when reset
 
is active. However if the flop is unknown as it is at power up then
 
verilog is unable to figure out the correct next state and it remains
 
at x.<br>
 
<br>
 
This is a simulation only issue as flops in real silicon will always
 
resolve to a valid state.<br>
 
<br>
 
Tool vendors created the sync_reset pragma so that you could tell the
 
tool not to combine the reset logic with the mission mode logic. You
 
place it at the very tip of the logic cone and it will remain there in
 
gates.<br>
 
<br>
 
So whats wrong with that?<br>
 
<br>
 
The synthesis tool will make a list of all signals that enter the logic
 
cone along with the relative time it enters before the next clock
cone along with the relative time it enters before the next clock
edge.&nbsp; If it finds a early arriving signal entering the cone
edge.&nbsp; If it finds a early arriving signal entering the cone
closer to the tip than a late arriving one&nbsp; then it&nbsp; will try
closer to the tip than a late arriving one&nbsp; then it&nbsp; will
to remap the logic&nbsp;&nbsp; and swap them so that the late
try to remap the logic&nbsp;&nbsp; and swap them so that the late
arrival&nbsp; can&nbsp;&nbsp; move closer to tip.&nbsp; Ideally the
arrival&nbsp; can&nbsp;&nbsp; move closer to tip.&nbsp; Ideally the
latest signals are moved towards the tip and the early ones are moved
latest signals are moved towards the tip and the early ones are moved
to the rear. <br>
to the rear. <BR><BR>The reset from a properly designed distribution
<br>
tree and the feedback signal from the flop that you are working on
The reset from a properly designed distribution tree and the feedback
will always be two of the earliest signals. They will get pushed up
signal from the flop that you are working on will always be two of the
away from the tip of the cone simply to make room for the mission
earliest signals. They will get pushed up away from the tip of the cone
critical late signals. This is a good thing, you want this to happen.
simply to make room for the mission critical late signals. This is a
<BR><BR>The problem is that designers think that they must prove that
good thing, you want this to happen. <br>
the reset system works in gate sims. Verilog is a great tool when
<br>
every node is in a known state but it is lousy when dealing with
The problem is that designers think that they must prove that the reset
unknowns. There are times like this when it is possible to resolve a
system works in gate sims. Verilog is a great tool when every node is
X into a known value&nbsp; and it can't. There are also times when it
in a known state but it is lousy when dealing with unknowns. There are
will resolve an X to a known value when it shouldn't. The only way to
times like this when it is possible to resolve a X into a known
use verilog is to start with everything in a known state and stop it
value&nbsp; and it can't. There are also times when it will resolve an
when anything goes X.&nbsp; That means there's a problem and nothing
X to a known value when it shouldn't. The only way to use verilog is to
downstream from that X can be trusted.<BR><BR><BR>You do not prove
start with everything in a known state and stop it when anything goes
your reset system design in gates sims. You prove the design in rtl
X.&nbsp; That means there's a problem and nothing downstream from that
sims and use LEC to prove that gates matches the design that works.&nbsp;
X
Then you use initial statements to force all flops to a known state
can be trusted.<br>
at start up and use gates sims to prove that everything else works.
<br>
Verilog gates is the wrong tool to use to verify the reset
<br>
system.<BR><BR>You never use the sync_reset pragma unless you really
You do not prove your reset system design in gates sims. You prove the
like big slow designs.<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
design in rtl sims and use LEC to prove that gates matches the design
</P>
that works.&nbsp; Then you use initial statements to force all flops to
<H3 CLASS="western">Doing a synchronous reset design adds logic in
a known state at start up and use gates sims to prove that everything
the D pathway and will slow down the design</H3>
else works. Verilog gates is the wrong tool to use to verify the reset
<P><BR>Wrong. Adding logic in the critical path will slow down the
system.<br>
design. Adding it into a non-critical path simply reduces slack in
<br>
that path. If you put the reset logic at the very tip of the logic
You never use the sync_reset pragma unless you really like big slow
cone then you are adding it into the critical path and the synthesis
designs.<br>
tool will move it up the cone&nbsp; until&nbsp; it is in a&nbsp; safe
<br>
location.<BR><BR>Adding a synchronous reset system doesn't really add
<br>
much logic to the design. The tools will first locate any mission
<br>
mode logic that also forces the flop into the reset state and it will
<br>
piggyback the reset system with that logic. You don't add gates , you
<br>
bump a gate up to add an extra input.<BR><BR><BR><BR>
<br>
</P>
<br>
<H3 CLASS="western">A component must perform&nbsp; reset in one clock
<br>
cycle</H3>
<br>
<P>The power on reset is really a slow operation.&nbsp; A typical
<h3 class="western">Doing a synchronous reset design adds logic in the
system could see:</P>
D pathway and will slow down the design<br>
<UL>
</h3>
        <LI><P STYLE="margin-bottom: 0in">Ramp time for power rails
<br>
        </P>
Wrong. Adding logic in the critical path will slow down the design.
        <LI><P STYLE="margin-bottom: 0in">clock start up time
Adding it into a non-critical path simply reduces slack in that path.
        </P>
If you put the reset logic at the very tip of the logic cone then you
        <LI><P>pll lock time
are adding it into the critical path and the synthesis tool will move
        </P>
it up the cone&nbsp; until&nbsp; it is in a&nbsp; safe location.<br>
</UL>
<br>
<P>You are looking at activity that is measured in the milliseconds
Adding a synchronous reset system doesn't really add much logic to the
on a system clock that is measured in the nanoseconds. Performing a
design. The tools will first locate any mission mode logic that also
reset in one clock cycle&nbsp; requires adding logic to every single
forces the flop into the reset state and it will piggyback the reset
flipflop<BR>to provide nanosecond resolution to an event that is
system with that logic. You don't add gates , you bump a gate up to add
measured in microseconds. A designer should only add reset logic as a
an extra input.<br>
last resort. The preferred method is to use the existing mission mode
<br>
logic to perform the reset. If you have a computational block with a
<br>
fifty stage deep pipeline then reset should force it's inputs to 0
<br>
and open all the gates so that every flipflop will be flushed out in
<h3 class="western">A component must perform&nbsp; reset in one clock
50 clocks. Better yet would be to have the block feeding your input
cycle<br>
force it's output to all 0's during reset.<BR><BR>Every design should
</h3>
spec a multicycle reset and give the designers the freedom to reset
The power on reset is really a slow operation.&nbsp; A typical system
any way they want as long as it's finished by the end of the reset
could see:<br>
pulse.<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
<br>
</P>
<ul>
<DIV ID="Section1" DIR="LTR">
  <li>Ramp time for power rails</li>
        <P><A NAME="toc__header"></A><BR><BR>
  <li>clock start up time</li>
        </P>
  <li>pll lock time</li>
</DIV>
</ul>
<H1><A NAME="socgen_project1"></A>How to design the Reset System</H1>
You are looking at activity that is measured in the milliseconds on a
<P><BR><BR>
system clock that is measured in the nanoseconds. Performing a reset in
</P>
one clock cycle&nbsp; requires adding logic to every single flipflop<br>
<H3 CLASS="western">1) Write a mission statement</H3>
to provide nanosecond resolution to an event that is measured in
<P>The first step in any design task is to write a statement that
microseconds. A designer should only add reset logic as a last
sums up what the thing you are designing&nbsp; will do.&nbsp; This is
resort. The preferred method is to use the existing mission mode logic
important because everything after this point must be traceable back
to perform the reset. If you have a computational block with a fifty
to this statement.&nbsp; The statement will&nbsp; tell you&nbsp;
stage deep pipeline then reset should force it's inputs to 0 and open
what&nbsp; steps you must follow. Anything that you cannot trace back
all the gates so that every flipflop will be flushed out in 50 clocks.
to something in the mission statement is not part of the design<BR><BR><BR>The
Better yet would be to have the block feeding your input force it's
mission statement for the reset system is:<BR><BR><BR><BR>The reset
output to all 0's during reset.<br>
system will force all the nodes in a system or subsystem into a known
<br>
good state while&nbsp; a reset trigger is active.<BR><BR><BR><BR>
Every design should spec a multicycle reset and give the designers the
</P>
freedom to reset any way they want as long as it's finished by the end
<H3 CLASS="western">2) Define the reset triggers</H3>
of the reset pulse.<br>
<P>We must now make a list of all the events that will cause us to
<br>
reset all or part of the system. Our list is:</P>
<br>
<UL>
<br>
        <LI><P>The design has a power monitor chip that provides a low
<br>
        signal when the supply rails have&nbsp; not been above the limit for
<br>
        a long enough period of time
<br>
        </P>
<br>
</UL>
<br>
<UL>
<br>
        <LI><P>The design has a soft reset block that can reset any sub
<br>
        block if its reset flop is set to 1.
<br>
        </P>
<div id="toc__header" dir="ltr">
</UL>
<p><br>
<UL>
</p>
        <LI><P>The clocks must run during reset but the divider has a
</div>
        special reset input for simulation and testing
<h1><a name="socgen_project"></a>How to design the Reset System<br>
        </P>
</h1>
</UL>
<br>
<UL>
<br>
        <LI><P>The design has ieee 1149.1 test logic with a active low trst*
<h3 class="western">1) Write a mission statement<br>
        pin.
</h3>
        </P>
The first step in any design task is to write a statement that sums up
</UL>
what the thing you are designing&nbsp; will do.&nbsp; This is important
<UL>
because everything after this point must be traceable back to this
        <LI><P>The reset signal&nbsp; has a metastable filter to sync it
statement.&nbsp; The statement will&nbsp; tell you&nbsp; what&nbsp;
        with the clock.</P>
steps you must follow. Anything that you cannot trace back to something
</UL>
in the mission statement is not part of the design<br>
<P>The last is important because some designers will forget that the
<br>
filtered output is actually it's own separate reset domain<BR><BR><BR><BR><BR>
<br>
</P>
The mission statement for the reset system is:<br>
<H3 CLASS="western">3) Define a known good state</H3>
<br>
<P>We&nbsp; now look at every storage element in the design and
<br>
define a safe state for each&nbsp; element of either 1 or 0. Don't
<br>
cares are not allowed. If you cannot pick a value then one will be
The reset system will force all the nodes in a system or subsystem into
assigned for you. This task is best performed after the system and
a known good state while&nbsp; a reset trigger is active.<br>
board designers have defined the known good state for the PCA.&nbsp;
<br>
They will define the state for all of the pads, the ic design team
<br>
must define the states for all internal nodes.</P>
<br>
<H3 CLASS="western">4) Assign storage elements to triggers</H3>
<h3 class="western">2) Define the reset triggers<br>
<P>Once we have a list of all storage element we list any and all
</h3>
triggers that will force them into a safe mode.<BR>A typical list
We must now make a list of all the events that will cause us to reset
would list all the flipflops in timer module u12.r567 would be reset
all or part of the system. Our list is:<br>
by:</P>
<br>
<UL>
<ul>
        <LI><P>an active high on soft reset bit #23
  <li>The design has a power monitor chip that provides a low signal
        </P>
when the supply rails have&nbsp; not been above the limit for a long
</UL>
enough period of time</li>
<UL>
</ul>
        <LI><P>an active low on the power monitor input
<ul>
        </P>
  <li>The design has a soft reset block that can reset any sub block if
</UL>
its reset flop is set to 1.</li>
<UL>
</ul>
        <LI><P>an active low on the simulation/test reset
<ul>
        </P>
  <li>The clocks must run during reset but the divider has a special
</UL>
reset input for simulation and testing</li>
<UL>
</ul>
        <LI><P>an active low on the output of the metastable filter
<ul>
        </P>
  <li>The design has ieee 1149.1 test logic with a active low trst* pin.</li>
</UL>
</ul>
<P><BR>The jtag reset is not included because it doesn't reset the
<ul>
timer.&nbsp; Once this step is complete it will provide a map for the
  <li>The reset signal&nbsp; has a metastable filter to sync it with
reset distribution tree that you will need. The best way to
the clock.<br>
distribute the reset over a large design is to use what is called a
  </li>
&quot;synchronous reset tree&quot;.<BR><BR><BR><BR><BR><BR>
</ul>
</P>
The last is important because some designers will forget that the
<H3 CLASS="western">5) Select between synchronous or asynchronous
filtered output is actually it's own separate reset domain<br>
reset system</H3>
<br>
<P>At this point it is easy to see if we need a synchronous or
<br>
 
<br>
 
<br>
 
<h3 class="western">3) Define a known good state<br>
 
</h3>
 
We&nbsp; now look at every storage element in the design and define a
 
safe state for each&nbsp; element of either 1 or 0. Don't cares are not
 
allowed. If you cannot pick a value then one will be assigned for you.
 
This task is best performed after the system and board designers have
 
defined the known good state for the PCA.&nbsp; They will define the
 
state for all of the pads, the ic design team must define the states
 
for all internal nodes.<br>
 
<br>
 
<h3 class="western">4) Assign storage elements to triggers<br>
 
</h3>
 
Once we have a list of all storage element we list any and all triggers
 
that will force them into a safe mode.<br>
 
A typical list would list all the flipflops in timer module u12.r567
 
would be reset by:<br>
 
<br>
 
<ul>
 
  <li>an active high on soft reset bit #23</li>
 
</ul>
 
<ul>
 
  <li>an active low on the power monitor input</li>
 
</ul>
 
<ul>
 
  <li>an active low on the simulation/test reset</li>
 
</ul>
 
<ul>
 
  <li>an active low on the output of the metastable filter</li>
 
</ul>
 
<br>
 
The jtag reset is not included because it doesn't reset the
 
timer.&nbsp;
 
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
 
reset over a large design is to use what is called a "synchronous reset
 
tree".<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<h3 class="western">5) Select between synchronous or asynchronous reset
 
system<br>
 
</h3>
 
At this point it is easy to see if we need a synchronous or
 
asynchronous reset system. If your trigger is asynchronous then you
asynchronous reset system. If your trigger is asynchronous then you
must design a asynchronous reset system. If the trigger can occur
must design a asynchronous reset system. If the trigger can occur
without a clock then you must be able to reset the system without a
without a clock then you must be able to reset the system without a
clock.<br>
 
<br>
 
If the trigger is synchronous then you may design a synchronous reset
 
system or you may also choose to design a asynchronous one.&nbsp; The
 
async one will enter reset one&nbsp; cycle&nbsp; before the sync one
 
but they will both exit on&nbsp; at the same&nbsp; time. <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>
 
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>
 
<img style="width: 800px; height: 600px;" alt=""
 
 src="../png/reset_fig1.png"><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.&nbsp; 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>
 
<img style="width: 800px; height: 600px;" alt=""
 
 src="../png/reset_fig2.png"><br>
 
<br>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
</p>
 
<h3 class="western">8) Seperate Synchronous and&nbsp; Asynchronous
 
resets<br>
 
</h3>
 
Asynchronous
 
resets connect to the asynchronouse reset/preset ports of a flip/flop.
 
Synchronous resets connect through the logic cone to the D flip/flop
 
port. They are the logicaly the same signal in mission mode but must be
 
sperate&nbsp; during scan testing. It is very easy to make a mistake in
 
rtl coding.&nbsp; The recomendation is the use active low signals for
 
all asynchronous resets and active high signals for all synchronous
 
ones.<br>
 
<p><br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
<p><br>
 
<br>
 
</p>
 
</body>
 
</html>
 
 
 
 No newline at end of file
 No newline at end of file
 
clock.<BR><BR>If the trigger is synchronous then you may design a
 
synchronous reset system or you may also choose to design a
 
asynchronous one.&nbsp; The async one will enter reset one&nbsp;
 
cycle&nbsp; before the sync one but they will both exit on&nbsp; at
 
the same&nbsp; time. <BR><BR><BR><BR>
 
</P>
 
<H3 CLASS="western">6) Select reset style for each flip/flop</H3>
 
<P>We now need to select a reset &quot;Style&quot; for each flip/flop
 
from the four possible reset styles.<BR><BR><BR>
 
</P>
 
<UL>
 
        <LI><P STYLE="margin-bottom: 0in">Synchronous
 
        </P>
 
        <LI><P STYLE="margin-bottom: 0in">Synchronous with output override
 
        </P>
 
        <LI><P STYLE="margin-bottom: 0in">Asynchronous
 
        </P>
 
        <LI><P>Both Synchronous and Asynchronous
 
        </P>
 
        <LI><P>Multicycle</P>
 
</UL>
 
<P><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><IMG SRC="../png/reset_fig1.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=800 HEIGHT=600 BORDER=0><BR><BR><BR><BR><BR><BR><BR><BR><BR>
 
</P>
 
<H3 CLASS="western">7) Apply DFT fixes to all asynchronous ports</H3>
 
<P>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.&nbsp; 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><IMG SRC="../png/reset_fig2.png" NAME="graphics2" ALIGN=BOTTOM WIDTH=800 HEIGHT=600 BORDER=0></P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<H3 CLASS="western">8) Seperate Synchronous and&nbsp; Asynchronous
 
resets</H3>
 
<P>Asynchronous resets connect to the asynchronouse reset/preset
 
ports of a flip/flop. Synchronous resets connect through the logic
 
cone to the D flip/flop port. They are the logicaly the same signal
 
in mission mode but must be sperate&nbsp; during scan testing. It is
 
very easy to make a mistake in rtl coding.&nbsp; The recomendation is
 
the use active low signals for all asynchronous resets and active
 
high signals for all synchronous ones.</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
<P><BR><BR>
 
</P>
 
</BODY>
 
</HTML>
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.