Skip to content

C4: system context

This is the C4 Level 1 view. It shows who uses openFPGALoader and which external systems it controls; implementation details belong in the container and component views.

flowchart LR
    operator[FPGA developer or operator] --> loader[openFPGALoader]
    ci[CI or release engineer] --> loader
    loader --> probe[USB, HID, GPIO, DFU, XVC, or remote probe]
    probe --> board[FPGA board or target chain]
    board --> flash[Configuration flash]
    xvc[XVC client or lab automation] --> loader

Actors and external systems

Element Type Responsibility
FPGA developer/operator Person Chooses board/cable, supplies a bitstream, and interprets diagnostics.
CI/release engineer Person/system actor Builds, packages, smoke-tests, and publishes platform artifacts.
XVC client or lab automation External system Sends remote JTAG requests when the XVC server mode is enabled.
openFPGALoader Software system Discovers hardware, parses configuration data, and performs JTAG/SPI/DFU operations.
Probe/cable External hardware/system Converts host operations into electrical JTAG, SPI, DFU, GPIO, or remote traffic.
FPGA board/target chain External hardware Contains FPGA/CPLD devices, optional bridge devices, and a configuration path.
Configuration flash External hardware Stores persistent FPGA configuration when flash programming is requested.

System boundary

Inside the system boundary are the CLI, protocol engines, cable adapters, vendor drivers, parsers, static catalogs, and installed transport assets. The operating system libraries and physical probe are outside the application boundary even though CMake and the adapters depend on them.

Principal scenarios

Program SRAM over JTAG

The operator selects a board or cable, the tool detects the chain, maps the IDCODE to a vendor driver, parses the bitstream, and sends device-specific JTAG scans to volatile FPGA configuration memory.

Program persistent flash

The same discovery and vendor selection precede a flash algorithm that handles identification, protection, erase, write, and verify. The target may be an internal or external flash path depending on the device.

Use a non-JTAG path

Board metadata can select direct SPI or DFU. Those flows share CLI intent and file parsing but use a different transport contract and do not require a JTAG chain scan.

Run remotely

An XVC client/server arrangement transports JTAG requests over a network while the normal JTAG engine remains responsible for TAP and scan semantics.