Hi, Henno, I rebuilt a ROACH2 design using the 100 MHz sys_clk for the qdr_controllers' div_clk input. When running that bitstream, the QDR calibration always failed. Then I tried rebuilding the design using the 143 MHz fabric clock for div_clk. The QDR calibration always failed when running that bitstream as well.
That made me wonder/worry about the relationship between the qdr_controller's clk0 (i.e. the fabric clock) and div_clk (i.e. the IODELAY tap setting clock) inputs. If the QDR calibration fails when running div_clk at or below the clk0 frequency, does that imply that the QDR calibration would fail when running clk0 faster than than the nominal 200 MHz div_clk? To test this, I built a simple test model using the 4 QDRs. This test model was clocked from aux_clk. I specified the aux_clk clock frequency to be 240 MHz and manually modified (i.e. re-hardcoded) the hardcoding in the aux_clk MMCM config so that the MMCM could be driven from 135 MHz to 240 MHz without failing a DRC in the map phase. When running this design, I found that the QDRs calibrated fine from 200 MHz almost all the way to 240 MHz. Around 239 MHz I started to get some calibration errors. By 240 MHz I was getting lots. On the low end, I tried 180 MHz and got total calibration failure. I haven't fully explored things, but I found the preliminary results somewhat discouraging. The low end behavior is contradicted somewhat by the empirical success of others running clk0 more slowly than the 200 MHz div_clk, but maybe there are "good" (aka "lucky") and "bad" (aka "unlucky") clock ratios? Can you think of anything that I might have inadvertently changed or broken? At which fabric clock frequencies have you tested/verified QDR calibration? My guess is that the basic test is done using the 100 MHz sys_clk and/or 200 MHz sys_clk2x. Have you tested at other fabric frequencies? Thanks, Dave On Aug 1, 2013, at 11:10 AM, David MacMahon wrote: > Hi, Henno, > > Thanks for the reply. > > On Aug 1, 2013, at 12:50 AM, Henno Kriel wrote: > >> The IODELAY_CTRL block need to be clocked at 200MHz +/- 10MHz. From the >> datasheet it is not clear whether you can clock the IODELAY block at a >> different frequency - it just states that the average tap delay at 200MHz is >> 78ps. > > Yes, the IODELAYCTRL element must be clocked at 200 MHz +/- 10 MHz, but I > think that's separate and distinct from the IODELAY's clock input C. Page 98 > of "Virtex-6 FPGA SelectIO Resources User Guide UG361 (v1.3) August 16, 2010" > mentions that the IODELAY's clock input C "should be connected to the same > clock in the SelectIO logic resources (when using ISERDES and OSERDES, C is > connected to CLKDIV).". This implies that this clock input C is very > independent from the IODELAYCTRL clock, so there is no FPGA > limitation/constraint that would prevent the use of sys_clk here instead of > sys_clk2x. Whether the qdr_controller will work that way remains to be seen. > >> I'm not sure what the effect would be if you clocked it at 100MHz, but let >> us know what your experience is. > > I'll let you know! > > Thanks again, > Dave >

