microblaze data transfer

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?

Reply to
Loading thread data ...


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:

Reply to
Goran Bilski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.