S
Steve Ravet
Guest
rickman wrote:
constraints from the UCF file were commented out as part of an unrelated experiment. They were not
put back and the result was that after every map run those top level nets moved to different pins,
depending on the placement of the related logic. I was new to FPGA at the time and also blamed
timing problems, and it took quite a while to track down the problem. So there is more to it than
just functional simulation and passing timing constraints.
Regarding timing constraints, don't rely on the timing score reported by par. A design that gets a
timing score of 0 in par can have a negative score from the timing analyzer. I think this is because
par doesn't look at unconstrained paths. Run a timing report, and be sure to run it with -u (I
believe) to report unconstrained paths. Your goal should be no unconstrained paths, although that
can be hard on more complicated designs.
Using FPGA editor you can insert probes that are routed around your existing logic. The online help
has specific directions for doing this. Bring out some internal nets and look at them on the scope.
This is my first choice method of debug, after functional simulation, because the turn time is much
faster than rerunning map/par.
--steve
Good advice from Rick. As another answer to your question #1, I had a design where some of the LOCOn Feb 2, 3:56 am, Emanuele Carraro
emanuele83katam...@googlemail.com> wrote:
1_ since I have constrained the clock period and offset in and out,
with only one clock domain in the entire FPGA( in other words
everything is clocked by the same source) and all the constraints
are met must I trust the clock report? Even if the design does not
behave as expected? I mean, with the same code and constraints, only
changing a synthesis parameters (from AUTO to one-hot encoding, for
example) the constraints are always met and the timing report does
not show any setup/hold violation, how is it possible that the FPGA
behaves differently, if not for a synthesis error/mistake or an HW
failure?
You are barking up the wrong tree. Clearly you have not done much HDL
debug. The tools are the very last thing you should suspect. In my
15 odd years of programming in HDL I have only once seen a problem
with the tools relating to timing and that we very clearly a tool
problem once we tested on the hardware.
You need to pay attention to what people are telling you instead of
focusing on the idea that the problem has to have something to do with
timing constraints.
I have already suggested that you need to look at external interfaces
to see if they could be causing a problem. If you have asynchronous
signals entering your design and they are not properly handled, they
can cause intermittent and unpredictable problems. You could easily
have problems with the hardware design. Ground bounce is always a
concern when you have many outputs switching at the same time.
I suggest that you simplify your code to isolate the problem. Cut out
sections of logic until the design pieces work reliably. If that is
not practical, write some new code to test the various external
interfaces. Do something other than just testing with your entire
body of code. Or insert debug signals that come out to pins you can
probe. This is the tried and true method in place of chipscope.
Obviously what you are doing now is not getting you very far. You
need to change tactics. You need to take some good advice.
Rick
constraints from the UCF file were commented out as part of an unrelated experiment. They were not
put back and the result was that after every map run those top level nets moved to different pins,
depending on the placement of the related logic. I was new to FPGA at the time and also blamed
timing problems, and it took quite a while to track down the problem. So there is more to it than
just functional simulation and passing timing constraints.
Regarding timing constraints, don't rely on the timing score reported by par. A design that gets a
timing score of 0 in par can have a negative score from the timing analyzer. I think this is because
par doesn't look at unconstrained paths. Run a timing report, and be sure to run it with -u (I
believe) to report unconstrained paths. Your goal should be no unconstrained paths, although that
can be hard on more complicated designs.
Using FPGA editor you can insert probes that are routed around your existing logic. The online help
has specific directions for doing this. Bring out some internal nets and look at them on the scope.
This is my first choice method of debug, after functional simulation, because the turn time is much
faster than rerunning map/par.
--steve