Hi Rurik,

 

thanks a lot, this makes perfect sense.

In the first instance I used IODELAY calibration and afterwards MMCM 
calibration.

I also experimented with moving the clock edge within the window. It appears as

if moving the edge to a later time (3/4 instead of 1/2  of the window) improves

signal quality.

 

Cheers

Guenter

 

From: Primiani, Rurik [mailto:rprimi...@cfa.harvard.edu] 
Sent: Freitag, 26. August 2016 13:01
To: Guenter Knittel
Cc: Jack Hickish; casper list
Subject: RE: [casper] Glitches in ADC-data

 

Guenter,

At slower speeds it may be necessary to do both or just the MMCM cal since the 
IODELAYs may not provide the full range needed to sample the data window. You 
may need to experiment with this.

There is no BITSLIP implemented. The ADC words are presented in parallel not in 
serial. Thus the deserialization is really more of a demultiplexing. The SERDES 
are synced with a single reset pulse. This is described in the ADC data sheet 
which has timing diagrams.

If you want this level of understanding you can look at the VHDL code yourself 
in mlib_devel/xps_base/XPS_ROACH2_base/pcores/adc5g_dmux1_[...]. Not very well 
documented but some attempts were made.

Rurik

 

On Aug 26, 2016 6:05 AM, "Guenter Knittel" <gknit...@mpifr-bonn.mpg.de> wrote:

Hi Jack,

 

thanks for explaining. I got your code running and I’m in the process of

testing.

Allow me two more questions:

- there is no need to do both calibrate_all_delays AND calibrate_mmcm_phase, or 
is it?

- Who is actually taking care of word alignment at the SERDES (issuing 
Bitslip-commands

  as needed)?

 

Thanks a lot

Guenter

 

 

From: Jack Hickish [mailto:jackhick...@gmail.com] 
Sent: Donnerstag, 25. August 2016 17:05
To: Guenter Knittel; Primiani, Rurik
Cc: casper list
Subject: Re: [casper] Glitches in ADC-data

 

Hi Guenter,

 

The adc calibration code I use is at
https://github.com/jack-h/adc_tests/blob/disentangle/adc5g

The disentangle branch should work with normal casper snapshot blocks (this is 
probably the branch you want). I used the code for a 5GHz clock, be warned that 
it may or may not behave effectively at lower rates. 

Calibration commands are as-per the github readme file, though you'll need to 
do a listdev to figure out what the appropriate snapshot names are, and replace 
"scope_raw_0_snap" as approriate in the code snippet below. --

#######
from adc5g import *
set_test_mode(roach, 0)
set_test_mode(roach, 1)
sync_adc(roach)

# Calibrate IO delays per bit (necessary at 5GSps)
delays0 = calibrate_all_delays(roach, 0, ['scope_raw_0_snap',])
delays1 = calibrate_all_delays(roach, 1, ['scope_raw_1_snap',]) 

# Sweep MMCM phase with the same settings for all bits (probably adequate for 
slower speeds, I think this is all most of the ADC5G users do)
#opt0, glitches0 = calibrate_mmcm_phase(roach, 0, ['scope_raw_0_snap',])
#opt1, glitches1 = calibrate_mmcm_phase(roach, 1, ['scope_raw_1_snap',]) 

unset_test_mode(roach, 0)
unset_test_mode(roach, 1)


#######

Cheers,

 

Jack

 

On Thu, 25 Aug 2016, 06:44 Guenter Knittel, <gknit...@mpifr-bonn.mpg.de> wrote:

Hi Rurik,

 

thanks, that was the kind of background information that I needed.

I’ve got the code working, on to more testing…

 

Cheers

Guenter

 

 

From: Primiani, Rurik [mailto:rprimi...@cfa.harvard.edu] 
Sent: Donnerstag, 25. August 2016 14:52


To: Guenter Knittel
Cc: casper list
Subject: Re: [casper] Glitches in ADC-data

 

Hi Guenter,

You do not need any additional interface units. All you should need is the code.

The error implies that it cannot write to the "s_ctrl" register. Does this 
register exist in your design? I suspect this is part of a snapshot block, 
called "s", and Jack's code is attempting to grab ADC data from the snapshot so 
it can measure glitches in the test vector data. Presumably you have a proper 
snapshot attached to the ADC in the Simulink design since you mentioned you 
were able to successfully calibrate the MMCM phase. You will need to either 
pass that snapshot name to Jack's code or edit the code to have the correct 
name.

Hope this helps,
Rurik

 

 

On Thu, Aug 25, 2016 at 7:57 AM, Guenter Knittel <gknit...@mpifr-bonn.mpg.de> 
wrote:

Hi Rurik,

 

thanks for the pointer. I have found Jack’s code and tried to use it. However, 
I get

the following error:

…  katcp_wrapper.py", line 196, in _request

    % (request.name, request, reply))

RuntimeError: Request write failed.

  Request: ?write s_ctrl 0 \0\0\0[1]

  Reply: !write fail.

 

So I guess I need some more provisions for using this method. I checked using 
planAhead

if there are IODELAYs in the FPGA design, and indeed there are, but maybe I 
need some

additional interface units?

 

Thanks

Guenter

 

 

From: Primiani, Rurik [mailto:rprimi...@cfa.harvard.edu] 
Sent: Mittwoch, 24. August 2016 15:05
To: Guenter Knittel
Cc: casper list
Subject: Re: [casper] Glitches in ADC-data

 

Hi Guenter,

At the SMA we also see glitches sampling at ~4600 MHz. Interestingly we do not 
see any glitches at all when switched to test ramp mode even when looking at 
very long snapshots. For us running a second MMCM calibration after both the 
ADC and FPGA chips get a chance to warm up seems to get rid of most of them 
(though not all). Note: if you do choose to do a second MMCM cal. do not issue 
a sync to the ZDOK 0 ADC as this will disturb your FPGA clock.

As you rightly point out it would be better to adjust delay lines per data bit. 
In fact there are IODELAYs on all data bits and these can be controlled over 
the OPB. However, Python code for this isn't currently in the default adc5g 
library. 

Jack Hickish has written some code to adjust those delay lines which I'm sure 
he'd be happy to share with you. However, this has been discussed (a few) times 
before on this mailing list so you might be able to find a link in the archives.

Best,
Rurik

 

On Aug 24, 2016 8:44 AM, "Guenter Knittel" <gknit...@mpifr-bonn.mpg.de> wrote:

Hi all,

we have a number of Roach2 units each with 2 ASIAA 5Gsps ADCs. We are operating
the ADCs at 4GS/s (external sample clock is 2GHz), in single-channel mode.
The FPGA gateware meets timing for 250MHz.
Unfortunately I'm observing glitches on the data from the ADCs. Of course I'm 
using
MMCM and OGP calibration, but the glitches won't go away.
Most often they occur on the ADC which is connected to ZDOK1.
I saw in the Python scripts that apparently all SERDES capture the signals as 
they
arrive to a common clock (from the MMCM). So, are there no IODELAYs used to
center the signals individually? Could this be the root of my problem?

Thanks
Gunter
MPIfR Bonn




 

 

Reply via email to