未经私信同意禁止转载!

前言

PYNQ 就是python+ZYNQ的意思,简单来说就是使用python在Xilinx 的ZYNQ平台上进行开发。是Xilinx开发的一个新的开源框架,使嵌入式编程人员能够在无需设计可编程逻辑电路的情况下即可充分发挥 Xilinx Zynq All Programmable SoC(APSoC)的功能。

PYNQ-Z2开发板是最近刚推出的低成本的支持PYQN开发环境的demo板。淘宝上单板售价是950RMB,买套装的需要一千多,如果各种必要配件手里都有的话,买单板就行了。最近北美天然气价格暴涨,鄙人小赚一笔,用收益入手了一块!感谢北美人民的取暖费!

就是下面这款骚气十足的板子。PYNQ-Z2

一、环境搭建

或者直接下载《PYNQ-Z1 官方入门指导手册》就可以按照步骤快速搭建。硬件上只需要8GTF卡+网线+microUSB线。去网上下载最新的镜像,写入到TF,就可以正常启动。

启动后,如果你是用电脑网口和PYNQ直连的话,浏览器地址栏输入PYNQ的默认IP 192.168.2.99即可登录,登录密码是xilinx。登录后的Jupyter界面如下。登录界面

程序编写和调试可以在jupyter 里面完成,后面会有图片显示开发的界面。这里要注意,你使用的浏览器要支持Jupyter,最新版的Chrome就可以。

我平常开发都是需要连上VPN,导致无法使用网线直连,我的解决方案是在虚拟机下的ubuntu里面连接,将虚拟机的网络连接设为桥连接,并且去掉VPN的连接就可以无障碍连接,一边上谷歌,一边调试。

二、Pyhon是如何控制到硬件层

这个问题中间涉及很广泛的知识,我也还有很多细节没有搞清楚,这里只能粗略说一下,以后搞懂了,我再补上这一块。Python调用底层硬件框架.png

ZYNQ 分为PS和PL两个部分,PS有两个ARM的核,在上面运行linux操作系统,在操作系统上再运行python。PL部分就是FPGA的逻辑资源,开发者在PL中添加IP或者将自己用C或者HDL语言写好的模块封装成IP,这些IP都被连接到PS端,一般都是通过AXI总线。PYNQ有一个特有的库叫overlay,使用这个库可以对连接到PS端的接口进行解析,进而控制FPGA 逻辑资源及IO。

每次当你需要开始一个新的涉及PL端的开发的时候,先在vivado 里面建一个工程,添加你需要的各种IP,然后以ZYNQ为核心连接的设计,经过编译后,生成一个bit文件和一个tcl文件。bit文件就是你的硬件设计,tcl文件描述了接口关系。将这两个文件复制到PYNQ的目录下,即可进行调用。每一次调用的时候,你设计的硬件都是被动态加载的,这一点不同于大家熟悉的加载过程。动态加载无需重启硬件,操作系统无需重启。这一是一个极有优势的设计,我记得当年调试过intel 和Altera共同推出的阿童木平台完全不同。

进过上面的描述,我们可以得知,在PYNQ框架下,可以非常方便地进行FPGA开发,可以充分利用pyhon的灵活性和FPGA的硬件资源。Pyhon可以帮你轻松完成各种复杂设计,比如图像处理和人工智能的算法,FPGA可以为你提供灵活的接口和硬件加速能力。

三、Python 控制硬件的demo

其实PYNQ的设计就是设计一个属于你自己的overlay,将其放到PYNQ平台上运行。对于我买的PYZQ-Z2 开发板里面已经有一个囊括了板子上所有硬件资源的overlay,叫base overlay。本节描述的是如何构建一个针对你自己硬件设计的overlay。

我设计的Demo里面添加了三个AXI GPIO的标准IP,分别用来控制LED、读取button和输出测试信号。系统的连线图是这样的:diagram

连线完成后,IO端口的配置如下:

#LEDs

#set_property -dict { PACKAGE_PIN R14 IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; #IO_L6N_T0_VREF_34 Sch=led[0]

#set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; #IO_L6P_T0_34 Sch=led[1]

#set_property -dict { PACKAGE_PIN N16 IOSTANDARD LVCMOS33 } [get_ports { led[2] }]; #IO_L21N_T3_DQS_AD14N_35 Sch=led[2]

#set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { led[3] }]; #IO_L23P_T3_35 Sch=led[3]

##Raspberry Digital I/O

#set_property -dict { PACKAGE_PIN W18 IOSTANDARD LVCMOS33 } [get_ports { rpio_02_r }]; #IO_L22P_T3_34 Sch=rpio_02_r

#set_property -dict { PACKAGE_PIN W19 IOSTANDARD LVCMOS33 } [get_ports { rpio_03_r }]; #IO_L22N_T3_34 Sch=rpio_03_r

#set_property -dict { PACKAGE_PIN Y18 IOSTANDARD LVCMOS33 } [get_ports { rpio_04_r }]; #IO_L17P_T2_34 Sch=rpio_04_r

#set_property -dict { PACKAGE_PIN Y19 IOSTANDARD LVCMOS33 } [get_ports { rpio_05_r }]; #IO_L17N_T2_34 Sch=rpio_05_r

#Switches

