ZYNQ PS动态配置PL动态加载

  1. 环境搭建
    Zynq-7000的结构分为PS(ARM)和PL(FPGA),当然也可以理解为PL作为一种外设挂载在PS端。在正常的系统加载顺序(FALSH \ SD -> FSBL -> PL ->BITSTRAM ->PS ELF)完成后重新配置PL程序,可以利用XLINX官方BSP逻辑xdecfg_polled_example的Demo例程实现PS配置PL比特流,将指定DDR空间的数据配置到FPGA。具体的平台启动方式如图1-1。
    在这里插入图片描述
    1.1 Vivado工程创建
    选择create project 创建工程名称,选择存储位置
    在这里插入图片描述
    在这里插入图片描述

选择RTL project,勾选下方选项会省略添加源文件和约束文件步骤,之后直接进行芯片的选型,对照芯片丝印或者电路图选择合适的芯片型号即可。(在选型时可先选封装类型)工程创建完成。
在这里插入图片描述
在这里插入图片描述
点击Create Block Design 并设置Design name。在Digram点击“+”,输入Zynq添加Zynq7。
在这里插入图片描述
在这里插入图片描述
之后可以双击Zynq7 根据项目进行相应的配置,注意DDR的型号以及时钟频率的对应即可。配置完成后按F6 Validata Design。有错误需要仔细检查配置问题。

生成顶层HDL模块。
之后在hierarchy界面右击sysstem.bd,然后生成“Create HDL Wrapper”,并确认勾选
“ Let Vivado manage wrapper and auto-update”,完成后会有品字型标志。
在这里插入图片描述

在这里插入图片描述
下面的步骤以PL的重配置为例。
本平台的核心选择为XC7Z045,配置挂载在PS上位UART1以及挂载在PL的UATR0。在配置完成后点击Flow Navigator列表将解析的网表进行分析和约束。在I\O ports界面根据电路原理图配置相应的管脚。完成配置后点击Generate Bitstream。
为验证可重配置结果的正确性,除了利用挂载在PL的串口完成打印作为一种PL的配置方式之外还要选择另一种配置方式作为重配置。这里选择挂载在PL端口的LED灯。

生成LED工程步骤如下:
Ÿ 按照上述工程创建步骤至完成工程的创建、
Ÿ 直接点击Source栏的“+”,如下图:

在这里插入图片描述
Ÿ 弹出的界面为添加或者创建文件,由于并没有提前编写的代码,我们选择create file创建一个新的设计文件。
Ÿ 成功创建文件后会弹出定义模块界面,用于设置源文件的模块名称和端口列表,如果是手动输入代码。这里并不需要设置,直接OK即可。之后弹出界面直接YES即可。
Ÿ 双击Design Sources栏内刚创建的 .v 文件,根据需要编写代码。
Ÿ Vivado会对代码进行语法检查,且大多数情况下IDE会自动识别设计的定成模块。也可通过Source 栏的右击菜单选择Set as Top手动定义顶级模块。
Ÿ 分析与综合 完成代码编写后,点击 Flow Navigator窗口的 Open Elaborated Design进行检查,根据error和warning对代码进行相应的更改。这部分完成后窗口会新增Schematic(原理图)、Netlist(网表)等窗口。
Ÿ 之后可以进行I\O引脚的分配,但是一般选择先对设计进行综合,综合之后再统一输入时序约束和IO引脚的物理约束。
关闭分析后的界面,点击Flow Navigator窗口中的Run Synthesis对代码进行综合,在弹出的窗口中直接点击OK
在这里插入图片描述
约束输入,创建约束文件,点击Source栏中的“+”,如下图
在这里插入图片描述

