Say I am debugging an #ethernet project on the #ice40 #fpga of pico-ice board. I want to know the contents of some registers down in my design (which destination MAC address my #hardware tried to transmit). I don't want to use manufacturer specific ILAs and don't want to hand route a bunch of debug signals to my top level for external #debug equipment I don't have.
In PipelineC just assign to a globally visible #UART debug probe wire:
https://github.com/JulianKemmerer/PipelineC/wiki/Example:-Debug-Probes
From there the bytes of probe data are shipped over UART to a host PC. A simple C program reading UART bytes displays your data:
How do you configure this? You define a type and a method for printing the data to console. The struct type is shared between software C and hardware PipelineC. Upon receiving bytes for your probe they are converted to your struct type and printed as specified.
How does the hardware work? The probes can be in any clock domain and cdc over to the UART clock is handled for you with small FIFOs. Upon receiving the read enable pulse from the control program on the host PC, hardware responds over UART with the sample bytes from your debug probe. This hardware is all included for you as a pipelinec library.
@pipelinec oh that seems super useful!