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

    关注

    1665

    文章

    22581

    浏览量

    641081
  • Linux
    +关注

    关注

    88

    文章

    11868

    浏览量

    219908
  • uart
    +关注

    关注

    22

    文章

    1325

    浏览量

    107168
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Python/MyHDL创建自定义FPGA IP

    使用 Python/MyHDL 创建自定义 FPGA IP,与 Vivado 集成,并通过 PYNQ 进行控制——实现软件上的简单硬件设计。
    的头像 发表于 04-09 09:53 492次阅读
    使用Python/MyHDL创建自定义<b class='flag-5'>FPGA</b> IP

    深入解析IGLOO2 FPGA与SmartFusion2 SoC FPGA特性、参数与应用

    深入解析IGLOO2 FPGA与SmartFusion2 SoC FPGA特性、参数与应用 在当今的电子设计领域,现场可编程门阵列(FPGA)和片上系统(SoC)
    的头像 发表于 04-07 16:45 221次阅读

    Atmel AT17LVxxxA FPGA配置EEPROM:特性、应用与技术解析

    Atmel AT17LVxxxA FPGA配置EEPROM:特性、应用与技术解析 在FPGA(现场可编程门阵列)的应用中,配置存储器是至关重
    的头像 发表于 03-29 17:05 1049次阅读

    英特尔Arria V系列FPGA器件全面解析:特性、性能与应用考量

    英特尔Arria V系列FPGA器件全面解析:特性、性能与应用考量 在当今高速发展的电子领域,FPGA(现场可编程门阵列)凭借其灵活性和重构性,成为众多电子工程师的首选器件。英特尔的
    的头像 发表于 03-29 13:05 293次阅读

    探索Atmel AT17LV系列FPGA配置EEPROM:特性、应用与设计要点

    探索Atmel AT17LV系列FPGA配置EEPROM:特性、应用与设计要点 在FPGA(Field Programmable Gate Array,现场可编程门阵列)的应用领域中,
    的头像 发表于 03-24 17:40 644次阅读

    一起盘点AG32 MCU 的特性及产品特色,异构SOC入门推荐

    功能固定。 二、关键特性与核心优势 - 管脚高度灵活可配置:与传统MCU固定引脚功能不同,AG32允许开发者根据PCB布局需求,动态重定义大部分数字I/O引脚的功能,极大简化布线并
    发表于 03-13 11:51

    Atmel AT17LV系列FPGA配置EEPROM的全面解析

    Atmel AT17LV系列FPGA配置EEPROM的全面解析 在FPGA设计领域,配置存储器的选择至关重要。Atmel的AT17LV系列FPGA
    的头像 发表于 02-27 16:15 473次阅读

    【ALINX 教程】FPGA Multiboot 功能实现——基于 ALINX Artix US+ AXAU25 开发板

    教程目的 本教程介绍如何在  ALINX Artix US+ AXAU25 FPGA  开发板上,通过  Multiboot  实现多个 bitstream 的存储与动态切换,并在配置失败时自动回退
    的头像 发表于 01-05 15:41 1837次阅读
    【ALINX 教程】<b class='flag-5'>FPGA</b> Multiboot 功能<b class='flag-5'>实现</b>——基于 ALINX Artix US+ AXAU25 开发板

    ALINX教程分享_Zynq UltraScale+ MPSoC PYNQ3.1.2移植

    本教程在 Ubuntu22.04.1 虚拟机中安装了 Xilinx 2024.1 的开发环境,基于该环境从源码编译 PYNQ 3.1.2 工程,生成能够在 ALINX AXU15EGB 开发板上运行的 PYNQ 系统镜像。
    的头像 发表于 11-30 16:06 6242次阅读
    ALINX教程分享_Zynq UltraScale+ MPSoC <b class='flag-5'>PYNQ</b>3.1.2移植

    AMD利用重构FPGA设备Moku实现自定义激光探测解决方案

    摘要本文介绍了AdvancedMicroDevices,AMD公司如何基于重构FPGA设备自定义激光探测解决方案,替代传统的仪器配置,通过灵活且定制的
    的头像 发表于 11-20 17:28 1993次阅读
    AMD<b class='flag-5'>利用</b><b class='flag-5'>可</b>重构<b class='flag-5'>FPGA</b>设备Moku<b class='flag-5'>实现</b>自定义激光探测解决方案

    如何利用Verilog HDL在FPGA实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA
    的头像 发表于 10-22 17:21 4658次阅读
    如何<b class='flag-5'>利用</b>Verilog HDL在<b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>SRAM的读写测试

    利用EasyGo DeskSim快速实现信号采集

    EasyGo DeskSim是一款配置型的实时仿真软件,它允许用户将 Simulink 算法程序快速部署到 EasyGo 实时仿真机上。实时仿真机支持选配不同的 FPGA 芯片和 IO 模块,能够处理高速信号,并通过 IO 模块输出真实的仿真结果,
    的头像 发表于 08-18 11:32 5091次阅读
    <b class='flag-5'>利用</b>EasyGo DeskSim快速<b class='flag-5'>实现</b>信号采集

    FPGA利用DMA IP核实现ADC数据采集

    本文介绍如何利用FPGA和DMA技术处理来自AD9280和AD9708 ADC的数据。首先,探讨了这两种ADC的特点及其与FPGA的接口兼容性。接着,详细说明了使用Xilinx VIVADO环境下
    的头像 发表于 07-29 14:12 5442次阅读

    基于FPGA的压缩算法加速实现

    法的速度。我们将首先使用C语言进行代码实现,然后在Vivado HLS中综合实现,并最终在FPGA板(pynq-z2)上进行硬件实现,同时于
    的头像 发表于 07-10 11:09 2699次阅读
    基于<b class='flag-5'>FPGA</b>的压缩算法加速<b class='flag-5'>实现</b>

    利用EasyGo DeskSim快速实现信号输出

    EasyGo DeskSim是一款配置型的实时仿真软件,它允许用户将 Simulink 算法程序快速部署到 EasyGo 实时仿真机上。实时仿真机支持选配不同的 FPGA 芯片和 IO 模块,能够处理高速信号,并通过 IO 模块输出真实的仿真结果,
    的头像 发表于 06-30 14:11 1206次阅读
    <b class='flag-5'>利用</b>EasyGo DeskSim快速<b class='flag-5'>实现</b>信号输出