成功创建 .xdc 文件后按照设计要求和电路图进行管脚和时钟约束。例:
在这里插入图片描述
注:
时钟周期约束 create_clock –name clk –period 20 [get_ports sys_clk]
创建一个名为clk 时钟周期为20ms,时钟源是sys_clk的端口,一般只对输入的
时钟作周期的约束。周期值设置不应太小。相对简单的设计可以不对工程做时序
约束,并不影响功能,但是复杂设计和输入时钟频率较高时不进行约束可能会产
生未知情况。
Ÿ 约束输入完毕后进行实现设计,点击Flow Navigator 窗口的Run Implementation根据提示完成设计,实现完成后直接Cancel提示窗口。
Ÿ 生成BitStrream
在这里插入图片描述
Ÿ 生成Bitstream后点击file -> Export -> Export Handware注意在Export Handware 界面勾选 Include Bitstream。
启动SDK,进入软件设计。点击file –> launch SDK。
1.2 SDK环境使用
本节将同样以PL重配置的设计进行解析。
SDK打开后会自动显示system.hdf的内容,此标签页会显示整个PS系统的地址映射信息。在启动SDK之前,我们将硬件以一个ZIP压缩文件的形式导出到软件工作空间,在打开SDK时会自动解压,得到system_wrapper_hw_platform_0文件夹,这个文件夹在每次硬件更新后会在软件环境更新,我们需要尽量保证只有一个,可以在软件环境中删除或直接在资源管理器中删除多余的。此文件夹前4个文件包含Zynq SoC处理系统的初始化代码,以及DDR、时钟、PLL、MIO的初始化设置信息。在初始化过程中,SDK使用这些信息去配置相应的模块,使得应用程序能够在PS上运行。
在这里插入图片描述
创建SDK工程
Ÿ 菜单栏 File -> New -> Application Project,创建一个SDK应用工程。
Ÿ 按照提示设置工程名,注意不要直接finish,点击Next
Ÿ 在弹出界面选择 空工程, Empty Application
Ÿ 创建后SDK会创建一个name应用工程以及name_bsp的板级支持包(BSP)工程,且会自动编译生成name.elf文件
Ÿ 最后在name工程下的src文件夹添加相应的源文件和头文件进行下载验证即可。

  1. PS重配置PL的实现
    所谓重配置,即在当前硬件比特运行期间,有一份新的比特通过网络、串口等等其他方式传输到平台,平台将其存储在Falsh、DDR等外部存储介质中,随后将硬件在不断电的情况下配置成新的比特流。
    对bitstream可以大致分为以下几种情况:
    Ÿ 调试阶段,来自环境 (JTAG)
    Vivado下载:Program and debug –> Open Hardware Manager -> open target -> auto connect -> program device 在弹出界面选择bit文件下载即可
    SDK环境可在run configuration界面选择需要的配置
    Ÿ 固定启动,来自外部存储设备,将比特流固化到存储介质,并选择相应的启动方式。
    Ÿ 动态配置,即上述所说的不断电更新。数据来源一般是下图中的DRAM。

在这里插入图片描述
上图的Secure安全启动是指比特流会经过AES等安全模块的校验,再配置到硬件。
在搭建好硬件及软件环境后,要实现PS重配置PL我们需要2个条件,其一是两份不同表现的PL实现的Bin文件,其二是软件部分DEVC 的正确配置使用。
2.1 Bin文件的制作
要想顺利进行PL的程序替换,我们首先需要准备一份用来替换的bin文件,因为加载所需的文件不能使 .bit 文件。在目前的系统中对于Bin文件的制作需要注意下列几个问题。
首先,Bin文件的制作方式问题。目前为止已知的Bin文件制作方式主要有以下3种方式。
SDK环境下的Create boot Image。打开SDK环境后按照正常流程新建工程,选择下图的工程类型
在这里插入图片描述
在这里插入图片描述
创建完成后等待自动编译完成,之后打开Xilinx Tools中的Create Boot Image开始创建Boot.bin。打开原工程文件partitions 会自动列出name.elf和name.bit,需要把fsbl.elf添加进第一项,顺序不能错。点击create image即可
在这里插入图片描述
Ÿ Vivado生成设置,右击Program And Debug -> bitstream setting -> 勾选-bin_file。即可
Ÿ TCL脚本语句生成,生成语句及参数
write_cfgmem -format bin -loadbit “up 0x0 Led1_Blink.bit” -file LED.bin -size 128 -force -interface SMAPx32 -disablebitswap
在这里插入图片描述
对于本系统来说这种生成方式是唯一可以顺利配置的方式,即只能使用TCL语句生成的Bin文件。
还需注意一点的是bit文件的大小,在此版本中默认bit文件不压缩,不压缩的bit文件无法使用。需要在tools-> settings的界面进行压缩设置。

在这里插入图片描述
在这里插入图片描述
注:不能直接进入setting界面,需要先对项目进行编译之后点击Open Elaborated Design之后进入,同时网络上描述的添加压缩约束语句对本系统无效。
由此我们可以顺利制作两份Bin文件,一份UART串口打印功能,一份点亮LED功能(更好是闪烁,但是本平台并没有焊接晶振,为保证结果准确性并没有采用从PS拉时钟的方法)。
2.2 DEVC配置使用
首先是对两个工程进行功能性验证,勾选run configuration栏中的reset entire system和 Program FPGA下载LED的Bitstream,平台LED灯顺利点亮。
进行UART验证时,需要的表现是在SDK的串口窗口进行双串口信息的打印,但是根据Xil_printf() 函数的实现底层
在这里插入图片描述
输出地址为UART0的默认地址,所以无法进行双串口的信息打印,这里采用取巧的是实现方式,实现自己的打印函数如以实现双串口。
在这里插入图片描述
由此,两个验证性功能测试完毕。可以进行DEVC的配置和使用。
比特流从存储加载到PS中,之后进入PCAP是由处理器系统PS中的PCAP bridge负责。“桥”在PS的DevCfg中。此外设的使用和其他类似,根据官方Demo就可以进行配置。
在这里插入图片描述

