首页 / 一种快速实现FPGA动态部分重构方法

一种快速实现FPGA动态部分重构方法实质审查 发明

技术领域

[0001] 本发明属于FPGA动态重构技术领域,具体涉及一种快速实现FPGA动态部分重构方法。

相关背景技术

[0002] FPGA的动态可重构技术,是指采用分时复用的模式让不同任务功能的Bitstream文件使用FPGA芯片内部的各种逻辑资源,使得同一个逻辑电路在不同时间段上加载不同的功能模块,使FPGA内部资源的利用率得到很大提升,其中Bitstream文件是一种二进制文件,用于存储和传输数字信号处理系统中的配置信息
[0003] FPGA的动态可重构又可以分为动态全局可重构和动态部分可重构。动态全局可重构是指上位机给FPGA芯片加载一个全新的配置文件,上一个任务的所有逻辑电路将全部消除。相比于动态全局可重构,动态部分可重构(Partial Reconfiguration)具有更大的灵活性。动态部分可重构只需要针对两个(或多个)功能需求之间不同的部分逻辑功能生成配置文件,并加载到FPGA中指定的可重构区域进行重新配置,而在FPGA中指定的静态区域中的逻辑电路并不需要发生改变。
[0004] 动态部分可重构因为只重构部分区域,所以配置文件中的重构内容也相应变小,重构时间也随之缩短。一般情况下,要重新配置一个FPGA需要使其处于复位状态,并通过外部控制器重新加载一个新设计到器件中。局部重配置技术允许加载一个局部设计到FPGA的一个可重配置模块中时,设计中的其他部分仍能继续正常工作。
[0005] 目前常见的FPGA的在线部分重构方法,一般是采用将多个程序文件预先存入硬件电路中,通过命令寻址的方式选择加载某个程序,该方法灵活性差,使用过程受到一定的局限。

具体实施方式

