首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在zynq 7020上实现C/C++的FPGA协同处理?

如何在zynq 7020上实现C/C++的FPGA协同处理?
EN

Stack Overflow用户
提问于 2015-05-11 01:48:41
回答 2查看 3.9K关注 0票数 5

我正在学习vivadoHLS,u871教程介绍了如何使用HLS,并优化了我的C/C++代码。但我想知道如何将它们装入我的板zynq 7020,让它在船上运行。

我想要实现的是:主机(CPU在板上)调用PL(FPGA)进行计算,并将参数发送到PL,然后PL将结果发回CPU。

例如,C: add (int* a,int* b)中的一个函数,它将分别添加ai和bi,并返回一个数组int* 。,通过HLS,我可以展开For循环,然后它将更快地计算。CPU将a和b的地址发送到PL,PL计算,并将结果地址发回CPU。

在本教程中,它只介绍了如何使用HLS,没有解释如何与PL和CPU通信,也没有解释如何将其加载到板上以便在板上运行。

请推荐一个教程或告诉我在哪里学习,非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-05-16 18:00:49

这是一个相当复杂的问题,因为它们是解决方案的许多变体。ug871的第2章介绍了这一部分,但不幸的是它使用EDK而不是Vivado。不过,Vivado HLS的概念是相同的。您还可以查看xapp890

基本上,Zynq使用AXI端口连接到PL。AXI端口是一种经典的address+data总线。AXI有两种类型,标准型和低碳型。lite版本不支持突发,专注于以性能为代价使用更少的区域,并且通常用于寄存器接口。标准的AXI具有非常高的性能和支持突发,您通常使用它连接到DDR内存。

Zynq有几个AXI端口,作为主从端口。从端口允许您的IP读取/写入Zynq的内存空间。主端口允许Zynq读取/写入内核的内存空间。这几个端口有不同的性能,GP应该用于低性能的AXI-Lite,惠普到IP,需要一个更直接的访问Zynq DDR存储器。

连接IP最简单的方法是使用AXI.在Vivado HLS中,定义地址0的寄存器a,地址4的寄存器b,地址d的寄存器c(应答)。

代码语言:javascript
复制
int add(int a, int b)
{
    volatile int *my_ipaddr = MY_IP_BASEADDR; // Address is configured in Vivado block design

    *(my_ipaddr+0) = a;
    *(my_ipaddr+1) = b;
    return *(my_ipaddr+2);
}

因为我不使用Vivado HLS,所以我不知道该怎么做。但略读ug871,它涵盖了AXI-Lite寄存器接口.

第三种类型的AXI称为AXI流.它是一种没有地址的通信总线,只有带有一些标志的数据才能同步流。它通常在不关心地址的核心之间使用,或者与AXI引擎一起使用。主要问题是您不能将AXI流直接连接到Zynq,AFAIK。

示例应用程序是xapp890,尽管它们使用了视频DMA内核,因为它是一个视频应用程序。它提供了一个更高的性能解决方案。在您的示例中,它将有一个输入从AXI-Stream接收a/b,并有一个输出主AXI-流返回c。您可以将核心连接到AXI-DMA IP核,伪代码是:

代码语言:javascript
复制
void add(int *ab, int *c, unsigned int length)
{
    XAxi_Dma_Start_Transfer((void *)ab, length, CHANNEL_MM2S); // Not actual function, MM2S stands for memory to stream
    XAxi_Dma_Start_Transfer((void *)c, length, CHANNEL_S2MM); // S2MM = stream to memory

    while(XAxi_Dma_Transfer_Done == 0) {} // Wait end of transfer
}

这是很多信息,但希望它能让您理解应用程序说明。总之,您的IP必须提供AXI (Lite,Standard of Stream)接口来交换数据,您可以连接到Zynq端口。此外,您的IP也可以有一个中断信号。

票数 5
EN

Stack Overflow用户

发布于 2015-05-25 12:53:33

乔纳森认为,这是一个相当复杂的课题。您可以自己完成PL和CPU/RAM之间的所有通信工作(并且不要忘记驱动程序的开发),但是您也可以尝试使用一些现有的工具。例如,我们已经尝试过RSoC框架,但是可能存在更多这样的“框架”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30158583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档