09-19-2019 02:30 AM
We have an FPGA design used to stream data from two fifo. One fifo send data from FPGA to Host PC and the other in the reverse direction. Everything is working quite fine, but we encounter some issues and want to debug our system. The idea is to detect a new packet and count them until we reach a threshold. Then, we want to capture all the packets that are received after that event. In order to do so, we have implemented an ILA with the ADVANCED_ONLY mode and create the following state machine:
if(rx_packet == 1'bR) then
elseif($counter0 == 16'h02bc) then
We have also configured the capture mode to ALWAYS, with 128 windows of 32 samples and use the 8th sample for the trigger position. When we start the ILA, we wait until the 0x2bc event and trig the first window. BUT, the other windows are not filled with data.
How can we change the state machine to ensure that all packets will be captured ?
09-19-2019 03:41 PM
The application of the windows feature in the ILA is for having one trigger per window. So in your case, you'd have to have a trigger condition defined for each of all of the 128 windows.
You've mentioned that you want to capture all the packets that are received after the trigger event (when $counter0 reaches 0x2bc, I suppose).
Have you tried just leaving one window and then setting the trigger condition? Does that now show all the packages you need?
09-24-2019 01:21 AM
Sorry for the late reply, I was working on something else the previous days.
I have tried what you suggested, the counter wait until the condition is met and it fills the capture window with samples.
The data packets are almost as long as the window capture so I'm not able to see a bunch of packets with your settings. The whole idea is to detect a packet, count until a threshold and skip all irrelevant samples between packets. I will try to use more counter and state in the debug state machine.
Anyway, thank you for your quick reply,
09-25-2019 10:43 AM
I have changed the value of the threshold to 0x0010 and I was able, with the same state machine as described earlier, to retrieve 128 packets, one every 16th packets. So, it seems that the two states of the trigger machine are executed in parallel. I don't know how to "disable" one state after the threshold has been reached.