Matt,

No good ones --

Are the bits that fail hardware / boffile specific?
Are all the timing constraints correctly set up?
Are all the IODELAY blocks suitably configured with resets, etc?

That's all I got :(

The ADC5g does 1.25Gb/s per ZDOK pair perfectly happily (I have 18 boards
running them, and I don't remember the last time they failed to link up
properly), so I don't think there's any fundamental problem from the ROACH2
side.

Jack


On Thu, 28 Apr 2016 at 20:46 Matt Strader <[email protected]> wrote:

> Thanks, Jack.
>
> I added IODELAYs to all my data bits.  I used my ramp input to check for
> glitches in all the bits for each step in IODELAY value.  Also, I found
> that having the mmcm in low bandwidth mode is indeed a bad idea, and
> switched to high bandwidth mode and slightly slower clocks.
>
> I find a reasonable eye to calibrate with, except there are 4 bits that
> glitch no matter what value I use for their IODELAY.  I lowered the clock
> rates quite a bit more, with the same result.
>
> Any more recommendations?
>
> Thanks,
> Matt
>
> P.S. Here's what my eyes look like for 475 MHz DDR (1 indicates a bit
> glitches for the delay value).  Notice that data2 bits 1,5,8, and 9 are
> ones all the way down the column.
> dly : data0_bits   data1_bits   data2_bits   data3_bits
>   0 : 101100000000 000000000000 101100100010 110110001000
>   1 : 001100000000 000000000000 101110100010 110010001000
>   2 : 001100000000 000000000000 101110100010 110000001000
>   3 : 000100000100 000000000100 111110100010 110000001000
>   4 : 000000000100 000000000100 111111100010 110000000000
>   5 : 000001001110 000011001100 111111101010 110001100000
>   6 : 000001011110 000011101100 111111111110 110001110010
>   7 : 000001011110 000011111110 111111111111 110001110111
>   8 : 010011111110 010011111111 111111111111 110001110111
>   9 : 010011111111 010111111111 001100100010 111001110111
>  10 : 010011111111 101100000000 101100100010 001110011101
>  11 : 010011111111 101000000000 101100100010 011110001000
>  12 : 110011111111 001000000000 101100100010 010110001000
>  13 : 101100000000 000000000000 101100100010 110110001000
>  14 : 101100000000 000000000000 101100100010 110110001000
>  15 : 001100000000 000000000000 101110100010 110000001000
>  16 : 001100000100 000000000000 101110100010 110000001000
>  17 : 000100000100 000000000100 111110100010 110000000000
>  18 : 000001001110 000001000100 111111100010 110000000000
>  19 : 000001011110 000001001100 111111111010 110001100010
>  20 : 000011011110 000011111100 111111111110 110001110010
>  21 : 010011111110 000011111111 111111111111 110001110111
>  22 : 010011111111 000011111111 111111111111 110001110111
>  23 : 111110110011 010111111111 101100100011 111001110111
>  24 : 111100100001 101100000000 101100100010 111111111111
>  25 : 101100100001 101000000000 101100100010 011110001000
>  26 : 101100000001 001000000000 101100100010 110110001000
>  27 : 101100000000 000000000000 101100100010 110110001000
>  28 : 001100000000 000000000000 101110100010 110110001000
>  29 : 001100000100 000000000000 101110100010 110110001000
>  30 : 000100000100 000000000100 111110100010 110000000000
>  31 : 000000000100 000000000100 111111100010 110000000000
>
>
>
> On Tue, Apr 26, 2016 at 4:55 PM, Jack Hickish <[email protected]>
> wrote:
>
>> Hi Matt,
>>
>> The usual way to deal with this is IODELAY blocks as you suggest. The
>> adc5g core has an example of the correct instantiation of the IODELAY
>> primitive and some controller code to talk to them. IIRC, the delay goes
>> straight after the input buffer, prior to the SERDES (or presumably
>> immediately before the output buffers for the DAC).
>>
>> Cheers
>> Jack
>>
>>
>> On Tue, 26 Apr 2016 at 16:02 Matt Strader <[email protected]>
>> wrote:
>>
>>> Hello again,
>>>
>>> Now that my clocks are working, I've run into the next problem in my
>>> yellow block.  I have the adc/dac board sending a ramp, which I see on the
>>> roach2 side, but there are periodic glitches (see attached).  ​
>>>  zdok_ctr_ramp2.tiff
>>> <https://drive.google.com/file/d/0B6vM_l0m98k9MmQtVEp5SS1SeWs/view?usp=drive_web>
>>>
>>> The data is coming over four 14-bit buses aligned to a 500 MHz clock
>>> from the adc/dac board, at DDR.  The glitches happen when the value coming
>>> through is a round number in binary, i.e. whenever several bits flip at
>>> once.  It seems that at each glitch, one or more bits fail to flip when
>>> they should, though they usually arrive at the right value one cycle later.
>>>
>>> I saw in the mailing list archive that people have had problems
>>> <https://casper.berkeley.edu/wiki/ADC16x250-8#ADC16_Sample_Rate_vs_Virtex-6_MMCM_Limitations>
>>> with glitches when using MMCMs in LOW bandwidth mode.  I've tried both LOW
>>> and HIGH modes and see the same thing.  (For the HIGH mode I slowed my
>>> clock from 500 MHz to 350 MHz.  To use exactly 500 MHz as I want, I'm stuck
>>> with LOW mode.)
>>>
>>> I'm guessing that IODELAYs are the solution to this?  Do I put the
>>> delays at the inputs of my OSERDESs?  Any recommendations?
>>>
>>> Thanks,
>>> Matt​
>>>
>>> On Wed, Apr 20, 2016 at 6:47 PM, Matt Strader <[email protected]
>>> > wrote:
>>>
>>>> I found my mistake.  I did not have feedback input and output ports of
>>>> the mmcm (CLKFBOUT,CLKFBIN) connected correctly.
>>>>
>>>> Matt
>>>>
>>>> On Tue, Apr 19, 2016 at 12:10 PM, Matt Strader <
>>>> [email protected]> wrote:
>>>>
>>>>> Hello Casperites,
>>>>>
>>>>> I am working on a roach2 yellow block for a new 12bit,  2.0 Gsps
>>>>> ADC/DAC board designed at Fermilab.  I am having trouble with clocks.  The
>>>>> ADC/DAC board is providing me with a 500 MHz clock over a particular zdok
>>>>> pair.  My yellow block takes this into an mmcm and divides it down to 250
>>>>> MHz to be used as the fabric clock.
>>>>>
>>>>> When testing it, I set the adc/dac clock running, then program the
>>>>> roach2.  When I call KatcpFpga.estimate_fpga_clock() it returns 167 MHz
>>>>> instead of the expected 250 MHz.
>>>>>
>>>>> I have attached what I think are the relevant snippets from my yellow
>>>>> block.  The rest of it can be found at
>>>>> https://github.com/mstrader/mlib_devel
>>>>> Any ideas what could be the problem?
>>>>>
>>>>> Thanks,
>>>>> Matt Strader
>>>>>
>>>>
>>>>
>>>
>

Reply via email to