Testing procedures
PulsePins was designed from the start to support a high degree of internal self-testing. For this
reason, the FPGA fabric includes a run-length encoder for reading back the generated stream and
comparing it against expected results. These tests are performed with the pptest
tool. A collection of shell scripts can be found in the tests/ subdirectory. To start one sweep
of the test battery, run run_all_tests. If any error is encountered, testing stops immediately.
Successful completion is reported by printing the message SUCCESS.
One can run the tests continuously using run_all_tests_forever to perform intensive
stress testing. Logs are collected under /var/volatile/pulsepins-test-logs for inspection:
report records the pptest version, bitstream timestamp, and successful-run timestamps, while
report.run_N files contain per-run output. Pass -no-report-files to avoid writing the
accumulating report.run_N files during long burn-in runs. The runner exits with failure on the
first failed sweep, including child processes killed by signals.
Wiring up for testing
Recommended color coding for connecting the DE10-Nano to a Saleae logic analyzer is provided in
the comments in the pulsepins.sv design file.
The image below shows a testing jig. It uses custom cables to connect the logic analyzer to both GPIO ports. Eight bits of qout on the Arduino port are connected to LEDs. An oscilloscope is connected to clock signals on the Arduino port. Some wires for hooking up external clock sources are also visible.

Arduino header
Some signals are additionally brought out on the Arduino header for testing purposes.
| Port | Name |
|---|---|
| D[7:0] | streamer_qout[7:0] |
| D8 | streamer_clk (internal or external, as configured) |
| D9 | core_clk (PLL output) |
| D10 | int_clk (PLL output) |
| D11 | streamer_qout[0] |
| D12 | streamer_qout[1] |
Manual testing
Some test procedures require additional external test equipment or external wiring.
Manual board smoke
For a quick hand-run live-board regression check from the repository root, use:
make board-smoke
This is intentionally smaller and faster than run_all_tests: it redeploys the local board artifacts, reloads the FPGA, runs a few finite pptool checks, and exercises both ppscpi and ppwebgui over the network. Override the target board with TARGETHOST=... if needed.
For the host-side precursor check before touching the board, run:
make dev-check
Use the three levels like this:
make dev-check- host-side sanity passmake board-smoke- fast manual live-board regression testrun_all_tests- intensive on-board validation sweep
Random number generator
The built-in random number generator can be tested by running pptest 19. By connecting
an output signal to a spectrum analyzer, one can examine the whiteness of the spectrum.
When Q0 or Q1 is suitable, use the buffered SMA outputs on the PP_PMOD board;
use appropriate external buffering or probing for other outputs.