From: Patrick Maupin on
On Mar 31, 12:53 pm, Bill Valores <bill.valo...(a)gmail.com> wrote:

> I wrote a small Verilog module (the "state machine" below), which
> sends shift commands in order to reach a certain position, which I set
> through some register interface.

It sounds very much like what I built.

> This random behavior appears suspiciously similar to reports I've read
> from people who said that the PSDONE came much later than expected.
> Which makes me think (or hope?) that their problem was in their own
> logic, which accidentally pushed the phase shifter beyond its limit.

I didn't try to stress it to breaking, but I never saw any problems,
and we did lots of lab work over a couple of months.

> In short, all this starts to make sense to me. This looks like "follow
> the spec and everything will be all right". The bottom line is that
> the datasheet was right, and the user guide was confusing.

I think the user guide may have too much leftover S3 DCM info (which
is way different than S3E DCM).

> Thanks again for your answers. You really were helpful.

Glad to hear it! Thanks for letting me know you're up and running.

Regards,
Pat
From: John_H on
On Mar 31, 1:53 pm, Bill Valores <bill.valo...(a)gmail.com> wrote:
>
> The most interesting thing was that the state machine was
> waiting for PSDONE. I didn't look deeply into how much time each PSEN-
> PSDONE cycle took, but it appeared long, random, and sometimes
> completely stuck. In one occasion, the state machine waited for quite
> a while, and then suddenly the "waiting" line went low again. On the
> scope I saw a 2.5 MHz clock on the DCM's output (the original
> frequency divided by two).
>
> This random behavior appears suspiciously similar to reports I've read
> from people who said that the PSDONE came much later than expected.
> Which makes me think (or hope?) that their problem was in their own
> logic, which accidentally pushed the phase shifter beyond its limit.

You stated earlier that "I understand that clock jitter has been a
primary suspect where problems have arisen."

That jolted a couple brain cells loose. Jitter on the 50 MHz
reference clock was the problem in our system prototype across the
country (a problem we never had locally with a different front-end
transmitter). When the problem was isolated further down, the clock
quality was identified as a strong issue. A couple changes were made
on the board providing the 50 MHz reference clock (and three
communications links tied to it) to make it a much cleaner version of
its earlier self and the problems with PSDONE coming in late (or
never) went away. I'm certain the PSDONE detection logic was fine (it
was even reworked a few times to try to figure things out) and the
limits of the phase shift were not at issue.

When I did have the poor quality clock and the PSDONE response was
persnickety, I set up a BlockRAM counter to enumerate the number of
instances of the PSDONE taking N cycles to report, N being from 1 to
512. I recall the trend being logarithmic. When I plotted the data I
used a log scale to deal with the wide range of counts. The plot was
roughly a staircase with a linear (on the log graph) trend. Several
delay times would be approximately the same count of instances, then
markedly fewer for several more similar counts, and so on down the
logarithmic staircase. With the jitter problem fixed, the response
from the PSDONE was fixed as well.

