K
KJ
Guest
On Jan 10, 8:11 am, Just an Illusion <illusion_to_...@yahoo.fr> wrote:
model checking report a failure and what is the failure?
static timing analysis is embedded with every single FPGA/CPLD design
tool is worth using. Failure to use such a tool on a design is
something only to be attempted by those with lots of time on their
hands and who receive joy while investigating 'unusual' behaviors.
cycle to compute the next state, the next state might be anything
(i.e. you can't say with any certainty that it would be 'B').
things at all since they will be just two more states...and your
position was that it could take longer than one clock cycle to compute
this next state.
The best solution is to simply perform static timing analysis and fix
all failures. If there are some paths that just really can't be
improved enough to fit within the clock cycle (but also don't
functionally need to for that particular design), then simply create
(or use an existing) clock enable, tell the timing analyzer which
selected signals are allowed to take more than one clock cycle and
move on.
Kevin Jennings
Just curious, what is not 'formal' about the posted code? Why would aHi,
The Sudhi solution is equivalent to a synchronous reset, but that can
drive some verification/validation problem if the 'enable' signal is a
DUT input or if the signal must be active on a reduce set of state.
For example, if the FSM States are (A, B, C, D, E, F) and if 'enable'
must be active only in state B, D, E and F.
The Sudhi syntax example isn't 'formal' and if you use any 'formal'
verification tools based on 'model checking' approach, you must have a
failure.
model checking report a failure and what is the failure?
OK, but this gets caught by static timing analysis. A tool to performA typical problematic situation is like a 'race' situation if the
'STATE' processing time require more than one 'Clk' cycle.
static timing analysis is embedded with every single FPGA/CPLD design
tool is worth using. Failure to use such a tool on a design is
something only to be attempted by those with lots of time on their
hands and who receive joy while investigating 'unusual' behaviors.
Actually, since you were positing that it takes more than one clockSee the following situation, if the SEEK state require 2 'Clk' cycle :
- Simulation Step 1 : rising_edge(Clk) & enable='1' => STATE <= SEEK
- Simulation Step 2 : enable='0' => NEXT_STATE <= B, STATE <= SEEK
- Simulation Step 3 : rising_edge(Clk) & enable='0' => STATE <= B *Error*
cycle to compute the next state, the next state might be anything
(i.e. you can't say with any certainty that it would be 'B').
claim than adding your new 'waiting' and 'busy' states won't improveI think than the best solution is the definition of a 'waiting' state.
From this state, you go to the 'busy' states where you process to all
your activities (Seek state and others) and during all these states you
drive a 'busy' signal that go back to your CPU, in example thru a
dedicated 'state' register, and the signal CPU_enable doesn't falling
before the end of 'busy' state (falling of it). At the end of all 'busy'
activities you FSM go back to this 'waiting' state.
If it takes more than one clock cycle to compute the next state as you
things at all since they will be just two more states...and your
position was that it could take longer than one clock cycle to compute
this next state.
The best solution is to simply perform static timing analysis and fix
all failures. If there are some paths that just really can't be
improved enough to fit within the clock cycle (but also don't
functionally need to for that particular design), then simply create
(or use an existing) clock enable, tell the timing analyzer which
selected signals are allowed to take more than one clock cycle and
move on.
Kevin Jennings