I'm planning to use Microblaze in my project without using DMA devices. It seems than Microblaze don't have any instruction like "read and auto- increment register" so if I have to transfer data from a location to another I have to implicitaly increment pointer. Anyone knows if there is some solution that allows to transfer data with the lowest number of cycles?
microblaze data transfer
Oct 17, 2003
1 Replies
Hi,
Since MicroBlaze branches on register values you can first load a register with the length. MicroBlaze also have an address mode which is address = regA + regB. I would also move from the end to the beginning like this
addi r5,r0,#Src_Addr addi r6,r0,#Dest_Addr addi r7,r0,#(4*(Nr_of_Words-1) .loop lw r8,r5,r7 sw r8,r6,r7 bneid r7,loop addi r7,r7,-4
This will create a loop with 1 load, 1 load, 1 branch and 1 decrement. The number of clock cycles depends on the latency to the memory but it will be 2 memory access + 3 clock cycles if the code is executed from the LMB memory.
Göran Bilski
C.Amendola wrote:
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required