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 >>>>> >>>> >>>> >>> >

