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
    +关注

    关注

    1592

    文章

    21207

    浏览量

    592139
  • Linux
    +关注

    关注

    87

    文章

    10942

    浏览量

    206542
  • uart
    +关注

    关注

    21

    文章

    1150

    浏览量

    99748
收藏 人收藏

    评论

    相关推荐

    IIC总线的FPGA实现说明

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

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

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

    FPGA是啥?太难了~

    使用框图或者Verilog HDL来设计,从简单的门电路到FIR或者FFT电路。(3) FPGA可无限地重新编程,加载一个新的设计方案只需几百毫秒,利用重配置可以减少硬件的开销。(4) FPG
    发表于 11-03 10:29

    【KV260视觉入门套件试用体验】PYNQ初次上手体验

    PYNQ 是 AMD 的一个开源项目,用于快速进行自适应计算平台的开发 。 使用Python语言和库,我们可以利用FPGA和ARM协同开发的优势来构建项目 PYNQ
    发表于 10-18 01:22

    Z-turn Board产品用户手册

    逻辑进行静态还是动态的部分或完整重配置,都可以在 arm 处理系统的控制下完成 。可编程逻辑的重配置特性,允许您在开发阶段的后期执行修改操作,从而满足不断变化的市场需求,同时,现场升级
    发表于 10-09 07:12

    【KV260视觉入门套件试用体验】Zynq超强辅助-PYNQ配置,并使用XVC(Xilinx Virtual Cable)调试FPGA逻辑

    前四期测评计划: 一、开箱报告,KV260通过网线共享PC网络 二、Zynq超强辅助-PYNQ配置,并使用XVC(Xilinx Virtual Cable)调试FPGA逻辑 三、硬件加速之—使用PL
    发表于 09-16 14:15

    如何为自己的ZYNQ板卡创建Pynq镜像

    Xilinx Pynq 框架允许我们将 Python 和可编程逻辑结合起来。让我们看看如何为自己的ZYNQ板卡创建 Pynq 镜像。
    发表于 08-07 09:26 816次阅读
    如何为自己的ZYNQ板卡创建<b class='flag-5'>Pynq</b>镜像

    使用Tensil和PYNQPYNQ Z1 FPGA板上运行机器学习

    电子发烧友网站提供《使用Tensil和PYNQPYNQ Z1 FPGA板上运行机器学习.zip》资料免费下载
    发表于 06-14 11:44 0次下载
    使用Tensil和<b class='flag-5'>PYNQ</b>在<b class='flag-5'>PYNQ</b> Z1 <b class='flag-5'>FPGA</b>板上运行机器学习

    XILINX FPGA IP之MMCM PLL DRP时钟动态重配详解

    上文XILINX FPGA IP之Clocking Wizard详解说到时钟IP的支持动态重配的,本节介绍通过DRP进行MMCM PLL的重新配置
    发表于 06-12 18:24 5676次阅读
    XILINX <b class='flag-5'>FPGA</b> IP之MMCM PLL DRP时钟动态<b class='flag-5'>重配</b>详解

    在微处理器系统里实现两种简单的FPGA配置方式

    单元存储配置数据。配置数据决定了PLD内部互连和功能,改变配置数据,也就改变了器件的逻辑功能。SRAM编程时间短,为系统动态改变PLD的逻辑功能创造了条件。但由于SRAM的数据易失的,配置
    的头像 发表于 05-30 11:00 435次阅读

    在微处理器系统里实现两种简单的FPGA配置方式

    存储配置数据。配置数据决定了PLD内部互连和功能,改变配置数据,也就改变了器件的逻辑功能。SRAM编程时间短,为系统动态改变PLD的逻辑功能创造了条件。但由于SRAM的数据易失的,配置
    的头像 发表于 05-30 10:59 452次阅读
    在微处理器系统里<b class='flag-5'>实现</b>两种简单的<b class='flag-5'>FPGA</b><b class='flag-5'>配置</b>方式

    易灵思内部重配置实现远程更新

    除通过外部多功能IO来选择之外,易灵思通过内部重配置实现远程更新操作也非常简单。
    的头像 发表于 05-30 09:24 722次阅读
    易灵思内部<b class='flag-5'>重配置</b><b class='flag-5'>实现</b>远程更新

    AMD Artix 7 FPGA OTA在线升级的实现

    AMD FPGA支持的MultiBoot特性,可以使FPGA先尝试启动最新的配置(bit)文件,后续称为Update Bit。如果最新的配置
    的头像 发表于 05-17 10:39 435次阅读

    5G NR RRC协议解析_RRC重配置

      AS安全模式建立完毕后,UE和gNB之间会触发RRC重配置流程。   重配置信令流程如图所示:   那么触发重配置流程的目的以及重配置消息中有哪些关键字段呢?   1 RRC
    发表于 05-10 15:44

    PYNQ经典项目分享:可重配置IO

    上图为工程项目示意图。通过软硬件划分,在PS端中负责Linux和通信,PL端例化了6个PR(Partitial Reconfiguration)块。每个块中有GPIO、uart和IIC等几种不同的RM(Reconfiguration Module)
    的头像 发表于 04-03 10:46 843次阅读