Hi community!
I’m having some problems using GPI/GPO HDL workers. When I run the OAS on my target platform (in this case the ZCU104), I keep getting the following error:
…
OCPI( 8:419.0916): Starting proxy workers that are not slaves.
OCPI( 8:419.0916): Starting proxy workers that are also slaves, but not sources.
OCPI( 8:419.0916): Starting proxy workers that are also slaves and are sources.
OCPI( 8:419.0916): Starting workers that are not proxies and not sources.
OCPI( 8:419.0916): Error Exception: Port “in” of instance ‘a/GPIO_Test’ worker “GPIO_Test” is not connected
OCPI( 8:419.0916): HDL Control Op Avoided worker GPIO_Test:a/GPIO_Test(2) op release(3)
OCPI( 8:419.0917): Worker “release” control operation succeeded, now in state “EXISTS”: worker “GPIO_Test” in container PL:0 from artifact worker GPIO_Testhdl/a/GPIO_Test
Exiting for exception: Port “in” of instance ‘a/GPIO_Test’ worker “GPIO_Test” is not connected
Where “GPIO_Test” is an HDL worker that interfaces to gpi.vhd and gpo.vhd HDL devices.
In my gpi.xml file (the OWD), I’ve declared a single signal input:
And the output of this device worker is a stream interface of 32 bits.
As far as I have read, “gpi_pin” is an internal signal that points to the GPIO pin of the FPGA.
Thus, my HDL container looks like this:
<HdlContainer Config="base" Platform="zcu104" constraints="zcu104.xdc">
<Connection external='in_to_asm_button_path' Port='out' Device='gpi'/>
<Connection external='out_from_asm_led_path' Port='in' Device='gpo'/>
</HdlContainer>
Where “in_to_asm_button_path” means “the button path into the assembly”, and “out_from_asm_led_path” means “the LED path from the assembly”
And my HDL assembly looks like this:
<HdlAssembly>
<Instance Worker="GPIO_Test"/>
<!-- OCPI HDL to User HDL -->
<Connection Name="in_to_asm_button_path" External="consumer">
<Port Instance="GPIO_Test" Name="in"/>
</Connection>
<Connection Name="out_from_asm_led_path" External="producer">
<Port Instance="GPIO_Test" Name="out"/>
</Connection>
</HdlAssembly>
Finally, my component spec for GPI is:
<ComponentSpec>
<Port Name="out" Protocol="gpio_protocol" Producer="true"/>
</ComponentSpec>
And my component spec for GPIO_Test (the HDL worker) is:
<ComponentSpec>
<Port Name="in" Producer="false" Protocol="gpio_protocol"/>
<Port Name="out" Producer="true" Protocol="gpio_protocol"/>
</ComponentSpec>
So basically, I can’t see where else I need to/can interface the output stream interface from GPI to GPIO_Test.
Does anyone have any example code that connects a push button to an HDL worker via the HDL assembly + container? I can’t find any examples online or in the builds, and I feel like I’m going around in circles
I have suspicion the problem lies in the HDL assembly when connecting HDL devices to HDL workers, but an example would be very useful to help see how it’s wrong.
Thanks in advance!