xilinx構成flashでユーザーセグメントデータを使用してメモを設定

3846 ワード

プロジェクトが必要なので、配置したflashチップに、自分の必要なデータを入れる必要があります.このときはSTARTUPE 2原語を使う必要があります.
この原語についてはUG 470を具体的に参照する.
その他の参考 
https://forums.xilinx.com/t5/Other-FPGA-Architecture/STARTUPE2-use-case-examples/td-p/770767
およびhttps://blog.csdn.net/jiuzhangzi/article/details/79471365 
csdnの原文は以下の通りです.
一部のプロジェクトでは、リモートでファームウェアを更新する必要があります.更新が完了したら、電源を切り、再起動すればいいです.では、リモート更新はどのように実現されていますか?最も多く使われているのはイーサネットやカスタムローカルエリアネットワークが主であるべきで、もちろんpcie、シリアルポートなどを使用することもできます.xilinxやgoldenイメージのように、リモート更新の失敗で起動できないことを防ぐために、主にflashに2つの起動ファイルが保存されています.通常はデフォルトを起動し、デフォルトが破損した場合は、スタンバイから起動します.この記事では主にSTARTUPE 2原語を説明していますが、これはリモート更新とどのような関係がありますか?続いて下を見てください.私達は知っていて、fpgaは電気を落としてなくして、一般的に外部のflashの記憶コードを使って、flashはspi、bpi、qspiなどのインターフェースがあって、外部のメモリのクロックのピンは一般的にfpgaのCCLK_と0接続、リモート更新を使用する場合、まずfpga内部にflashを制御する駆動(すなわち論理制御flashタイミング)があり、もちろんflashクロックも制御する必要があるが、このときクロックピンはCCLK_に接続されている0,それではどのように操作して、あなたは直接パイプの足を分配することを制約して試して、通じないので、この時STARTUPE 2は役に立ちました、それではどのように使うべきです 
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タイプ信号(直接チップピン)である.
 
 
xilinxのフォーラムの一部情報:
you may find detail information in configuration user guide UG470 for this primitive.
The general usage of this primitive is to use control configuratioin dedicated pin (like CCLK for 7 series ) post configuration.
Configuration dedicated pin cannot be directly controlled after configuration, but in some scenario, it needs to access the external SPI flash which is used to store FPGA configuration bit file.
 
Below is the example to instantiate the primitive in your design.

STARTUPE2_​INST: STARTUPE2
generic map(
PROG_​USR => "FALSE",​
SIM_​CCLK_​FREQ => 0.0)
port map (
CFGCLK => open,​
CFGMCLK => open,​
EOS => open,​
PREQ => open,​
CLK => '0',​
GSR => '0',​
GTS => '0',​
KEYCLEARB => '0',​
PACK => '0',​
USRCCLKO => spi_​clk,​ -- external (EMCCLK) spi_​clk signal from the design which is provide signal to output on CCLK pin USRCCLKTS => '0',​ -- Enable CCLK pin
USRDONEO => '1',​ -- Drive DONE pin High even though tri-state USRDONETS => '1' );​ -- Maintain tri-state of DONE pin