Martin et. al.,
The fix that makes this block work for us in any scenario, is to add a
break statement at the end of every case statement (don’t allow the fall
through’s to happen).
This leads me to believe the source of the issues comes from the way
offsets are calculated between states within one general_work call.
Letting
general_work return after every state resolves any of these issues. I
think
this points to check_items_available as the problem child, but I
couldn’t
confirm that.
The testbench I use to confirm this has the built-in HPD block and my
custom HPD block, which has break statements at the end of each state.
The
built-in HPD block will start producing errors seconds after I start the
flowgraph. With the built-in disabled and my custom block in the same
flowgraph, it will run indefinitely (tested for 20 hours).
The settings of both blocks were:
Header Length: 8
Items per Symbol: 8
Length tag key: “packet_length”
Output Format: Items
IO Type: Complex
Trigger Tag Key: blank
The input to HPD is unpacked and the header is 64 bits long when packed.
I
did the bulk of testing using a custom tag_trigger block that outputs a
1
when it sees a certain tag and 0 otherwise to feed the detect port of
HPD.
I just tried it using the Trigger Tag Key of the HPD block itself and it
also seems to be fine. So either way seems to work.
I looked at the bug submission instructions, I think forking from github
is
the easiest way of doing it, but I need a little clarification. In this
case, am I correct to fork the repo, add the break statements to the HPD
source, and request a pull along with this explanation? I won’t be
adding
QA tests or anything else.
v/r,
Rich