Hi all,

I'm trying to use QDR on Roach2.  I have a test design where I write to QDR
either in firmware or with katcp, then read it out in the firmware and
check the results with snapshot blocks.  It mostly works, but with some
interesting quirks.

I know that katcp can only write 64 bits of the 72 bit QDR word, so I
changed the bitbasher blocks in qdr_mask.m to move the inaccessible bits
out of the way to the most significant bits.  Now everything seems to work
well, except that in some builds (seems to depend on clock rate?), the
first 32 bits (of the 64 bits I'm writing in a cycle) get swapped with the
last 32 bits sometime between writing the word and reading it back.  And
there is a sometimes a difference in whether I am writing in firmware or by
katcp to whether this swap happens.

Also, when I write with katcp starting at address zero, I find that when
reading out, the write started at what seems to be address 1.  Is the
latency of QDR set to 10 cycles?

I can live with all this, as long as it is repeatable for a given design,
but I thought I'd ask if anyone knows what is causing these quirks.

Also, I understand that we should run a software calibration for qdr, which
seems to be qdr_cal() in qdr.py in the ska-sa:casperfpga repo.  So, I run
this first, which seems to work for my latest compiles, but I haven't
noticed a difference in the results.  What exactly does this calibration
do?

Thanks,
Matt Strader
UC Santa Barbara

Reply via email to