当前位置: 代码迷 >> 综合 >> XILINX FPGA固件远程更新相关资料
  详细解决方案

XILINX FPGA固件远程更新相关资料

热度:89   发布时间:2023-12-11 22:22:13.0

该笔记为转载资料
原文地址:[https://blog.csdn.net/Reborn_Lee/article/details/89490021]
1.下面的来自原文中的链接:[https://blog.csdn.net/jiuzhangzi/article/details/79471365](固件远程更新之STARTUPE2原语(fpga控制flash))

有的项目需要远程更新固件,更新完成后断电、重启即可。那远程更新是如何实现的呢?用的最多的应该是以太网或者自定义的局域网为主,当然还可以使用pcie、串口之类的,像xilinx还有golden image,以防止远程更新失败启动不起来,它主要是flash存有两个启动文件,正常情况下启动默认的,当默认的被损坏,就从备用的启动。本文章主要讲解的是STARTUPE2原语,这和远程更新有什么关系呢?请接着向下看。
我们知道,fpga掉电丢失,一般使用外部flash存储代码,flash有spi、bpi、qspi等接口,外部存储器的时钟管脚一般与fpga的CCLK_0连接,当使用远程更新时,首先fpga内部有控制flash的驱动(即逻辑控制flash时序),当然flash时钟也需要控制了,但这时时钟管脚已经连接到CCLK_0,那该如何操作啊,你直接约束分配管脚试试,是通不过的,这时STARTUPE2就派上用场了,那该如何使用呢,如下:
STARTUPE2 #(
.PROG_USR (“FALSE”), // Activate program event security feature. Requires encrypted bitstreams.
.SIM_CCLK_FREQ (0.0 ) // Set the Configuration Clock Frequency(ns) for simulation
)
STARTUPE2_inst (
.CFGCLK (), // 1-bit output: Configuration main clock output
.CFGMCLK (), // 1-bit output: Configuration internal oscillator clock output
.EOS (), // 1-bit output: Active high output signal indicating the End Of Startup.
.PREQ (), // 1-bit output: PROGRAM request to fabric output
.CLK (0), // 1-bit input: User start-up clock input
.GSR (0), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
.GTS (0), // 1-bit input: Global 3-state input (GTS cannot be used for the port name)
.KEYCLEARB (1), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
.PACK (1), // 1-bit input: PROGRAM acknowledge input
.USRCCLKO (flash_clk), // 1-bit input: User CCLK input
.USRCCLKTS (0), // 1-bit input: User CCLK 3-state enable input
.USRDONEO (1), // 1-bit input: User DONE pin output control
.USRDONETS(1) // 1-bit input: User DONE 3-state enable outpu
);

其中flash_clk就是时序控制的flash时钟信号,连接到这就可以了,其它的不需要改动,也无需约束此管脚(因为此管脚不需要在顶层作为输出信号了)。当 然你也可以例化qspi ip看里面是如何使用的。
顺便说一下,对于数据信号,一般是inout类型,对于单bit可以如下使用:
assign data = data_en ? data_reg : 1’bz;
多bit可以如下使用:
//data_en=1:data_in–valid;0:data_out–valid
generate
genvar j;
for (j = 0; j <= 3; j = j + 1)
begin : bidir_IO
IOBUF IOBUF_i (
.IO (flash_data[j]),
.I (data_out[j]),
.O (data_in[j]),
.T (data_en)
);
end
endgenerate
data_en、data_in、data_out是时序控制的信号,flash_data为顶层的inout类型信号(直接接芯片引脚)。

2.[https://china.xilinx.com/support/answers/70537.html](针对所有 ISE 版本和 Vivado 2017.2 及更早版本的 Zynq-7000 SoC RSVDGND 引脚和 PL STARTUPE2 原语需求的设计咨询)

3.https://forums.xilinx.com/t5/Other-FPGA-Architectures/STARTUPE2-with-SPI-FLASH-Programming/td-p/408511 (STARTUPE2 with SPI FLASH Programming)

4.https://www.xilinx.com/support/documentation/application_notes/xapp1020.pdf (Post-Configuration Access to SPI Flash Memory with Virtex-5 FPGAs)

5.https://www.xilinx.com/support/documentation/sw_manuals/xilinx13_4/cgd.pdf (Constraints Guide)

6.https://www.xilinx.com/support/answers/34904.html (Xilinx Configuration Solution Center)

7.https://www.xilinx.com/support/documentation/application_notes/xapp1282-us-post-cnfg-nor-axi-emp-ip.pdf (UltraScale FPGA Post-Configuration Access of Parallel NOR Flash Memory using STARTUPE3)

  相关解决方案