[0035] 下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,另外,在以下的实施方式中记载的各结构的形态只不过是例示,本发明并不限定于在以下的实施方式中记载的各结构,在本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施方式都属于本发明保护的范围。
[0036] 实施例1,
[0037] 参照图1‑图7,本实施例使用的硬件平台是黑金系列开发板,FPGA是Xilinx K7系列,具体型号是xc7k325tffg900‑2,实现功能是通过PC机将可重构模块的bin文件从PCIe口下载到板卡中,在线实现FPGA的局部功能重构。在Xilinx K7系列FPGA中采用XDMA IP核实现PC机和电路板的高速通信,以200MHz的时钟将Bitstream文件写入到RAM中,然后从RAM中以100MHz的时钟读取Bitstream文件到ICAP中,实现动态部分可重构。
[0038] 为方便功能演示,工程中设计了两个可相互替代的可重构模块,控制led3和led4两灯:
[0039] 模块Led123:两个led灯按“灭亮(01)—亮灭(10)—亮亮(11)”的顺序循环显示,即123循环。
[0040] 模块Led20:两个led灯按“亮亮(11)—灭灭(00)”的顺序循环显示,即同亮同灭。
[0041] 静态部分控制led2灯:进行“亮—灭—亮—灭”循环闪烁。
[0042] 最终生成4个bin文件,如表1所示,两个主文件任选一个作为第一次烧写的文件,然后两个可替换文件任选一个通过PCIe接口进行在线下载重构。
[0043] PCIe实现动态部分可重构的软件由三部分组成:FPGA端程序、PCIe卡驱动、PCIe上位机测试程序。总体架构设计和FPGA端程序属于本发明内容,驱动和上位机是Xilinx官方发布。
[0044] FPGA程序的总体设计架构如图2所示,图中XDMA是一种PCIe的IP核,需要进行参数配置;BRAM是一个双口RAM,用于缓存PC机发来的bin文件;ICAP是原语,负责将bin文件自动分配到相应寄存器,实现加载重构;PR是指定的可重构模块。
[0045] FPGA输入时钟有两个,分别是PCIe输入的200MHz差分时钟和开发板自带的100MHz的差分时钟。Xilinx K7系列的FPGA中,ICAP时钟不能大于100MHz,而PCIe总线时钟是200MHz,所以设计中采用了BRAM而不是FIFO。
[0046] 当上位机通过PCIe口下载bin文件时,BRAM的A端口地址从0x0开始递增,当系统检测到A端口地址超过某一门限时,启动BRAM的B端口读取,由于BRAM写入速度比读出速度快,所以B端口为连续读出,直到地址超过某一门限。从BRAM B端口读出的数据经过转换后送入ICAP中,实现动态重构。
[0047] PCIe通道设计部分采用Block Design的形式,如图3所示,PCIe的200MHz差分时钟经过buf送入XDMA模块,数据流依次通过XDMA、连接器、Bram控制器,最终送入BRAM中。
[0048] XDMA for PCIe模块的具体设计如图4所示,在Basic页中,模式选择Advanced,Lane Width采用x8设计,最大速度5G,AXI数据宽度128bit,DMA接口选AXI内存映射(AXI Memory Mapped);DMA页的读写通道各设置2。
[0049] BRAM模块的具体设计如图5所示,采用双端口设计,端口A为200MHz写入端口,端口B为100MHz读出端口,设计BRAM容量2M,可扩展。BRAM的A端口和B端口数据宽度均为32,因此写入或读取时其地址以4为单位递增,写入或读取完成后,相应的地址恢复0x0.[0050] 经验证,生成bin文件时如果通过约束文件采用压缩的方式,不影响bin文件的下载重构功能。PCI时钟100MHz时也能正常工作。
[0051] Xilinx FPGA内部配置访问端口ICAP的主要作用是能让用户在FPGA逻辑代码中直接读写FPGA内部配置寄存器从而实现特定的配置功能。
[0052] 本发明中ICAP的具体调用如图6所示,K7系列FPGA的ID指定为h3651093,数据宽度32,时钟100MHz,输入数据32位,输入可悬空。特别注意3点:一是ICAP使能是低有效;二是送入的32位数据,需要高低位反转;三是K7系列ICAP支持的最高时钟是100MHz。
[0053] 可重构工程设计过程如下:
[0054] a、首先按正常流程创建工程
[0055] 这部分包括工程取名,选择芯片型号和程序设计,并确保程序正确。
[0056] b将工程转换成支持部分可重构类型的工程
[0057] 选择Tools‑>Enable Partial Reconfiguration...选项,将工程转换成支持PR类型的工程,指定可重构模块,并将所有可互换的模块加入工程。
[0058] c.综合并绘制Pblock
[0059] 综合完成后,点击Open Synthesized Design打开综合设计,在netlist界面下为可重构模块划分重配置的区域。
[0060] d.生成bin文件。
[0061] 按正常操作生成Bitstream文件,完成后在工程目录run下会有表1所列的相关文件,必要时将bit文件转换为bin文件。
[0062] 表1最终生成Bitstream文件汇总表
[0063]
[0064] 测试实现过程如下:
[0065] 测试实现大致分为三部分:烧写程序,安装pcie驱动,操作上位机。
[0066] 首先,将bin文件烧写入FPGA,这里选择impl_1或child_0_impl_1下的全局bin文件。
[0067] 其次,安装驱动。在电脑关机状态下将开发板插入PC机的PCIe卡槽,然后打开PC机,采用Xilinx官方提供的驱动。如果FPGA程序设计错误,可能会驱动安装不成功。
[0068] 最后,调用官方提供的上位机进行程序下载。在Cmd界面下调用xdma_rw.exe,如图7所示,并附加一些命令和条件,其中h2c_0表示从主机到终端的通道,write表示写操作,
0x0表示写入的起始地址,‑f表示写入的是file,后面是可重构文件。
[0069] 需要注意的是,下载文件是bin文件而非bit文件。在不断电的情况下,led123和led20的bin文件可反复切换。
[0070] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页 第1页 第2页 第3页