Happy shifting!
From: Patrick Maupin on
On Mar 31, 2:13 pm, John_H <newsgr...(a)johnhandwork.com> wrote:
> On Mar 31, 1:53 pm, Bill Valores <bill.valo...(a)gmail.com> wrote:
>
>
>
> > The most interesting thing was that the state machine was
> > waiting for PSDONE. I didn't look deeply into how much time each PSEN-
> > PSDONE cycle took, but it appeared long, random, and sometimes
> > completely stuck. In one occasion, the state machine waited for quite
> > a while, and then suddenly the "waiting" line went low again. On the
> > scope I saw a 2.5 MHz clock on the DCM's output (the original
> > frequency divided by two).
>
> > This random behavior appears suspiciously similar to reports I've read
> > from people who said that the PSDONE came much later than expected.
> > Which makes me think (or hope?) that their problem was in their own
> > logic, which accidentally pushed the phase shifter beyond its limit.
>
> You stated earlier that "I understand that clock jitter has been a
> primary suspect where problems have arisen."
>
> That jolted a couple brain cells loose.  Jitter on the 50 MHz
> reference clock was the problem in our system prototype across the
> country (a problem we never had locally with a different front-end
> transmitter).  When the problem was isolated further down, the clock
> quality was identified as a strong issue.  A couple changes were made
> on the board providing the 50 MHz reference clock (and three
> communications links tied to it) to make it a much cleaner version of
> its earlier self and the problems with PSDONE coming in late (or
> never) went away.  I'm certain the PSDONE detection logic was fine (it
> was even reworked a few times to try to figure things out) and the
> limits of the phase shift were not at issue.
>
> When I did have the poor quality clock and the PSDONE response was
> persnickety, I set up a BlockRAM counter to enumerate the number of
> instances of the PSDONE taking N cycles to report, N being from 1 to
> 512.  I recall the trend being logarithmic.  When I plotted the data I
> used a log scale to deal with the wide range of counts.  The plot was
> roughly a staircase with a linear (on the log graph) trend.  Several
> delay times would be approximately the same count of instances, then
> markedly fewer for several more similar counts, and so on down the
> logarithmic staircase.  With the jitter problem fixed, the response
> from the PSDONE was fixed as well.
>
> Happy shifting!

yeah, whether you're using dynamic phase shift or not, experience has
shown me that Xilinx DLLs and DCMs can be exceptionally unhappy if you
are not giving them a clean clock. If the 1ns max jitter figure
bandied about in another thread is any indication, this may still be
true even with the new PLL-based architecture. For clocks of unknown
provenance, I usually use a PLL in front of the FPGA to clean the
clock, and use some separate FPGA logic on a local oscillator to
monitor the DCM locked indicator and reset the DCM if there are
issues. In the past, I have used Cypress RoboClocks and InstaClocks
for pre-FPGA jitter cleanup. On my last design, I actually used one
of my own company's (different division's) parts (the ZL30132) which
was, admittedly, overkill for what I needed, but was effectively free
for me (and it seems to work quite well, to boot).

Regards,
Pat
From: -jg on
On Apr 1, 5:53 am, Bill Valores <bill.valo...(a)gmail.com> wrote:
> So I fed the DCM with a 5 MHz clock (minimal frequency) and started
> playing around. Things went very smooth as long as I remained within
> the per-spec ±1970 steps boundary. In my case I got around 22.75ps per
> step (measured by jumping 1000 steps or so) consistently. I thought
> this number was absurd, but it turned out to be true: The chip allows
> ±39.4 ns of delay. That's a useful rail of nearly 80 ns. Pretty
> impressive.
>
> But I didn't stop there. I went for larger shifts until things started
> to break. ±4000 was OK. When I tried 4500 in either direction, hell
> broke lose. The most interesting thing was that the state machine was
> waiting for PSDONE.

Going outside the limits can be very useful.
* It confirms the limit is correctly understood
* it gives useful insight, into failure modes, and thus
a place to look, should issues appear later.
* Knowing what something cannot do, often gives more
insight, than knowing what it can do :)

Vendors should do more of this, and providing a piece of test/example/
exercise code like you have done, is something they should all be
encouraged to do.

-jg
From: Patrick Maupin on
On Mar 31, 4:19 pm, -jg <jim.granvi...(a)gmail.com> wrote:

> Going outside the limits can be very useful.
> * It confirms the limit is correctly understood
> * it gives useful insight, into failure modes, and thus
>   a place to look, should issues appear later.
> * Knowing what something cannot do, often gives more
> insight, than knowing what it can do :)

Absolutely agreed; "play time" is when most learning occurs.

> Vendors should do more of this, and providing a piece of test/example/
> exercise code like you have done, is something they should all be
> encouraged to do.

Xilinx sometimes is reluctant to disclose how or why things work, so
good luck with your campaign of getting them to disclose how or why
things DON'T work. A big company finds it easy to find the downside
in a disclosure ("Altera will figure out our weaknesses and explain
them to customers; patent trolls will notice that we are infringing
their putative IP.") often without noticing the simple upside that an
informed customer is a happy customer.

Pat