xilinx 7系列-uart远程升级-1

功能简述:使用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

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值