0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用FPGA部分可重配置特性实现PYNQ-PRIO经典案例

454398 来源:PYNQ开源社区微信公众号 作者:品客 2020-09-28 10:21 次阅读

PYNQ-PRIO是一个介绍如何利用FPGA部分可重配置特性和PYNQ框架提供的方便的API,对FPGA分时复用,提高FPGA灵活性的项目。可重配置是指在一个FPGA工程中,划分了静态逻辑部分和动态逻辑部分,静态逻辑部分是指在运行过程中逻辑不变的部分,动态逻辑部分是指在运行过程中可以根据需要下载特定比特流文件实现不同逻辑的部分,在工作时,修改某一动态逻辑部分不会对静态逻辑部分和其他动态逻辑部分造成影响,实现了FPGA的功能上的分时复用。

上图为工程项目示意图。通过软硬件划分,在PS端中负责Linux通信,PL端例化了6个PR(Partitial Reconfiguration)块。每个块中有GPIO、uart和IIC等几种不同的RM(Reconfiguration Module),它们通过各自的partitial bitstream下载。动态逻辑部分和静态逻辑部分使用分离器保证它们互不影响,并在动态逻辑部分下载完成后对下载好的部分进行复位。

此项目中在PYNQ框架下有两种驱动这些IP的方式:一是直接使用PYNQ提供的API操作overlay里面的IP,二是将这些IP通过DTS(Device Tress Source)注册到linux sysfs中,然后调用linux提供的驱动。

快速开始

运行下面这条命令即可快速安装:

sudo -H pip3 install git+https://github.com/Siudya/PYNQ-PRIO.git

项目演示

1 、 使用pynq API的方法:

打开~/prio/uart.ipynb,前面一段代码是UART的驱动程序和必要的功能代码,不是本文重点请读者自己研读。

接下来就是下载bit文件。首先下载静态逻辑bit文件,静态bit文件中的PR部分是默认的RM。然后下载PR的bit文件。注意,下载一个PR的bit文件后要立刻例化一个驱动实例,这是因为每个PR的bit文件所对应的hwh文件中其他PR部分都使用默认RM,但是下载一个PR的bit文件并不会影响其他PR和静态逻辑。

然后可以测试一下两个UART的状态,在这里我们并没有开启中断。

下一步我们测试两个串口的收发。用杜邦线将uart1的TX(Arduino的Pin 9)和uart3的RX(Arduino的Pin 34),uart1的RX(Arduino的Pin 8)和uart3的TX(Arduino的Pin 35)连接起来,运行这段代码,可以看到信息被正确地收发了。

接下来我们试试含中断的收发。首先仍然是例化实例,不过在这里我们要从overlay.interrupts_pins中读取每个uart的中断引脚,然后初始化uart实例。

利用asyncio库和中断,我们可以实现异步收发。

2 、使用linux sysfs API的方法:

打开~/prio_linux/uart_linux.pynb

首先和上面使用pynq的API的方法一样,首先下载静态逻辑的bit文件,再下载PR的bit文件。但是不同的是同时注册了对应的dtbo到linux系统中。dtbo由dtso编译而来,dtso是描述设备树的文件,关于它的编写参阅以下链接:
https://www.raspberrypi.org/documentation/configuration/device-tree.md

注册完成后可以直接在/dev下看到这两个uart模块。然后可以使用linux自带的serial库调用它们。

这个项目中我们利用了FPGA的部分可重构的特性,实现了运行中的部分逻辑的动态转换。另外我们可以看到利用PYNQ提供的API,可以轻松注册设备到Linux系统,方便了其他程序对我们自定义IP的使用。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1628

    文章

    21708

    浏览量

    602694
  • Linux
    +关注

    关注

    87

    文章

    11259

    浏览量

    209152
  • uart
    +关注

    关注

    22

    文章

    1232

    浏览量

    101305
