microblaze data transfer

Oct 17, 2003 1 Replies

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?


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