1
我想通過SDK將數組發送到IP設計,而不僅僅是一個數字,如下面的代碼片段所示。有人可以幫助我這麼做嗎? code in SDK通過SDK將數組發送到IP核
我想通過SDK將數組發送到IP設計,而不僅僅是一個數字,如下面的代碼片段所示。有人可以幫助我這麼做嗎? code in SDK通過SDK將數組發送到IP核
讓我們開始說有不同的方式發送數據到IP(例如從ARM處理器到Zynq中的自定義IP)。賽靈思讓你使用溝通的可能性:
根據所使用的接口,寫SDK-道路上在ARM上運行的代碼可能完全不同。有很多細節,但通常在創建IP時,在導出硬件並啓動SDK後,Vivado會爲您創建庫和驅動程序,以便將數據和命令發送到每個特定的IP。只是給你一個例子,假設你正在使用AXI STREAM接口。在這裏您應該添加另一個IP(由賽靈思提供),用於管理從內存到IP的數據傳輸,反之亦然(DMA - 直接內存訪問)。這裏的代碼應該是:
#include <stdio.h>
#include "xil_cache.h"
#include "xaxidma.h"
#include "xparameters.h"
#include "math.h"
#include "xtime_l.h"
XTime tstart,tstop;
//#define DEBUG
#define N_samples 64
int main()
{
printf("Hello\n");
Xil_DCacheDisable();
Xil_ICacheDisable();
/***************** Variables *******************/
float input_R_IM[N_samples*2];
float output_R_IM[N_samples*2];
int error=-1;
XAxiDma dma0_pointer;
XAxiDma_Config *dma0_Config;
/**********************DMA initialization***************************/
dma0_Config=XAxiDma_LookupConfig(XPAR_AXIDMA_0_DEVICE_ID);
error=XAxiDma_CfgInitialize(&dma0_pointer,dma0_Config);
#ifdef DEBUG
if(error==XST_SUCCESS)
printf("...initialization successful\n");
else
printf("**ERROR INITIALIZATION\n");
#endif
float d = 2 * (float)M_PI/N_samples;
size_t i=NULL;
for (i = 0; i < N_samples; i++)
{
input_R_IM[i*2]=sin(0 + d*i);
input_R_IM[i*2+1]=0;
}
/**********************STARTING FFT************************/
error=-1;
XTime_GetTime(&tstart);
error = XAxiDma_SimpleTransfer(&dma0_pointer,(u32)input_R_IM,2*N_samples*sizeof(float),XAXIDMA_DMA_TO_DEVICE);
#ifdef DEBUG
if(error==XST_SUCCESS)
printf("...simply transfer 1 successful\n");
else
printf("**ERROR SIMPLY TRANSFER 1\n");
#endif
/***********************COPY BACK THE RESULTS************************/
// error=-1;
error = XAxiDma_SimpleTransfer(&dma0_pointer,(u32)output_R_IM,2*N_samples*sizeof(float),XAXIDMA_DEVICE_TO_DMA);
#ifdef DEBUG
if(error==XST_SUCCESS)
printf("...simply transfer 2 successful\n");
else
printf("**ERROR SIMPLY TRANSFER 2\n");
#endif
XTime_GetTime(&tstop);
u64 cycles = tstop-tstart;
float t = ((float)cycles/COUNTS_PER_SECOND)*1000000;
printf("cycles= %lld (time = %f us)\n",cycles,t);
for (i = 0; i < N_samples; i++)
{
printf("i: %d real=> %f --imag==> %f \n" ,i, output_R_IM[i*2], output_R_IM[i*2+1]);
}
printf("Goodbye\n");
return 0;
}
這是用於從使用ARM處理器到FFT IP和AXI-DMA中的一個發送數據的舊代碼。
Here可以以對如何管理Xilinx的FPGA IP之間的數據
非常感謝該回復一個更好的主意找一個AXI參考指南。它非常豐富。但我想知道如何使用xilinx系統生成器生成的IP內核使用DMA?請提前告訴你。 – shashi
問另一個問題,我會很樂意提供幫助!無論如何,如果這裏的答案也有幫助,你可以接受它或upvote! – Leos313
謝謝你,先生。您是否在Vivado中使用了xilinx系統生成器IP內核併爲它們編寫軟件應用程序......? – shashi