“用FPGA写了个外挂,被暴雪认定是非法第三方程序用的PYNQ+STM32,PYNQ负责从HDMI截图并用OpenCV算法找到目标,并把坐标发给STM32。STM32实现USB HID鼠标,负责把准心移动到目标上。”
PYNQ是一款可以用python玩的FPGA,其设计初衷是通过高层次的封装,将底层硬件 FPGA 实现细节与上层应用层的使用脱耦,对软件开发者来说,PYNQ 框架已经提供了完整的访问 FPGA 资源的 library,让上层应用开发者通过 Python 编程就可以调用 FPGA 模块,不需要懂 Verilog/VHDL 硬件编程就可以享受 FPGA 可并行计算、接口可方便扩展和可灵活配置带来的诸多好处。
PYNQ 是一个开源框架,目标是使嵌入式编程人员能够在无需设计可编程逻辑电路的情况下即可充分发挥 Xilinx Zynq全可编程SoC的功能。与常规方式不同的是通过PYNQ,设计人员可以通过Python语言和库,利用Zynq中融合可编程逻辑和微处理器的优势来快速构建更强大的嵌入式系统,其代码可直接在支持PYNQ的开发板上进行开发和测试。
ZYNQ板卡分为PS和PL两个部分,PS有两个ARM的核,在上面运行linux操作系统,在操作系统上再运行python。PL部分就是FPGA的逻辑资源,开发者在PL中添加IP或者将自己用C或者HDL语言写好的模块封装成IP,这些IP都被连接到PS端,一般都是通过AXI总线。PYNQ有一个特有的库叫overlay,使用这个库可以对连接到PS端的接口进行解析,进而控制FPGA 逻辑资源及IO。
PYNQ-overlay可以直接在python上以软件包形式使用。如下图所示:(在pc端展示,故显示包缺失)
每次当你需要开始一个新的涉及PL端的开发的时候,先在vivado 里面建一个工程,添加你需要的各种IP,然后以ZYNQ为核心连接的设计,经过编译后,生成一个bit文件和一个tcl文件。bit文件就是你的硬件设计,tcl文件描述了接口关系。将这两个文件复制到PYNQ的目录下,即可进行调用。每一次调用的时候,你设计的硬件都是被动态加载的,这一点不同于大家熟悉的加载过程。动态加载无需重启硬件,操作系统无需重启。
参考pynq官网[1],可知开发需要准备的硬件,原文链接如下所示。
此外,如果您电脑无sd卡槽,您可能还需要sd卡读卡器。
PYNQ-Z2 Setup Guide — Python productivity for Zynq (Pynq)
板卡的“心脏”-- Zynq 7020:
芯片型号为ZYNQ XC7Z020-1CLG400C,其主要片内资源分为PS、PL两主要部分与其他外设。
PS(Processing System):双核ARM Cortex-A9硬核处理器,一般工作频率650MHz;
PL(Programmable Logic):Artix-7系列可编程逻辑
• 13,300 逻辑片,每个具有四个6输入LUT和8个触发器
• 630 KB 的快速block RAM
• 4 时钟管理片,每个片都有一个锁相环(PLL)和混合模式时钟管理器(MMCM)
• 220 个DSP片
• 片上模数转换器 (XADC)
其他片内外设:
• DDR3 内存控制器:带有8通道DMA和4个高性能AXI3从端口;
• 高带宽外设控制器:1G以太网,USB 2.0, SDIO
• 低带宽外设控制器: SPI, UART, CAN,I2C
• 三种编程方式: JTAG, Quad-SPI flash, Micro-SD card
存储资源:
512MB DDR3,16位总线,工作频率高达1050Mbps;
16MB Quad-SPI Flash;
Micro-SD卡插槽
供电系统:
使用USB接口或7~15V直流电源供电
音视频接口:
1路HDMI输入接口;
1路HDMI输出接口;
1个3.5mm音频输入接口;
1个3.5mm音频输出接口
开关、按键和LED:
按键开关x 4、拨动开关x 2、LED x 4、 RGB LED x 2
USB接口:
Micro USB-UART 接口;
Micro USB-JTAG 接口;
USB OTG PHY(仅支持主机)
以太网:
千兆以太网接口
扩展IO接口:
PMOD标准接口 x 2;
Arduino分布接口x 1;
Raspberry Pi分布接口x 1
首先,参考官网可知:镜像版本与Vivado版本密切相关,下载前请对照查阅。
下载pynq镜像并解压后,还需将其烧写进入SD卡内。
对于Windows用户,官网下载“Win32 Disk Imager”下载链接如下所示:
Win32 Disk Imager download | SourceForge.net
(我电脑无sd卡槽,用的usb口的读卡器)请注意,烧写镜像过后,SD卡将被划分为两个分区G、H。曾经烧写过pynq镜像的SD卡无法覆盖烧录,需要重新格式化、合并分区。
1.将“1”标注处跳线帽设置到SD位置。(使板子从Micro SD卡boot启动)
3.将“2”标注处跳线帽设置USB上,使用micro USB电缆为板供电。(也可以通过将跳线设置为REG,从外部12V电源调节器为板供电。)
3.将装有PYNQ-Z2镜像的Micro SD卡插入板下方的Micro SD卡插槽
4.将USB线连接到PC/笔记本电脑,并连接到板上的PROG-UART MicroUSB端口
5.连接以太网端口
6.将电源开关滑动至ON位置以打开板。
开启后,红色指示灯将立即亮起,以确认电路板已通电。几秒钟后,黄色/绿色/完成LED将点亮,表示Zynq®设备正在运行。
一分钟后,两个蓝色LED和四个黄色/绿色LED同时闪烁。蓝色指示灯将打开和关闭,而黄色/绿色指示灯保持打开。表示系统已启动,可供使用。
官网链接:PYNQ-Z2 Setup Guide — Python productivity for Zynq (Pynq)
Pynq需要以太网口与宿主机交互,并且您需要具有配置网络接口的权限。通过直接连接,才能够使用PYNQ,参考官网,提供了以下两种方案:
(1).直接连接到计算机(静态IP):(笔者选择这个方法,需要分配静态IP地址)
首先,将板子连接到计算机的以太网端口,修改宿主机IP:通过xshell-ifconfig查询可知:板子IP为192.168.137.172(笔者已将IP修改为192.168.137.172)那么要求宿主机IP地址为192.168.137.x。
如果您的板子初次使用,初始IP为192.168.2.99,请设置192.168.2.x。
在网络选项内“修改适配器选项”目录下,选择以太网,右键,并选择“属性”
将ip地址选择为“静态”,地址192.168.137.x(请您务必不可设置与板子IP地址重复)接下来测试是否链接成功:
Win+R运行cmd 输入命令ping 192.168.137.172,ping通即为成功,如下图所示。
(2).连接到网络路由器(动态IP)
如果连接到路由器或带有DHCP服务器的网络,pynq板会自动获得一个IP地址。请注意,您必须确保有将设备连接到网络的权限,否则电路板可能无法正确连接。
首先连接到路由器/网络(DHCP),同时将板上的以太网端口连接到路由器/交换机,然后将计算机连接到路由器/交换机上的以太网或WiFi,跳转到http://
通过浏览器,打开 http://pynq:9090 或 http://192.168.2.99:9090 用户名和密码都是 xilinx,输入密码即可进入界面