Hacking on PulsePins
There are several useful ways to contribute without needing to understand the whole system at once.
Choose a path
Documentation and examples
Good if you want to help people get started more easily.
Typical work:
- improve explanations
- add examples and recipes
- document real hardware workflows
- improve contributor onboarding
Worked examples are especially encouraged.
Start here:
C++ tools and API
Good if you like systems programming, command-line tools, and structured data representations.
Typical work:
- improve
pptool - add output formatting or better errors
- improve sequence parsing and validation
- extend helper classes for hardware blocks
Start here:
Python bindings
Good if you want a higher-level interface or notebook-friendly workflows.
Typical work:
- improve Python packaging and examples
- add tests
- add binding coverage for more C++ APIs
Start here:
RTL and simulation
Good if you want to work on the hardware architecture.
Typical work:
- improve IP blocks
- add or extend test benches
- improve CDC/reset structure
- document register maps and interfaces
Simulation-only RTL work is useful. Test benches help with both verification and documentation of interfaces and behavior.
Start here:
Without hardware
Useful work is possible without a board.
The most accessible areas are:
- docs
- Python bindings
- parsing and sequence logic in C++
- RTL simulation and test benches
Helpful commands:
make -C docs site
make -C python USE_PREGENERATED=1 build test-host
make -C ip test
With hardware
If you have a DE10-Nano and the PulsePins environment running, you can also work on:
- runtime behavior of CLI tools
- end-to-end streaming verification
- frequency/timestamp/trigger workflows
- board bring-up and shield documentation
- PMOD, clocking, and instrument-integration writeups
See also Getting started with hardware.
What makes a good first contribution?
Small, useful, and verifiable changes are ideal.
Examples:
- clarify a confusing doc page
- add a missing command example
- add a simulation test for a bug fix
- improve an error message
- add a recipe for a real lab workflow
Community-contributed artifacts such as wiring diagrams, timing diagrams, screenshots, scope traces, logic-analyzer captures, and photos of custom hardware setups are also very welcome.
Community direction
Typical application areas where community examples would be appreciated include:
- pulse sequencing for lasers, shutters, and detectors
- synchronized triggering of cameras and instruments
- delay generation for time-resolved measurements
- DDS/DAC control for frequency or amplitude sweeps
GitHub Issues are a good place to share ideas, questions, setup notes, and example writeups.