收藏 人收藏

    评论

    相关推荐

    一种简单高效配置FPGA的方法

    本文描述了一种简单高效配置FPGA的方法,该方法利用微处理器从串行外围接口(SPI)闪存配置FPGA设备。这种方法减少了硬件组件、板空间和成
    的头像 发表于 10-24 14:57 482次阅读
    一种简单高效<b class='flag-5'>配置</b><b class='flag-5'>FPGA</b>的方法

    FPGA在图像处理领域的优势有哪些?

    语言编程的,因此可以根据图像处理的实际需求,动态地调整硬件资源的使用。这使得FPGA在处理图像时能够实现更高的能效比,从而降低系统的功耗。这对于需要长时间运行的图像处理系统尤为重要。 五、
    发表于 10-09 14:36

    使用PYNQ训练和实现BNN

    使用 PYNQ 可以轻松在 FPGA实现加速 AI/ML,而无需编写一行 HDL!让我们看看如何做到这一点。
    的头像 发表于 08-05 17:15 497次阅读
    使用<b class='flag-5'>PYNQ</b>训练和<b class='flag-5'>实现</b>BNN

    基于PYNQ的智能垃圾分类系统

    ,同时在这个 ARM+FPGA 平台,为了最大化主控板优势,我 们针对软件算法进行了相应的硬件实现进行提速,解决了在有限的资源内实现了资源 利用和效率的最大化,同时在
    发表于 07-09 18:44

    基于FPGA的摄像头心率检测装置设计

    其中 fpga 图像处理模块使用 Xilinx 公司的 pynq 平台进行实现,其中又划 分为以下几个软件模块:画面获取模块,感兴趣区域 roi 获取(人脸识别)模块,变化信号提取模块,快速
    发表于 07-01 17:58

    基于FPGA的类脑计算平台 —PYNQ 集群的无监督图像识别类脑计算系统

    Passing Interface)的分布式内存多进程技术,适应不 同的集群平台。本设计在NEST仿真器中加入了支持LIF神经元多线程硬件模块。并通过以太网的通 信方式实现支持FPGA集群
    发表于 06-25 18:35

    如何利用经典蓝牙的bt_spp_acceptor实现蓝牙透传功能?

    利用经典蓝牙的bt_spp_acceptor实现蓝牙透传功能?
    发表于 06-24 07:53

    简谈Xilinx Zynq-7000嵌入式系统设计与实现

    PL,此外可以实现PL的完全重配置或者使用部分重配置(PR,Partional Reconfihuration,允许动态的重新
    发表于 05-08 16:23

    FPGA开发如何降低成本,比如利用免费的IP内核

    。 了解IP内核的特性和使用方式:在选定IP内核后,应详细阅读其文档,了解内核的功能、性能、接口以及使用限制等。这有助于在设计中更好地利用这些内核,避免潜在的问题。 集成IP内核到FPGA设计中:在
    发表于 04-28 09:41

    基于FPGA的光纤通信加密系统

    FPGA 设计加密算法具有安全性高,加密速度快,开发周期短,开发成本较低, 重配,可靠性高以及移植性好等优点。 系统链路部分采用 Aurora 协议,该协议是一款轻量级的光纤链路协议
    发表于 04-26 11:33 1192次阅读
    基于<b class='flag-5'>FPGA</b>的光纤通信加密系统

    fpga芯片的简单介绍

    FPGA(Field Programmable Gate Array,现场可编程门阵列)芯片是一种可以通过用户在现场进行编程来定制其逻辑功能的集成电路。FPGA芯片因其高度的灵活性和重配置
    的头像 发表于 03-26 16:01 843次阅读

    fpga芯片工作原理 fpga芯片有哪些型号

    部分。这些部分共同构成了FPGA的基本结构,使其具有高度的灵活性和可配置性。 在FPGA中,小型查找表(LUT)是
    的头像 发表于 03-14 17:17 1439次阅读

    fpga是什么 fpga用什么编程语言

    更高的灵活性和重构性。在FPGA中,用户可以通过编程来配置硬件单元之间的连接关系,从而实现所需的电路功能。接下来,我们将详细介绍FPGA
    的头像 发表于 02-04 15:26 1620次阅读

    IIC总线的FPGA实现说明

    DE2_TV中,有关于寄存器的配置部分,采用的方法是通过IIC的功能,这里对IIC总线的FPGA实现做个说明。
    的头像 发表于 01-05 10:16 1041次阅读
    IIC总线的<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>说明

    针对UltraScale/UltraScale+芯片DFX应考虑的因素有哪些(1)

    对于UltraScale/UltraScale+芯片,几乎FPGA内部所有组件都是可以部分重配置
    的头像 发表于 12-14 16:16 684次阅读
    针对UltraScale/UltraScale+芯片DFX应考虑的因素有哪些(1)