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文件)。
在这里插入图片描述
整体加载过程如下:
a. FPGA上电;
b. 清除FPGA配置。
c. 采集加载模式,判断M[2:0]引脚。
d. 加载配置文件;
e. StartUp。
简而言之,在上电清除FPGA配置后,将bit文件加载到Slave Select Map接口即可。(8x模式下可以直接将bit文件加载到配置接口,16x或32x模式下需要将bit文件头部ASCII符号部分丢弃,建议直接使用bin文件,不需要任何处理)

在这里插入图片描述

加载时序如下:

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。(slaveSelectMap接口最好进行IOB约束或时序约束)
f. 在CCLK上升沿时将数据送到配置接口的数据线上。
g. bit/bin文件发送完成后,需要再持续提供一段时间的cclk,直到done信号拉高。
具体配置过程可参考《ug470-7 Series FPGAs Configuration》。

在这里插入图片描述

大小端转换:在将bit文件送到Slave Select Map接口前,需要对数据内容进行大小端转换:以字节为单位,单字节内部,高低bit取反,具体描述如下:
在这里插入图片描述

约束要求:
在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判断到输入的配置文件的当前字段是动态值部分时,跳过该部分字段,只对静态配置进行刷新替换。

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李不优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值