From: Sean Durkin on
Hi *,

I recently designed a board with a Virtex 5 on it, which I got back from
the assembly line a few days ago. This is not the first board I've
designed, and I've used many FPGA-boards from others before, but I've
never come across this problem:

FPGA configuration via JTAG will only work if the bitfile is generated
with the DONE_cycle=6 option set. If I leave the default setting of 4,
iMPACT will happily download the bitstream and will claim everything was
successful. I can read back the bitstream, read out device ID and
usercode, but the device itself is dead, i.e. none of the IOs are
responding and so on.

With ChipScope you can read out the internal configuration status
register, and as it turns out it seems that using the default bitgen
settings, FPGA configuration stops in cycle 4 when done goes high, but
does not reach the states where the IOs are enabled and so on.

The question is: Why is that? Is it a bug in iMPACT? Does it stop
clocking the configuration logic too soon? If so, why doesn't this
happen on any other boards?

The board itself works flawlessly, I just want to make sure there's no
underlying design issue I'm missing that can cause this.

Does anyone have any insight into this?

cu,
Sean
From: austin on
Sean,

Do you have the "wait for DCM's to lock before releasing DONE" option
set?

Sometimes this gets in the way, as the part is waiting for LOCKED
before it even releases GTS, and GSR. Easier is to force the DCM's to
reset after DONE goes high by driving reset with a startup signal that
you generate.

By moving DONE till after GTS, you are getting the DCM's to start
up ... or that is my best guess.

Austin
From: Sean Durkin on
austin wrote:
> Sean,
>
> Do you have the "wait for DCM's to lock before releasing DONE" option
> set?
Nope. In fact, I'm not even using any DCMs in my test-design. For first
tests in the lab, I'm just driving some LEDs statically. No clock, no reset.

The problem is that in fact "done" IS released, but GTS and GSR aren't
disabled. It looks like configuration stops in the middle of the startup
cycle, i.e. after "DONE", but before GTS and GSR are disabled.

But iMPACT claims everything's fine, and configuration was successful.

> Sometimes this gets in the way, as the part is waiting for LOCKED
> before it even releases GTS, and GSR. Easier is to force the DCM's to
> reset after DONE goes high by driving reset with a startup signal that
> you generate.
Hmm, how can the DCMs even lock if GTS is still active, i.e. clock
inputs are
still disabled?

> By moving DONE till after GTS, you are getting the DCM's to start
> up ... or that is my best guess.
What I don't get is that iMPACT claims it's done. Seems to me that it just
watches for "DONE", and then stops, even though the startup sequence
isn't finished yet. If it were waiting for DCMs to lock or something
else, I'd expect it would get stuck at 99% or stop after a timeout with
a "failed" message or something.

This just had me stuck for 2 days, measuring ripple on my supply,
checking my clocks, checking the layout and so on. I probably would've
sent the board out for x-rays to check for soldering issues next, hadn't
I by chance run across a colleague in the corridor who had the same
problem 5 years ago.

cu,
Sean

--
Replace "MONTH" with the three-letter abbreviation of the current month
and the two-digit code for the current year (simple, eh?).
From: Gabor on
On Feb 5, 3:59 am, Sean Durkin <news_MO...(a)tuxroot.de> wrote:
> austin wrote:
> > Sean,
>
> > Do you have the "wait for DCM's to lock before releasing DONE" option
> > set?
>
> Nope. In fact, I'm not even using any DCMs in my test-design. For first
> tests in the lab, I'm just driving some LEDs statically. No clock, no reset.
>
> The problem is that in fact "done" IS released, but GTS and GSR aren't
> disabled. It looks like configuration stops in the middle of the startup
> cycle, i.e. after "DONE", but before GTS and GSR are disabled.
>
> But iMPACT claims everything's fine, and configuration was successful.
>
> > Sometimes this gets in the way, as the part is waiting for LOCKED
> > before it even releases GTS, and GSR.  Easier is to force the DCM's to
> > reset after DONE goes high by driving reset with a startup signal that
> > you generate.
>
> Hmm, how can the DCMs even lock if GTS is still active, i.e. clock
> inputs are
> still disabled?
>
> > By moving DONE till after GTS, you are getting the DCM's to start
> > up ... or that is my best guess.
>
> What I don't get is that iMPACT claims it's done. Seems to me that it just
> watches for "DONE", and then stops, even though the startup sequence
> isn't finished yet. If it were waiting for DCMs to lock or something
> else, I'd expect it would get stuck at 99% or stop after a timeout with
> a "failed" message or something.
>
> This just had me stuck for 2 days, measuring ripple on my supply,
> checking my clocks, checking the layout and so on. I probably would've
> sent the board out for x-rays to check for soldering issues next, hadn't
> I by chance run across a colleague in the corridor who had the same
> problem 5 years ago.
>
> cu,
> Sean
>
> --
> Replace "MONTH" with the three-letter abbreviation of the current month
> and the two-digit code for the current year (simple, eh?).

I have seen this exact problem with embedded programming. The
processor
would stop CCLK (slave serial in this case, but the same idea) as soon
as it saw DONE, but it would only check for DONE starting after the
last bit of the configuration bitstream. The problem only showed up
for some iterations of the design, because apparently the bitstream
doesn't always end on a byte boundary and the number of extra bits
might or might not be enough to clock the FPGA into the end of the
startup sequence.

Regards,
Gabor
From: John_H on
On Feb 5, 3:59 am, Sean Durkin <news_MO...(a)tuxroot.de> wrote:
>
> This just had me stuck for 2 days, measuring ripple on my supply,
> checking my clocks, checking the layout and so on. I probably would've
> sent the board out for x-rays to check for soldering issues next, hadn't
> I by chance run across a colleague in the corridor who had the same
> problem 5 years ago.

So did you solve your problem then? The title suggests the problem
was found.

A system which stops generating a clock once the done pin goes high
still needs a couple more clocks with the default Done=4 time
position. Changing to Done=6 got rid of the head scratching many,
many years ago.