远程升级flash三大原语使用(K7325T)

但是想做远程程序更新功能就必须这么干,通过串口或者网口或者什么其他通信接口将要更新的程序发送至fpga,fpga存储空间不够的话就暂存到ddr或者外置sram里,再按顺序操作flash烧入

外部存储器的时钟管脚一般与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时钟信号(使用STArtupe2原语输出cclk时钟时,启动后的前三个时钟用于切换时钟源,不会对外输出),连接到这就行了,其它的不需要改动,也无需约束此管脚,当然你也可以例化qspi ip看里面是如何使用的。

顺便说一下,对于数据信号,一般是inout类型,对于单bit可以如下使用:
 

assign data = data_en ? data_reg : 1'bz;

多bit可以如下使用:
 

 
  
  1. //data_en=1:data_in--valid;0:data_out--valid

  2. generate

  3. genvar j;

  4. for (j = 0; j <= 3; j = j + 1)

  5. begin : bidir_IO

  6. IOBUF IOBUF_i (

  7. .IO (flash_data[j]),

  8. .I (data_out[j]),

  9. .O (data_in[j]),

  10. .T (data_en)

  11. );

  12. end

  13. endgenerate

data_en、data_in、data_out是时序控制的信号,flash_data为顶层的inout类型信号(直接接芯片引脚)。

ext_spi_clk:在QSPI模式下这个时钟的两分频就是给SPI Flash的访问时钟,因此这个时钟要根据QSPI Flash的参数设置到合理值;

ICAP实现Multiboot的原理介绍
FPGA具有多重配置的特性,允许用户在不掉电重启的情况下,根据不同时刻的需求,可以从FLASH中贮存的多个比特文件选择加载其中的一个,实现系统功能的变换。当FPGA完成上电自动加载初始化的比特流后,可以通过触发FPGA内部的多重启动事件使得FPGA从外部配置存储器(SPI FLASH)指定的地址自动下载一个新的比特流来重新配置。FPGA的多重配置可以通过多种方式来实现。本文采用的是基于ICAP原语的状态机编码方式。通过调用Xilinx自带的ICAP原语,编写状态机按照一定的指令流程对ICAP原语进行不断的配置,可以控制FPGA重新配置。
 

你可能感兴趣的:(fpga开发)