功能简述:使用UART下发指令,并且通过串口传输升级数据,对xilinx7系列应用,进行远程升级。
远程升级的核心涉及两个重要的原语:
1.startupe2
作用:约束spi_sck,因为spi的时钟引脚在板子上是被内部已经占用了,所以要使用此原语输出spi_sck以便获得flash的控制权。
注:xilinx7系列使用startupe2,针对sck进行控制。如果是UltraScale系列的芯片,需要使用startupe3原语。因为UltraScale不止sck的引脚被占用,其他的引脚也被占用了。
示例代码如下:
wire cfgclk;
wire cfgmclk;
wire eos;
wire preq;
(*KEEP="true"*)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(cfgclk), // 1-bit output: Configuration main clock output
.CFGMCLK(cfgmclk), // 1-bit output: Configuration internal oscillator clock output
.EOS(eos), // 1-bit output: Active high output signal indicating the End Of Startup.
.PREQ(preq), // 1-bit output: PROGRAM request to fabric output
.CLK(1'b0), // 1-bit input: User start-up clock input
.GSR(1'b0), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
.GTS(1'b0), // 1-bit input: Global 3-state input (GTS cannot be used for the port name)
.KEYCLEARB(1'b0), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
.PACK(1'b0), // 1-bit input: PROGRAM acknowledge input
.USRCCLKO(spi_sck), // 1-bit input: User CCLK input
.USRCCLKTS(1'b0), // 1-bit input: User CCLK 3-state enable input
.USRDONEO(1'b1), // 1-bit input: User DONE pin output control
.USRDONETS(1'b0) // 1-bit input: User DONE 3-state enable outpu
);
2.ICAPE2
作用:控制板子上电之后加载flash的地址。因为产品的版本管理我们一般会在flash上放两个版本。
2.1 golden
flash起始地址为0开始存储。此版本是产品的固定版本,用来保障如果升级后的版本如果由问题,让FPGA加载。防止产品变成砖头。
2.2 update
flash起始地址向上存储(存完golden之后的地址)。此版本是产品的升级版本,如果出现问题,需要fallback到golden版本。
正常情况下,我们上电之后,FPGA从flash的0地址处开始记载。然后经过golden的约束控制,会直接跳到update版本的起始地址去加载。这时候产品就是使用的update版本。
通过ICAPE2原语,我们可以控制FPGA去加载flash的起始地址,达到版本控制的功能。
实例代码我上一篇文章有介绍,指个路:
Xilinx FPGA Multiboot-使用ICAPE2原语_xilinx noop-CSDN博客
3.版本控制
除了上述的两个原语的使用,还需要在xdc文件中进行一些控制。
两个版本的xdc都需加上如下的语句:
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property CONFIG_MODE SPIX1 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]
第二句和第三句是对spi进行约束,使用SPIX1的模式进行传输。
重点是第一句:允许使用fallback功能。
除了这三句,在golden版本的xdc还需要添加一句
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x00200000 [current_design]
这一句的作用是,在上电之后,跳转到该配置地址的地方开始加载。
这一篇先简单介绍一下这个项目的核心。从下一篇开始,说一下涉及思路和系统流程。
如果有说错的地方,欢迎评论区或私聊指出,大家可以一起讨论哈~~~
更多嵌入式,FPGA资料可参考:天津大学四川院FPGA培训中心 -- www.sxfpga.cn