We would like to access the GPIOs on an USRP X310 via a custom OOT RFNoC block.
More specifically, we would like to read one pin on either of the GPIO banks (preferrably one of the Daugherboards) and manipulate the data stream of the RFNoC block with a custom FPGA implementation.
The RFNoC specification introduces the concept of io_ports which allow access to IO ports like Radio RX/TX, dram etc. However, the GPIOs are currently not exposed to that interface by the core. Thus, the RFNoC block can not access the GPIOs.
Additional Information
It seems that there has been an implementation proposed to access the GPIOs via RFNoC quite a while ago for UHD 3:
Following conversations from the mailing list here and also here, it seems the current approach is to manually disconnect the GPIOs in the core FPGA sources and re-route them into the custom RFNoC block manually, by editing files inside this UHD Repository.
Issue Description
We would like to access the GPIOs on an USRP X310 via a custom OOT RFNoC block. More specifically, we would like to read one pin on either of the GPIO banks (preferrably one of the Daugherboards) and manipulate the data stream of the RFNoC block with a custom FPGA implementation.
The RFNoC specification introduces the concept of
io_ports
which allow access to IO ports like Radio RX/TX, dram etc. However, the GPIOs are currently not exposed to that interface by the core. Thus, the RFNoC block can not access the GPIOs.Additional Information
It seems that there has been an implementation proposed to access the GPIOs via RFNoC quite a while ago for UHD 3:
However, it looks like this has not been merged, and is probably not compatible with the new UHD 4. @mbr0wn could you comment on the current status, since you said that "We're working on pulling a change close to this into master."?
Setup Details
Expected Behavior
GPIO interface exposed to RFNoC via the
io_ports
mechanism (RFNoC Specification Sec. 2.3.4), i.e. in https://github.com/EttusResearch/uhd/blob/02558b69f73a03318424a52459c6f87d0fc6e18c/host/include/uhd/rfnoc/core/x310_bsp.yml#L20Such that a custom RFNoC block can access this interface by likewise definition of it's
io_ports
, i.e. in https://github.com/EttusResearch/uhd/blob/02558b69f73a03318424a52459c6f87d0fc6e18c/host/examples/rfnoc-example/blocks/gain.yml#L46and the connection can be established in the image core definition, i.e. in https://github.com/EttusResearch/uhd/blob/02558b69f73a03318424a52459c6f87d0fc6e18c/host/examples/rfnoc-example/icores/x310_rfnoc_image_core.yml#L100
Actual Behaviour
GPIOs are not accessible from an RFNoC block.
Workaround
Following conversations from the mailing list here and also here, it seems the current approach is to manually disconnect the GPIOs in the core FPGA sources and re-route them into the custom RFNoC block manually, by editing files inside this UHD Repository.
Related