I am implementing my AXI Stream Master module which can be use with Vivado DMA module. The connection of module is shown:
I have 3 questions:
1.) Could the "m_axis_tvalid" signal be non continuous at '1' during the stream transaction? Because some calculation delay might occur in the "axis_top_test_0" module, so the the m_axis_tdata might not be provided continuously. The provided reference only gives some simple condition. I have written my testbench signal which is shown below, so that you can understand my question in a better way:
2.) Is it necessary to set the "m_axis_tlast" to '1' when my transaction is finished? I test the xilinx sdk provided program xaxidma_example_simple_poll.c and it always stops at this line272:
while ((XAxiDma_Busy(&AxiDma,XAXIDMA_DEVICE_TO_DMA)) ||
(XAxiDma_Busy(&AxiDma,XAXIDMA_DMA_TO_DEVICE))) {
/* Wait */
}
Then, the program cannot be ended. When I rerun the program again, I can see that the data is transferred to the Rx already (which is the result of the 1st run of the program). Does it mean that the AxiDma is always busy when custom module asserts m_axis_tvalid to '1', if the dma does not receive m_axis_tlast = '1', then the dma will always be busy?
3.) Let's come back to the 1st question, I tested the implementation in question 1, and I still get the result of question 2. So, the only way to resolve it is to first store all my calculation results in a buffer, then I trigger the m_axis transaction once?