Xilinx FPGA 重加载 + 动态刷新

本文以Xilinx的v5和K7系列FPGA为例, 讲解重加载和动态刷新功能。同时简单描述国产复旦微电子FPGA的加载和刷新功能的注意事项。

1. 重加载功能:

在远程加载或不方便使用JTAG的情况下,一般设计上使用 微处理器、CPLD、或不易被单粒子打翻的Flash型FPGA, 对xilinx FPGA在线加载bit文件。一般使用Slave Select Map 接口加载bit文件,本文以Slave Select Map接口为例。

硬件连接上满足如下关系:

a. 模式选择:M[2:0]=“110”
b. Slave Select Map配置接口需要连接到微处理器、CPLD、或 不易被单粒子打翻的Flash型FPGA上。
c. 需要关注上述接口的上下拉情况。
d. 微处理器、CPLD需要连接存储器或对外通信接口,用于接收配置文件(bit文件或bin文件)。
Xilinx FPGA 重加载 + 动态刷新_第1张图片
整体加载过程如下:
a. FPGA上电;
b. 清除FPGA配置。
c. 采集加载模式,判断M[2:0]引脚。
d. 加载配置文件;
e. StartUp。
简而言之,在上电清除FPGA配置后,将bit文件加载到Slave Select Map接口即可。(8x模式下可以直接将bit文件加载到配置接口,16x或32x模式下需要将bit文件头部ASCII符号部分丢弃)

Xilinx FPGA 重加载 + 动态刷新_第2张图片

加载时序如下:

a. 首先在接口上,将PROGRAM_B信号拉低,使被加载的FPGA的配置进行复位。
b. 等待INIT_B为低时,表示FPGA配置复位完成,此时可以拉高PROGRAM_B信号。如果不加判断INIT_B信号,则要求PROGRAM_B至少拉低3ms,复旦微FPGA配置复位时间较长,要求至少拉低20ms。
c. 等待INIT_B信号拉高。(不判断该信号时等待3ms后进行后续操作即可。复旦微FPGA等待20ms)
d. 拉低CS;
e. 产生时钟CCLK。(建议: 8x模式下不超过2.5MHz, 16x模式下不超过1MHz,如果进行IOB约束或时序约束可以提高时钟频率)
f. 在CCLK上升沿时将数据送到配置接口的数据线上。
具体配置过程可参考《ug470-7 Series FPGAs Configuration》。

Xilinx FPGA 重加载 + 动态刷新_第3张图片

大小端转换:在将bit文件送到Slave Select Map接口前,需要对数据内容进行大小端转换:以字节为单位,单字节内部,高低bit取反,具体描述如下:
Xilinx FPGA 重加载 + 动态刷新_第4张图片

约束要求:
在XDC文件里需要约束如下:
本文以16x为例,如果用8x或32x需要更改约束里对应的数值。

set_property CONFIG_MODE S_SELECTMAP16 [current_design]

2. 动态刷新功能:

对设备运行稳定性有要求,或航天设备上,一般对SRAM型FPGA都有动态刷新的要求,既要求几分钟刷新一下正在运行的FPGA的配置,同时要求被刷新FPGA不能停止工作。

动态刷新使用的接口与上述重配置接口一致,配置时序几乎一致。但是需要跳过拉低PROGRAM_B和等待INIT_B的过程。同时需要添加以下约束。

约束要求:
在XDC文件里需要约束如下:

set_property BITSTREAM.GENERAL.CRC DISABLE [current_design]
set_property CONFIG_MODE S_SELECTMAP16 [current_design]
set_property BITSTREAM.CONFIG.PERSIST YES [current_design]
set_property Bitstream.general.glutmask_b "0" [current_design]

上述约束解释如下:
第1条:DISABLE CRC,部分情况下有可能需要替换bit文件中部分寄存器的值,如果不替换其实可以去掉本条。(建议保留)

第2条:设置Slave Select map接口位宽,与上述重加载一致。

第3条:正常加载完FPGA工作后,Slave Select map接口就会被当成user io使用了,除非重新拉低program_B信号重新加载bit文件。但是刷新的目的就是在fpga不停止工作的情况下,将fpga配置进行不停的刷新替换。因此该约束是让FPGA工作起来之后,Slave Select map接口依旧保持配置接口的功能,以便不停的将配置文件送入FPGA,达到刷新的效果。

第4条:在刷新过程中不对动态值进行修改。因为配置文件中除了包括CLB、DSP等普通配置外,还包括RAM的内容值,即我们使用RAM的初始值COE/mif文件在bit文件中的部分,这些初始值可能在使用过程中随着用户功能而发生改变(还有一些ip核的drp功能也会受影响,在此不做过多介绍),因此如果将正在运行的RAM的内容值替换成bit文件中的初值可能会导致功能出错。该约束的目的就是让FPGA判断到输入的配置文件的当前字段是动态值部分时,跳过该部分字段,只对静态配置进行刷新替换。

你可能感兴趣的:(笔记,FPGA,嵌入式,fpga)