固件遠程更新之STARTUPE2原語(fpga控制flash)


作者:九章子 
來源:CSDN 
原文:https://blog.csdn.net/jiuzhangzi/article/details/79471365 

  有的項目需要遠程更新固件,更新完成后斷電、重啟即可。那遠程更新是如何實現的呢?用的最多的應該是以太網或者自定義的局域網為主,當然還可以使用pcie、串口之類的,像xilinx還有golden image,以防止遠程更新失敗啟動不起來,它主要是flash存有兩個啟動文件,正常情況下啟動默認的,當默認的被損壞,就從備用的啟動。本文章主要講解的是STARTUPE2原語,這和遠程更新有什么關系呢?請接着向下看。
我們知道,fpga掉電丟失,一般使用外部flash存儲代碼,flash有spi、bpi、qspi等接口,外部存儲器的時鍾管腳一般與fpga的CCLK_0連接,當使用遠程更新時,首先fpga內部有控制flash的驅動(即邏輯控制flash時序),當然flash時鍾也需要控制了,但這時時鍾管腳已經連接到CCLK_0,那該如何操作啊,你直接約束分配管腳試試,是通不過的,這時STARTUPE2就派上用場了,那該如何使用啊,如下(verilog):
---------------------

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類型信號(直接接芯片引腳)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM