microblaze data transfer

C

C.Amendola

Guest
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:

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?
 

Welcome to EDABoard.com

Sponsor

Back
Top