当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]本项目演示了如何在Vivado中创建一个简单的PL设计来控制KR260载波板上的用户定义LED (DS7和DS8)。该设计使用了一个通过AXI SmartConnect连接到Zynq UltraScale+处理系统(PS)的AXI GPIO IP核,实现了在APU上运行的Linux对led的软件控制。

本项目演示了如何在Vivado中创建一个简单的PL设计来控制KR260载波板上的用户定义LED (DS7和DS8)。该设计使用了一个通过AXI SmartConnect连接到Zynq UltraScale+处理系统(PS)的AXI GPIO IP核,实现了在APU上运行的Linux对led的软件控制。

这是针对Xilinx KR260的自定义Yocto Linux和网络启动的后续项目,该文章提供了具有PYNQ、XRT和网络启动功能的基础Linux环境。

问题陈述

在KR260上开发FPGA应用时,通常需要:

•创建与PS交互的定制PL设计

•快速原型和测试硬件设计,没有冗长的编译周期

•在与更复杂的应用程序集成之前验证硬件功能

•准备与RPU固件或自定义Linux驱动程序集成的硬件设计

传统FPGA开发工作流程要求:

•编写HDL代码或使用IP积分器

•综合和实现设计

•生成比特流

•闪烁SD卡或手动加载比特流

•编写C/ c++应用程序与硬件交互

这个项目通过以下方式简化了这个工作流程:

•使用Vivado的IP Integrator进行视觉设计

•利用PYNQ进行基于python的硬件交互

•通过网络引导和动态比特流加载实现快速迭代

系统架构

硬件体系结构

PL设计包括:

软件架构

设计组件

Zynq UltraScale+ PS: ARM Cortex-A53内核的处理系统

•M_AXI_HPM0_LPD: PL访问的低功率域主端口

•PL_CLK0: 100mhz时钟输出到PL

•PL_RESETN0:复位信号到PL

AXI SmartConnect:用于AXI总线路由的互连IP

•连接PS主站到PL从站

•处理协议转换和地址映射

axis GPIO:通用I/O IP核

•2位输出通道(GPIO[1:0])

•AXI4-Lite从接口

•基址:由Vivado分配(通常在LPD地址空间0x80000000-0x9FFFFFFF中)

Processor System Reset:复位控制器

•同步复位信号

•提供重置到PL逻辑

先决条件

以前的项目设置

本项目假设您已经完成了Custom Yocto Linux & Network Boot项目,该项目提供:

•可网络引导的Yocto Linux镜像

•PYNQ 3.1.2 runtime

•XRT和ZOCL支持

•在端口9090上的Jupyter Notebook服务器

•挂载在/nfsroot的NFS根文件系统

循序渐进的指导

步骤1:创建Vivado项目

•启动Vivado并选择Create Project

•项目设置:项目名称:gpio_led

•项目位置:选择您的工作空间目录项目类型:RTL项目(默认)

•添加源:单击Next(我们将使用IP Integrator创建设计)

•添加约束:单击Next(稍后我们将添加约束)

•默认部件:选择“KR260”的“Boards”选项卡,选择“KR260 Robotics Starter kit”,单击“Next”,完成

步骤2:创建块设计

•在流程导航器中,单击创建块设计名称:gpio_led

•单击OK

•添加Zynq UltraScale+ PS:单击图中的“+”按钮搜索Zynq UltraScale+ ps双击添加“zynq_ultra_pse_0”

•配置PS:双击PS块在PS配置窗口,导航到PS- pl配置→GeneralEnable M_AXI_HPM0_LPD(低功耗域主端口)单击运行块自动化这将启用M_AXI_HPM0_LPD, PL_CLK0和pl_resetn0单击确定

步骤3:添加AXI GPIO IP

•添加AXI GPIO:点击+按钮搜索AXI GPIO双击添加ax_gpio_0

•配置AXI GPIO:双击GPIO blockGPIO:Check All OutputsGPIO Width: 2单击OK

•运行连接自动化:

•单击“运行连接自动化”

•选择全部自动化

•这将:连接PS M_AXI_HPM0_LPD到AXI smartconnect连接AXI SmartConnect到AXI GPIOConnect时钟和复位信号

•单击OK

步骤4:使GPIO外部

•创建外部端口:右键单击ax_gpio_0 GPIO端口选择Make ExternalRename the Port to led_output

•验证设计:单击验证设计(F6)确保没有错误或严重警告

•创建HDL包装器:右键单击源代码中的gpio_led块设计,选择创建HDL包装器,选择让Vivado管理包装器并自动更新,单击OK

步骤5:添加引脚约束

•创建约束文件:在“源”中,右键单击“约束”→“约束”,选择“添加源”→“添加或创建约束”,单击“创建文件”,文件名:gpio_led.xdc

•单击OK并完成

添加引脚约束:打开gpio_led。XDC并添加:

