From 8df2ffb9b5552bc6bce93e554c206edc570ba4a2 Mon Sep 17 00:00:00 2001 From: Emilio Perez Juarez Date: Mon, 16 Mar 2026 13:11:45 +0000 Subject: [PATCH] Add finedelay test procedure This will be required for testing on the first prototype of PandABox2 --- docs/how-to/finedelay-test.rst | 30 +++++++++++++++++++++ docs/images/finedelay_test_layout.png | Bin 0 -> 25759 bytes scripts/finedelay-sweep.py | 37 ++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 docs/how-to/finedelay-test.rst create mode 100644 docs/images/finedelay_test_layout.png create mode 100755 scripts/finedelay-sweep.py diff --git a/docs/how-to/finedelay-test.rst b/docs/how-to/finedelay-test.rst new file mode 100644 index 0000000..d6b44b6 --- /dev/null +++ b/docs/how-to/finedelay-test.rst @@ -0,0 +1,30 @@ +Test the finedelay +================== + +1. Plug two LVDSOUT pins to an oscilloscope and use rising edge of LVDSOUT1 + as trigger. + +2. Enable CLOCK1, set its period to the minimum(0.016us) and use it as input for + LVDSOUT1 and LVDSOUT2. + +.. image:: ../images/finedelay_test_layout.png + +3. Set oct delay and fine delay to 0 in both LVDSOUTs. + +4. For LVDSOUT2, set oct delay from 1 to 7 and verify in the oscilloscope that + you get delays from 1ns to 7ns respectively, then set oct delay back to 0. + +5. Read initial one ns of LVDSOUT2 and use it as a reference to test fine delay. + + 5.1 Set fine delay to half of initial one ns and verify in the oscilloscope + that the delay is around 500ps. + + 5.2 Set fine delay to a quarter of initial one ns and verify in the + oscilloscope that the delay is around 250ps. + + 5.3 .... Repeat halving until you reach the limit of your oscilloscope ... + +6. Run a script_ that sweeps all fine delay values for each oct delay value and + observe how LVDSOUT2 gets delayed very smoothly. + +.. _script: https://raw.githubusercontent.com/PandABlocks/PandABlocks.github.io/refs/heads/main/scripts/finedelay-sweep.py diff --git a/docs/images/finedelay_test_layout.png b/docs/images/finedelay_test_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..e151b3a8dd8176997048c9498581162469f2cae2 GIT binary patch literal 25759 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