Increasing sample rate only increases sample length?

Hi there, so I was testing around with different sample rates on both CWPRO and it seems that scope.adc.samples just increases the “length” of captures, not the “quality”? I read in the description of CWPRO that its sample rate is 105MS, but can I also decrease that value or is it stable? Does it make any difference to set a higher length of the captures, since we only attack the first AES round?

What is the bandwidth of the CWPRO? At which MHz does it cycle, so I could replay the same frequency on my own external scope. If I set the bandwidth on my scope to 20MHz, will it “come up” to the speed of the CWPRO/CW308?

Can I use CWPRO on a target with a clock speed of 200Mhz or even 300Mhz?

Sidequestion: is there an easy way to input a trigger signal into the CWPRO? Or is the triggering done only over 20pin?

scope.adc.samples is the number of power samples that are collected; it has nothing to do with the sampling rate. The sampling rate is determined by scope.clock.adc_src.

Unless your external scope allows you to provide a sampling clock (so that it samples synchronously with the target clock), then it will be sampling asynchronously and won’t be able to match the power traces of your CW-pro.

Not really, since the maximum sampling frequency is 105 MHz. You could find a way to divide the target clock in order to obtain a sampling clock that is less than 105 MHz, but then you wouldn’t be sampling on each clock cycle and so those power traces aren’t likely to be very useful. For targets > 105 MHz, in general you need a fast oscilloscope which can sample at many times the target frequency (the larger the factor, the better).

You can use the AUX I/O, or SAD triggering.

It has some external clock provision, although Im not sure on how to use it. Does CW 308 provide some clock signal at a certain pin, or how do I make it gather the traces synchronously?

When I print it, it just says ‘clkgen_x4’. How can I set up the sampling rate to the maximum (100MS)? From my understanding, it just gets the clock (7.5MHz) and creates a sampling rate 4x higher than that (30MS?)

When I try to set scope.clock.adc_rate=90000000.0, I get

AttributeError: can’t set attribute

I tried to trick the CW by setting the source to external clock and then setting the external clock to 100MHz so it samples at 100MS


Although I get an error

ZeroDivisionError: float division by zero

  1. You can find all the CW308 documentation here: CW308 UFO - NewAE Hardware Product Documentation

  2. As per Scope API — ChipWhisperer 5.6.1 documentation, scope.clock.adc_rate is read-only; to set the frequency of clkgen, what you want to use is scope.clock.clkgen_freq.

  3. Setting scope.clock.extclk_freq = 100e6 works for me. Is your CW installation and firmware up-to-date? What’s the output of cw.__version__ and scope.fw_version?

Keep in mind that if you want to use scope.clock.adc_src = "extclk_x1", you need to supply that clock to the CW HS1 pin, and setting scope.clock.extclk_freq = 100e6 doesn’t actually set a clock to 100MHz, it only informs CW that the clock is 100MHz.

I just want to force the CWPRO to use 100MS/s instead of 4xclock (in my case its 30MS then)

Why do you want to do this? As discussed in your other post, synchronous sampling is much better than asynchronous sampling. Staying with x4 (or even x1!) synchronous sampling will give you much better results than asynchronously sampling at 100 MS/s.

If you haven’t read the paper I linked previously, do have a look.

Hello. I know synchronous sampling would be better, but I want to see how the CW deals with asynchronous sampling at 100MS and compare it to my external scopes 100MS. Is there no way to set that up? What is the sampling rate then, when I set the J3 to crystal and use the 7.5MHz one?

On the CW ADC sampling side:

scope.clock.clkgen_freq = <whatever frequency you want to sample at>
scope.clock.adc_src = "clkgen_x1"

On the CW308 side, you can mount a crystal and set the J3 jumper across the top row: