Coupling NEORV32 and AXI CDMA #999
Unanswered
Sam-Vervaeck
asked this question in
Q&A
Replies: 1 comment 15 replies
-
What is the base address of the AXI CDMA? Have you enabled any NEORV32 caches? |
Beta Was this translation helpful? Give feedback.
15 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
I have coupled the NEORV32 to an AXI CDMA and it works mostly except for some "busy waiting" behaviour which I cannot figure out.
My test-case was to copy some data from one BRAM to another:
I have populated BRAM 0 with a COE file and after copying data to BRAM 1 I check if the same values are in the same relative memory offsets. For this functionality, I adapted the following function to set the relevant CDMA registers. Towards the end you can see a "busy waiting" section that checks the status register to see if the idle bit has already been set:
The whole point of a CDMA is that the NEO can continue working on other instructions while the CDMA does its thing. However, sometimes you need to wait on the data to have done copying so that is what the block parameter is for. When I created test code with the block parameter set to 1 and checked the waves, the address of the idle bit does not get checked during the CDMA execution? Weirdly enough, it only gets checked once after the CDMA has already been done for some time:
On the screenshot you can see the reading signals in blue and the writing in red. In the middle you can see the CDMA doing its copying and on the location of my yellow time marker the idle bit gets checked for the first time at register offset 0x04. I would have expected to see more reads on the AXI4-Lite status connection of the CDMA during execution according to my transaction C code?
Anybody has any experience with an AXI CDMA or a similar design and knows what is going on?
Beta Was this translation helpful? Give feedback.
All reactions