EmbDev.net

Forum: FPGA, VHDL & Verilog Incorrect reset in verilog


Author: Z. W. (Company: HAL) (wz198976)
Posted on:

Rate this post
0 useful
not useful
Hi Everyone,

This is my first question in the forum.
I am having a challenge in the FPGA code I am trying to solve. The FPGA 
state machine will lock up to a certain unknown state due to the noise 
from SMPS. Only reset can recover it. Now I am suspect this was due to 
my incorrect reset code (I am new to FPGA verilog ).

My question is what would possibly happen if I write the reset in this 
form.

The reset is triggered by external signal and will be synchronized for 
global reset.
    if (reset)
        delay   <= 0;
  if (inc_delay & !reset)
    delay  <= delay + 1'b1;

If you have question or something I did not clarify. Please let me know.

: Edited by Moderator
Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
-1 useful
not useful
Z. W. wrote:
> The FPGA state machine will lock up to a certain unknown state
When I read this, in my mind immediately pops up: "Asynchronous Inputs!"
Try that with Google translate:
http://www.lothar-miller.de/s9y/categories/35-Eins...
(Its german. And its VHDL, but the problem is the very same)

And here one must keep in mind: the most async input is the reset.

> due to the noise from SMPS.
Thats very, very strange! And it sounds like a try for a cheap excuse 
for a self made problem.
Billions of electronic devices are running with SMPS, why not yours? Ist 
it poorly self designed? Or why can you blame the SMPS for the problems?

Author: Z. W. (Company: HAL) (wz198976)
Posted on:

Rate this post
0 useful
not useful
Please don't judge before standing in my shoes.

I am in oil gas industry and trying to pack all the circuits in a very
tiny space to work at 200ºC. Parts selection that can work at this grade
is very limited. Those fancy filter scheme is not going to work for my
case. I can only live with the noise. The power supply is
transformerless and the input range is from 150V ~ 250V and output can
be low as 26V and 50mA. We have done multiple tests confirm the lock up
is due to the noise. And only the ADC module is locking up. The code
size is too large that it has to be seperated into two FPGA module that
works at 200C. When the code is running at commercial grade there was no
problem.

The asynchronous input will be synchronized. The asynchronized reset is
generated by OPAMP with two different time constant capacitor and
resistor at different voltage rail during circuit startup. Once this
signal is trigger, the reset module in FPGA will extend it for couple ms
to synchronize it.

My question was about the consequence of incorrect reset I wrote.
Usually it is
if(reset)
   A <= 0;
else if ( )
   A<= 1;



If people (especially the moderator) in this forum is that
condescending, I will stop here and go somewhere else for help.

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
Z. W. wrote:
> Please don't judge before standing in my shoes.
Where did I judge?
I asked information you didn't provide in the first post...

> If people (especially the moderator) in this forum is that
> condescending, I will stop here and go somewhere else for help.
If you want want it "soft and warm" you'll have to.
But as I said: answer those questions and think about them. It was my 
leisure time I took to try to help you. I simply could have written 
nothing instead...

> My question was about the consequence of incorrect reset I wrote.
What is "incorrect" with this version?

> We have done multiple tests confirm the lock up is due to the noise.
At what clock speed? How many clocks do you have in your design?
> When the code is running at commercial grade there was no problem.
Then it is some kind of async input. Do you have reasonable timing 
constraints?

> The code size is too large that it has to be seperated into two FPGA
> module
FPGA is full? Did you check for SSO bouncing?

Z. W. wrote:
> if (reset)
>         delay   <= 0;
>   if (inc_delay & !reset)
>     delay  <= delay + 1'b1;
Because there is no "else" you will get a flipflop with sync reset. You 
will have to give more lines of code to get a clear picture try to start 
at keyword always...

: Edited by Moderator

Reply

Entering an e-mail address is optional. If you want to receive reply notifications by e-mail, please log in.

Rules — please read before posting

  • Post long source code as attachment, not in the text
  • Posting advertisements is forbidden.

Formatting options

  • [c]C code[/c]
  • [avrasm]AVR assembler code[/avrasm]
  • [vhdl]VHDL code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]




Bild automatisch verkleinern, falls nötig
Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.