Xilinx FPGA局部重构实现

printf(“my Wchat MyWork666888”)
  • 重构技术介绍

        重构技术是一项非常实用的技术,从比特属性上来分类可以分成全部重构和局部重构。全部重构即在重构时将配置整个FPGA器件的比特文件重新加载一次,对FPGA进行一次完整的编程配置;局部重构与全部重构有所不同,局部重构时加载的比特文件只是一个部分比特,该部分比特对特定区域进行重新配置。

        针对Xilinx不同系列的器件,进行重构的方式会有所区别,对于非Zynq系列的器件,重构的实现需要借助FPGA器件之外的处理器来实现,重构接口为SelectMAP,非Zynq系列器件的重构框图如图1所示;Zynq系列的由于自身嵌入了ARM处理器,可以无需借助其他处理器而实现重构的功能,Zynq系列器件的PS侧可以通过PCAP接口对PL侧完成重构,但是Zynq7000和UltraScale+Mpsoc在具体实现时所使用的库函数会有区别,两者的重构实现不能互用。

图片

                                 图 1 非Zynq系列器件的重构框图

  • 重构设计框图

本文档主要针对的器件为UltraScale+Mpsoc系列,通过PCAP接口对PL侧进行重构,重构框图如下所示:

图片

                  图2  UltraScale+Mpsoc系列重构框图

1 重构步骤

前面对重构技术做了简单介绍,本章节通过一个具体的例子介绍局部重构的具体流程。

1.1 建立工程

建立一个空工程,详细操作在此不做详述,具体可以参考《Vivado Design Suite Tutorial Embedded Processor Hardware Design》,建立好的工程截图如下:

图片

                                       图 3 初始空工程

1.2 建立BlockDesign

详细操作在此不做详述,具体可以参考《Vivado Design Suite Tutorial Embedded Processor Hardware Design》,建立BlockDesign后,加入一个Zynq Mpsoc IP核,需要指出的是,为了能实现重构,需要在此IP核中使能SD卡,DDR以及UART(方便调试),并根据硬件的实际情况对它们的参数进行设置。添加两个GPIO,整个BD连接图如下:

图片

                                             图 4 BD连接图

图片

                                     图 5 input GPIO的参数设置

图片

                                       图 6 output GPIO的参数设置

设置完成后,进行校验,然后生成design_1_wrapper

1.3 加入工程文件

读者根据实际情况添加设计文件,本例子需要添加的文件如下:

图片

                                            图 7 添加设计文件

1.4 使能局部重构

需要的文件添加完毕后,通过 “Tool”下拉菜单使能局部重构,该功能需要证书,请确保使能时已加入可用的证书。

图片

                                            图 8 使能局部重构

1.5 创建PD

工程被指定为可重构工程后,就可以在需要重构的模块上点击右键,在下拉菜单中选择“Create Partition Definition”来将模块指定为可重构模块。在弹出的对话框中设置好PD名和RM名

图片

                                                  图 9 创建PD

1.6 使用向导创建RM

在“PROJECT MANAGER”导航栏中,点击“Partial Reconfiguration Wizard”打开部分重构RM设置向导

图片

                                   图 10 打开部分重构RM设置向导

点击左上角的“+”,添加一个RM,设置RM名为sub,其他不变

图片

                                                 图 11 设置RM名

点击左上角的“+”,添加一个RM需要的设计文件,本例程中选择“math_sub.v”

图片

                                       图 12 添加RM需要的设计文件

添加好后,工程中有两个RM,如下图所示,如还需要添加重复如前的操作步骤即可。

图片

                                            图 13 添加两个RM

点击“automatically create configurations”,工具将自动生成所有可能的配置项

图片

                                               图 14 生成配置项

自动生成的配置项如下,如需要其他配置项,点击左上角“+”自行添加

图片

                                            图 15 生成好的配置项

点击“automatically create configuration run”,工具将自动生成所有配置项的实现

图片

                                              16 生成配置项的实现

自动生成的配置项实现如下,如需要其他配置项,点击左上角“+”自行添加,否则点击“next”,完成RM配置,退出向导

图片

                                                 图 17 配置项实现

1.7 添加IP到RM

如果定义的RM中使用了IP,读者需要将IP添加到RM中,否则跳过此步骤。本例程中需要添加两个IP,其中作为加法器的IP添加方法如下:在“IP Catalog”中打开“Adder/Subtracter”,设置如下:

图片

                                             图 18 “Basic”页面设置

图片

                                         图 19 “Control”页面设置

设置完成后,点击“OK”,再弹出的如下界面中选择“Skip”,不要选择“Generate”

图片

                                                        图 20 生成IP

