Error after first successful run of OpenCL application: acl_hal_mmd.c:1393:assert failure: Failed to initialize kernel interface
I implemented an example application followed the approach that is described in this publication which is to modify the board_spec.xml file to make some external FPGA I/O ports available to the OpenCL kernel via a channel.
First of all it works like a charm, however just for a first run. After having reconfigured the FPGA with the configuration, I'm unable to re-run it or to even run aocl diagnose. The error I receive is:
FAILED to read auto-discovery string at byte 0. Full auto-discovery string value is
acl_hal_mmd.c:1393:assert failure: Failed to initialize kernel interfaceI guess that this might be because after loading the modified FPGA configuration, it is not recognized by the aocl runtime anymore. Can anyone shed some light on what has to be done to make it work? Always re-powering the FPGA board is a quite bad workaround ;)
I'm using a Terasic DE10 Standard board, below you'll find the modified board_spec.xml and Qsys System:
<?xml version="1.0"?>
<board version="14.1" name="de10_standard_sharedonly">
<compile project="top" revision="top" qsys_file="system.qsys" generic_kernel="0"><generate cmd="ip-generate --component-file=system.qsys --file-set=QUARTUS_SYNTH --output-directory=system/synthesis --report-file=qip:system/synthesis/system.qip --jvm-max-heap-size=3G"/><synthesize cmd="quartus_sh --flow compile top -c top"/><auto_migrate platform_type="c5soc" ><include fixes=""/><exclude fixes=""/></auto_migrate></compile>
<device device_model="5csxfc6d6f31c8es_dm.xml"><used_resources><alms num="1080"/><!-- ALMs used for LUT logic + ALMs used for LUT logic and registers--><ffs num="1908"/><dsps num="0"/><rams num="20"/></used_resources></device>
<!-- One DDR3-800 DIMM, 256-bit data -->
<global_mem max_bandwidth="6400">
<interface name="acl_iface" port="kernel_mem0" type="slave" width="256" maxburst="16" latency="240" address="0x00000000" size="0x40000000"/>
</global_mem>
<host>
<kernel_config start="0x00000000" size="0x0100000"/></host><interfaces>
<interface name="acl_iface" port="kernel_cra" type="master" width="64" misc="0"/>
<interface name="acl_iface" port="kernel_irq" type="irq" width="1"/>
<kernel_clk_reset clk="acl_iface.kernel_clk" clk2x="acl_iface.kernel_clk2x" reset="acl_iface.kernel_reset"/>
</interfaces>
<!-- Modification: Adding channels -->
<channels>
<interface name="user_led_ctrl" port="kernel_in" type="streamsink" width="8" chan_id="ch_user_led_ctrl"/>
</channels>
</board>