PCAP(processor Configuration Access Port)处理器配置接口,“桥”的两端连接PS AXI和PL PCAP,沟通软件和硬件。比特流的搬运由专用DMA完成,提高速率,可以更快的部署。
Xilinx平台有两种比特动态重配置,即部分重配置和完整重配置。部分重配置速度快,毫秒级,实现复杂。更多实现的是完整重配置。软件动态重配置在Linux下可以通过DevCfg驱动进行,裸板的实现可以参考官方Demo例程。
首先进行代码的编写,根据官方例程可以写出如下的程序:
初始化函数

在这里插入图片描述
在原始Demo里有两个关键的宏定义BIT_STREAM_LOCATION 和BITSTREAM_SIZE_WORDS。需要注意的是BIT_STREAM_LOCATION要修改为适合系统的地址,默认地址不可用。BITSTREAM_SIZE_WORDS是以32bit表示大小,所以要对bin文件长度进行计算(length/4)。在写入bin文件时以16进制表示长度。PL的可配置函数实现如下:
在这里插入图片描述
只执行此函数并不能完成对PL的重配置,解决方法参考ug585如下:
在这里插入图片描述
不能完成重配置原因自于没有对PL进行复位,上述5步操作描述PS对PL执行清除比特流并复位。实现代码如下:
在这里插入图片描述
完成代码编写后进行板级验证:
首先将bin文件放置到板子的DDR,菜单栏Xilinx -> Dump/Restore Memory
在这里插入图片描述
将LED.bin文件写入DDR后运行程序,注意不勾选reset entire system和 Program FPGA,顺利点亮LED,然后更换UART.bin文件。
在这里插入图片描述
在这里插入图片描述
顺利重新配置PL

  • 2
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: zynq ps在线更新pl是指在zynq系统中,通过软件的方式在线更新programmable logic(PL)部分的逻辑设计。 首先,PL部分是zynq芯片中的可编程逻辑部分,可以用于实现各种硬件功能。而PS部分是处理系统(Processing System)部分,运行操作系统和应用软件。 在实际应用中,有时候需要对PL部分进行升级或更改,以满足新的功能需求或修复硬件问题。为了实现在线更新PL,需要做如下几个步骤: 1. 设计新的逻辑。首先,需要根据需求设计新的PL逻辑,例如通过Vivado进行硬件描述语言(如Verilog或VHDL)的编码。这些新逻辑将在PL部分中实现新的功能。 2. 将新逻辑加载PS中。接下来,将新逻辑通过软件的方式加载PS中,与PL进行通信。需要编写软件驱动程序,与PL部分进行交互,实现逻辑的加载和控制。 3. 在线更新PL。一旦新逻辑成功加载PS中,就可以开始在线更新PL部分。这可以通过软件命令或控制信号来实现,将新的逻辑写入PL配置寄存器中,从而更新PL的功能。 4. 测试与验证。完成在线更新后,需要进行充分的测试和验证,确保新的逻辑在系统中正常工作,并满足设计要求。这可能需要使用测试工具或硬件测试平台来进行验证。 总结起来,zynq ps在线更新pl是一种通过软件的方式,在zynq芯片中实现对PL部分逻辑的升级或更改。这种方法可以避免重新设计和制造硬件,提高了系统的灵活性和可维护性。 ### 回答2: Zynq PS是指Xilinx Zynq SoC系列中的处理系统(PS,Processing System),包括ARM Cortex-A9处理器和周边外设。PL是指可编程逻辑(PL,Programmable Logic),包括FPGA(现场可编程门阵列)。 在线更新PL是指在不关闭系统的情况下,对FPGA的逻辑进行更新或修改。这种功能可以实现动态配置,从而提高系统的灵活性和可扩展性。 要实现Zynq PS的在线更新PL,首先需要一个支持在线配置FPGAZynq SoC中的FPGA部分支持Xilinx的Partial Reconfiguration(PR)技术,可以在运行时部分重新配置逻辑。操作流程如下: 1. 准备逻辑更新文件:将新的逻辑设计成一个bitstream文件,并将其加载到处理器系统中,存储在特定的存储器中。 2. 软件控制逻辑更新:使用处理器系统上运行的软件控制FPGA逻辑的加载配置。可以通过读取bitstream文件,并将其发送到FPGA进行加载配置。 3. FPGA加载配置:使用FPGA的Partial Reconfiguration机制,将新的逻辑配置FPGA中。此过程可以在线进行,不需要关闭系统或重新启动。 4. 更新完成:FPGA加载配置完成后,系统可以使用新的逻辑进行运行。 需要注意的是,在线更新PL可能会引入系统的不稳定性和性能下降的风险。因此,在进行在线更新之前,应该进行充分的测试和验证,确保新的逻辑能够正确运行,并且不会对系统的稳定性和性能产生负面影响。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值