#set_property -dict { PACKAGE_PIN M20 IOSTANDARD LVCMOS33 } [get_ports { sw[0] }]; #IO_L7N_T1_AD2N_35 Sch=sw[0]

#set_property -dict { PACKAGE_PIN M19 IOSTANDARD LVCMOS33 } [get_ports { sw[1] }]; #IO_L7P_T1_AD2P_35 Sch=sw[1]

设计完成后导出.bit和.tcl,将这文件重命名,复制到开发板上。PYQN开发板的文件服务器在network 目录下,也可以在文件夹地址栏直接输入pynq来查找,用户名和密码都是xilinx。

测试程序如下:button的测试程序如下:

将两个button都拨到开的位置,读回值就是3,也就是b'11

2.点亮LED0 和LED2:

输出0x05,就是b'0101,表示第一个和第三个LED被点亮。

后记

初次使用PYNQ后感觉很好用。个人觉得至少在以下几方面极具优势:

1.快速验证设计模型,加速开发

2.提升软硬件协同设计

3.高效整合系统资源

目前还没用想到用PYNQ做什么东西,欢迎大家留言交流,提供创意。谢谢!

欢迎关注我的专栏《电子工程师有多无聊》,你可以看到更多关于使用Python进行硬件编程的文章。如果你有兴趣,也欢迎投稿。

fpga python_PYNQ:使用Python进行FPGA开发相关推荐

  1. FPGA组成、工作原理和开发流程

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  2. tx2 fpga pcie无法读写_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解

    双击可查看大图(手动狗头) 目录 Altera Cyclone V soc开发文档 之软硬件开发 1 Cyclone V开发流程介绍 5 专业术语 5 Cyclone V软件开发介绍 6 U-BOOT ...

  3. ubuntu arm qt_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解

    双击可查看大图(手动狗头) 目录 Altera Cyclone V soc开发文档 之软硬件开发 1 Cyclone V开发流程介绍 5 专业术语 5 Cyclone V软件开发介绍 6 U-BOOT ...

  4. FPGA基础入门【12】开发板USB鼠标控制

    上一篇教程介绍了NEXYS4 开发板中UART串口通信的使用方式,这一篇介绍USB接口接收鼠标和键盘信号 FPGA基础入门[12]开发板USB鼠标控制 开发板USB芯片 信号时序图 鼠标初始化 逻辑设 ...

  5. python做FPGA EG01约束文件文本格式批量更改

    python做FPGA EG01约束文件文本格式批量更改 一切机械的重复的工作都应该自动化 1.读取原文件 2.标记重要信息 3.提取重要信息 4.重新塑造格式 5.导出保存 一切机械的重复的工作都应 ...

  6. FPGA基础入门【8】开发板外部存储器SPI flash访问

    前两篇教程利用数码管project介绍了chipscope和各种烧写开发板的方式,这篇开始继续探索开发板,这次关注外置存储器的控制,外置指的是芯片外部,不是开发板外部.板子上的外置存储器有DDR2和S ...

  7. 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)

    至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...

  8. CNN FPGA加速器实现(小型)CNN FPGA加速器实现(小型)

    CNN FPGA加速器实现(小型)CNN FPGA加速器实现(小型) 通过本工程可以学习深度学习cnn算法从软件到硬件fpga的部署. 网络软件部分基于tf2实现,通过python导出权值,硬件部分v ...

  9. 初识FPGA(二)(FPGA与ASIC及CPLD的对比)

    目录 简述 ASIC和FPGA之间的比较 FPGA和CPLD之间的比较 简述 ASIC是英文Application Specific Integrated Circuits的缩写,即专用集成电路,是指 ...

最新文章

  1. php7做了哪些优化,PHP语言学习之PHP7做了哪些优化
  2. 7 个显著提升编码效率的IntelliJ IDEA必备插件
  3. 同事把 Redis用成这鬼样子,真坑!
  4. STM32开发 -- md5sum命令
  5. python map、filter、reduce
  6. SpringBoot集成Shiro进行权限控制和管理
  7. linux下amd超频工具,AMD锐龙自动超频工具ClockTuner for Ryzen
  8. pca各个向量之间的相关度_PCA算法原理及实现
  9. app测试和app接口测试要点详解
  10. JS学习:第一周——NO.1预解释
  11. mobiscroll 插件札记(一)
  12. 用python延续科比的曼巴精神
  13. 【科来】网络异常行为分析学习笔记
  14. 雷达原理笔记之LFMCW雷达测距测速原理
  15. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 文件提前结
  16. 2023年春招热门笔试算法题(C++)
  17. 温莎大学的计算机科学,温莎大学 University of Windsor
  18. session_Composite(组合模式)
  19. 今天不聊技术,聊聊如何成为一个靠谱的软件从业人员
  20. 十大实用网站推荐(1)

热门文章

  1. #劲舞团# 熬点小米稀饭喝,有六年没有喝过了。确实是家长的味道。
  2. UVA10655-Contemplation! Algebra
  3. enumeration value ... not handled in switch
  4. 简单爬取wallhaven某页图片
  5. android--地图定位打卡
  6. 两万字摘录计算机博士生涯规划
  7. vue制作一个好看的网页
  8. 如何实现智能排班?Udesk沃丰科技WFO客服工作量预测算法告诉你
  9. 401 (Unauthorized) 未授权
  10. Windows下安装使用openldap(zz)