•保存约束文件

步骤6:综合设计

•运行合成:在Flow Navigator中单击Run Synthesis等待合成完成(5-10分钟取决于PC)

•评审综合结果:检查是否有错误或严重警告,验证资源利用是否合理

步骤7:执行设计

•运行实现:点击运行实现等待实现完成(10-20分钟,取决于PC)

•检查实现结果:检查定时关闭验证无严重警告

步骤8:生成比特流

•生成比特流:单击“生成比特流”,等待比特流生成(PC机不同,需要5-10分钟)。

•校验输出文件:生成比特流后,校验这些文件是否存在:gpio_led.runs/impl_1/gpio_led_wrapper.bit - bitstream filegpio_led.gen/sources_1/bd/gpio_led/ hw_handdoff /gpio_led. gen/hwh -硬件描述

步骤9:导出硬件

•导出硬件:在Flow Navigator中,进入File→Export→Export HardwareSelect Include bitstreamClick NextExport位置:Default(项目目录)文件名:gpio_led.xsa

•单击“完成”。xsa文件将在下一个项目中用于RPU与Vitis的集成。

步骤10:将文件复制到NFS共享

•定位生成文件:Bitstream: gpio_led_runs /impl_1/gpio_led_wrapper.bit

•硬件描述:gpio_led.gen/sources_1/bd/gpio_led/hw_handoff/gpio_led.hwh

•拷贝到NFS根目录:在你的NFS服务器上(/nfsroot挂载的地方):

步骤11:创建PYNQ笔记本

•创建笔记本文件:创建led_blink_pynq。“/nfsroot/home/xilinx/Notebook/”目录下的ipynb

•或者将其创建为Python脚本并进行转换,或者使用Jupyter的web界面。

步骤12:在KR260上验证

•运行Notebook:执行第一个cell以重置pl_execute第二个cell以加载比特流并运行KR260板上的LED patternObserve LEDs DS7和DS8

预期的行为:

•预期行为:LED0 (DS8)和LED1 (DS7)将以行走模式闪烁:模式1:LED0 ON, LED1 OFF (0x1)模式2:LED0 OFF, LED1 ON (0x2)模式3:Both LEDs ON (0x3)模式4:LED0 OFF, LED1 ON (0x2)重复5次,循环之间暂停0.5s

了解守则

PYNQ叠加加载

PYNQ的Overlay类:

•将比特流加载到FPGA中

•解析。了解HWH文件的硬件结构

•为每个IP核创建Python对象(例如,overlay.axi_gpio_0)

AXI GPIO访问

•axi_gpio_0是来自于Vivado块设计的实例名

•channel1是GPIO通道(channel1是第一个通道)

•GPIO对象提供read()和write()方法

LED控制

•pattern:要写的值(0x0到0x3为2位)

•mask:表示要影响哪位的位掩码(0x3 =两个位)

设计注意事项

PS-PL接口选择

•使用M_AXI_HPM0_LPD(低功率域)代替FPD(全功率域)

•原理:GPIO控制需要低带宽,使LPD理想的功率效率

•LPD为GPIO操作提供了足够的性能,同时功耗更低

•FPD端口更适合高带宽应用(视频处理、DMA等)。

时钟域

•PL时钟:100 MHz(来自PS PL_CLK0)

•AXI总线时钟:100mhz(与PL时钟同步)

•GPIO更新速率:受Python循环速度限制(本例中为~ 4hz)

GPIO配置

•所有输出:GPIO配置为仅输出(无输入能力)

•宽度:2位(匹配两个led)

•I/O标准:LVCMOS18(兼容KR260 HP bank)

地址空间

•AXI GPIO基址:0x80000000 (LPD地址空间)

•地址范围:64 KB(标准的AXI4-Lite slave)

•可以通过PYNQ从Linux用户空间访问

注:LPD (Low Power Domain)使用0x80000000地址范围,适用于GPIO和其他低带宽外设

下一个步骤

该项目为更高级的PL开发提供了基础:

•增加更多的GPIO:扩展到控制额外的led或读开关

•自定义IP集成:在设计中添加自定义AXI IP内核

•中断支持:为事件驱动控制配置GPIO中断

•RPU集成:将LED控制逻辑移动到RPU(见下一个项目)

•下一步:RPU与FreeRTOS集成

本系列的下一个项目将演示:

•使用赛灵思Vitis Unified IDE为RPU构建FreeRTOS应用程序

•使用XRT从APU加载PL位流

•使用remoteproc框架加载RPU固件

•通过libmetal和OpenAMP实现APU-RPU通信

•APU、RPU和PL之间的共享内存

•实时LED控制从RPU,而APU处理高级任务

这将展示KR260的完整异构计算能力,结合:

APU:用于高级控制和网络的Linux

•RPU:用于实时、确定性任务的FreeRTOS

•PL:定制硬件加速器和I/O

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