在生成的IP上单击右键,在下拉菜单中选择“Move to Reconfigurable Module”,在弹出的对话框中选择要移动到的RM名称,此处选择“add”,点击“OK”,即完成IP的添加。

图片

                                          图 21 选择要移动到的RM名称

减法器的添加参考前面加法器的添加方法,其设置如下:

图片

                                           图 22“Basic”页面设置

图片

                                         图 23 “Control”页面设置

最后在弹出的对话框中选择要移动到的RM名称,此处选择“sub”,点击“OK”,完成IP的添加。

1.8 综合工程

详细操作在此不做详述,具体可以参考《Vivado Design Suite Tutorial Embedded Processor Hardware Design》,在综合完成后弹出的页面中,选择“Open Synthesised Design”,点击“OK”

图片

                                    图 24 选择“Open Synthesised Design”

1.9 创建Pblock

为了将RM限制在一个指定的区域实现,需要给每个PD划定一块Pblock,具体方法如下:

在PD上单击右键,在下拉菜单中选择“Floorplanning”,在二级菜单中选择“Draw Pblock”,在“Device”界面中划定区域。

图片

                                             图 25 划定Pblock

在弹出的对话框中设置“Pblock”名,点击“OK”

图片

                                           图 26 设置“Pblock”名

为了保证Pblock设置的正确性,需要对Pblock进行DRC,点击Reports,在其下拉菜单中选择“Report DRC…”,弹出如下对话框,在“Rules”中勾选上“Partial Reconfiguration”,点击“OK”

图片

                                               图 27 设置DRC

如果DRC没有错误,保存Pblock约束

图片

                                         图 28 保存Pblock约束

1.10 生成比特流文件

详细操作在此不做详述,具体可以参考《Vivado Design Suite Tutorial Embedded Processor Hardware Design》。该步骤中工具会生成所有需要的bit文件,包括完整的bit文件和部分bit文件。

1.11 导入SDK

详细操作在此不做详述,具体可以参考《Vivado Design Suite Tutorial Embedded Processor Hardware Design》。

1.12 建立用户工程

详细操作在此不做详述,具体可以参考《Vivado Design Suite Tutorial Embedded Processor Hardware Design》。

1.13编写编译代码

完成前面的步骤之后就可以建立自己的用户程序,本例程在建立好用户工程中,加入如下源文件,文件在工程中提供。

图片

                                            图 30 用户工程

1.14 验证调试

在进行验证调试前需要做好准备工作,由于重构时只能使用bin文件,所以需要将bit文件转换成bin文件,在Vivado中的Tcl Console中使用write_cfgmem指令可以将bit转换成bin文件,具体指令如下:

write_cfgmem -format BIN -interface SMAPx32 -disablebitswap -loadbit "up 0x0 部分比特文件名.bit" "bin文件名"

生成好的bin文件需要拷贝到Memory中,通常都使用SD卡来存储重构的bin文件。

以上准备工作就绪之后就可以Debug调试了,建议Debug调试时将启动模式设置成Jtag模式,在helloword.c文件的line192 和line230设置断点。

line192断点处gpio_data的数值为64

图片

                              图 31 line192断点处运行结果

Line230断点处gpio_data的数值为136

图片

                               图 32 line230断点处运行结果

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Xilinx FPGA的多启动实现在线升级的原理是通过使用片上ROM(Read-Only Memory)或者外部配置存储器来存储多个bit文件。在系统启动过程中,FPGA会依据配置存储器中的特定信号或引脚状态来选择加载不同的bit文件。 在实现在线升级的过程中,首先需要确保FPGA的配置存储器能够容纳多个bit文件。接下来,需要设计一个合适的控制逻辑,用于根据外部信号或者某些触发条件来选择加载不同的bit文件。 一种常见的实现方法是在FPGA片上集成一个片上ROM,将多个bit文件存储在ROM中,并且将ROM的输出与FPGA的配置引脚相连。在系统启动时,FPGA会根据ROM输出的特定值来选择加载对应的bit文件。此外,也可以使用外部存储器,例如EEPROM、Flash或者SD卡等来存储多个bit文件,并通过芯片的配置接口进行读取。 在实际应用中,可以通过编写适当的控制逻辑以及与FPGA外部接口的通信协议,实现在线升级的功能。例如,可以设计一个微处理器或者外部控制器来监测系统状态,在需要升级的时候,这个控制器会向FPGA发送信号,指示其加载使用新的bit文件。FPGA会停止当前的操作,并加载新的bit文件进行更新。完成升级后,系统即可正常运行。 总结来说,Xilinx FPGA实现多启动的在线升级是通过选择不同的bit文件来更新FPGA的配置信息。这需要使用片上ROM或者外部存储器来存储不同的bit文件,并通过控制逻辑和外部接口来实现在线升级的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值