Has anyone else come across the issue where adding the ocpi.comp.sdr.dsp.windower_xs_proxy causes an error about the windower_xs output port not not being connected on runtime, despite it working without the proxy?
Error mesage:
Rejected implementation "windower_xs-4/a/windower_xs" in "/run/media/mmcblk0p1/opencpi/artifacts/local.fft_test.test_assm_zed_base.hdl.0.zed.bitz" due to artifact having port "output" connected while application doesn't.
I’d originally tried to do it that way but it didn’t work either, instead getting an error that the proxy doesn’t have ports named input or output.
Looking at the spec and resulting object the windower proxy doesn’t seem to have any external ports, and the windower_xs.comp example app still uses the method I’ve used.
Having added port definitions to the windower_proxy-spec, using the new syntax results in the same error as the old syntax.
Manually connecting the slave component within the windower_xs_proxy lets ocpirun progress past the initial error, but still errors after “Starting proxy workers that are not slaves.” with the following message:
Error Exception: Port "input" of worker "windower_xs_proxy" is not connected
Is there a rule that we’re missing here… like a proxy can only be used with a port that is exposed as a port of an assembly (i.e. not as here where the windower_xs is connected to the fast_fourier_transform_xs inside the assembly)?
The windower and the fft do work with an application connection when both a made external in the assembly.
I did try using worker on the windower_proxy instance to explicitly force use of windower_l_proxy, but that prevented the application from running for some reason that I couldn’t work out.
Edit: The issue that has been struck through above was due to a typo by me. Setting worker on instance to ocpi.comp.sdr.dsp.windower_l_proxy.rcc does work.
Note: In my case, for speed, I added the hdlassembly and application into ocpi.comp.sdr.
Decided to follow up and check exactly how much of that first diff is actually required for the build to work. Turns out, it’s just this:
diff --git a/components/dsp/specs/windower_proxy-spec.xml b/components/dsp/specs/windower_proxy-spec.xml
index 211e1a6..af39d11 100644
--- a/components/dsp/specs/windower_proxy-spec.xml
+++ b/components/dsp/specs/windower_proxy-spec.xml
@@ -21,4 +21,6 @@
description="number of coefficients in the window"/>
<property name="window_type" type="enum" writable="true" enums="hann,blackman_harris,hamming" default="hann"
description="selects the window type"/>
+ <port name="input" producer="false"/>
+ <port name="output" producer="true"/>
</componentspec>
The pre v2.1 slave syntax (which is what this worker uses) still works in the rccworker, put the component does need to expose the ports.
So this is a bug. The CI for ocpi.comp.sdr wouldn’t have noticed this because there is currently no way for the unit test framework to test a proxy. So you’d need to write custom tests using applications and hdlassemblys.
One last thing.
The proxy will use the default build of its slaves if they are instantiated as in the pre v2.1 syntax. So in the case of windower_l, it will use the default max_window_length of 128. If you need more than this, you will need to use the newer <slaves> syntax, and set the property.
I’ve replicated your changes and dropped the protocol from the windower_proxy-spec but it still doesn’t seem to run for me, getting to the same stage as my changes and then ending with a disconnected port.
What OpenCPI version are you using? I was using current develop, which is basically pre release v2.4.7.
Edit: I just copied precisely your hdlassembly and rccworker and my application still runs. I think you’ve found a deployment issue that has been fixed since whichever version you are on.
Okay, now I’m wondering if the deployment algorithm is selecting a different assembly or windower_#_proxy.
Can you make symlinks to all the necessary artifacts in your application directory, and then set OCPI_LIBRARY_PATH to just the application directory? That’ll avoid the whole deployment algorithm, by supplying exactly the required artifacts.
Given that I couldn’t recreate this, it’s either some other file that’s affecting the environment, or a version mismatch / improper rebuild.
I’ll put my example in a project by itself, and try build it from completely clean on v2.4.6.