-
Notifications
You must be signed in to change notification settings - Fork 0
sdk例程:zynq ps_dmac的使用与测速
minichao9901 edited this page Jun 2, 2024
·
3 revisions
- 勾选DMAC,2个通道。
- 增加一个bram_ctrl,容量64kB
- 为了测速,关键部分修改如下
// static int Src[DMA_LENGTH] __attribute__ ((aligned (32)));
// static int Dst[DMA_LENGTH] __attribute__ ((aligned (32)));
int *Src=(int *)0x10000000;
int *Dst=(int *)0x10008000;
.....
.....
XTime t1,t2;
XTime_GetTime(&t1);
Status = XDmaPs_Start(DmaInst, Channel, &DmaCmd, 0);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
XTime_GetTime(&t2);
int dt = (u32)(t2-t1) * (1000000.0/ COUNTS_PER_SECOND);
xil_printf("dt=%dus\r\n", dt);
XTime_GetTime(&t1);
for (Index = 0; Index < DMA_LENGTH; Index++) {
Dst[Index] = Src[Index];
}
XTime_GetTime(&t2);
dt = (u32)(t2-t1) * (1000000.0/ COUNTS_PER_SECOND);
xil_printf("dt=%dus\r\n", dt);
XTime_GetTime(&t1);
memcpy(Dst, Src, DMA_LENGTH*sizeof(int));
XTime_GetTime(&t2);
dt = (u32)(t2-t1) * (1000000.0/ COUNTS_PER_SECOND);
xil_printf("dt=%dus\r\n", dt);
可以看到,最慢的是for循环copy,时间是691us。其次是dmac,时间是114us。最快的是27us。
将容量增大到655536*sizeof(int),结论仍然是这样的。memcpy最快。