How to use an external clock?

How to use an external clock?#

In all of our notebooks (except the CW305 notebooks), the ChipWhisperer capture device generates the target clock.

All ChipWhisperers are able to instead use an externally-generated clock (e.g. a target-generated clock) to derive their ADC sampling clocks. Exactly how this is done depends on the device.

If your target is running our SimpleSerial protocol, keep in mind the relationship between clock rates and baud rate, which is explained here.

For all ChipWhisperers except the Nano, sometimes changing the ADC clock source causes the ADC clock to become unlocked (i.e. scope.clock.adc_locked is False); calling scope.clock.reset_adc() can fix this.

For the ChipWhisperer Nano, there is no lock indicator; call scope.reset_clock_phase().

ChipWhisperer Nano#

Provide a clock on the HS1 port of the 20-pin header and set scope.adc.clk_src = 'ext'.

ChipWhisperer Lite and Pro#

Provide a clock on the HS1 port of the 20-pin header. Set scope.clock.adc_src to one of the following options:

  • 'extclk_dir': the HS1 clock is used directly as the ADC sampling clock.

  • 'extclk_x1': the HS1 clock is routed to an FPGA DCM (PLL), its frequency is left unchanged, and the output of that PLL is used as the ADC sampling clock.

  • 'extclk_x4': the HS1 clock is routed to an FPGA DCM (PLL), which multiplies it by 4 to generate the ADC sampling clock.

ChipWhisperer Husky#

Provide a clock on the HS1 port of the 20-pin header (set scope.clock.clkgen_src = 'extclk'), or on the AUX in/out MCX (set scope.clock.clkgen_src = 'extclk_aux_io' and scope.io.aux_io_mcx = 'high_z')

Set scope.clock.clkgen_freq to the frequency of the external clock.

Set scope.clock.adc_mul as desired.