STARTUPE2原语

举报
李锐博恩 发表于 2021/07/15 03:43:33 2021/07/15
【摘要】 转载:https://blog.csdn.net/jiuzhangzi/article/details/79471365 有的项目需要远程更新固件,更新完成后断电、重启即可。那远程更新是如何实现的呢?用的最多的应该是以太网或者自定义的局域网为主,当然还可以使用pcie、串口之类的,像xilinx还有golden image,以防止远程更新失败启动不起来,它主要是flash存...

转载: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):
 


  
  1. STARTUPE2 #(
  2. .PROG_USR("FALSE"), // Activate program event security feature. Requires encrypted bitstreams.
  3. .SIM_CCLK_FREQ(0.0) // Set the Configuration Clock Frequency(ns) for simulation
  4. )
  5. STARTUPE2_inst
  6. (
  7. .CFGCLK(), // 1-bit output: Configuration main clock output
  8. .CFGMCLK(), // 1-bit output: Configuration internal oscillator clock output
  9. .EOS(), // 1-bit output: Active high output signal indicating the End Of Startup.
  10. .PREQ(), // 1-bit output: PROGRAM request to fabric output
  11. .CLK(0), // 1-bit input: User start-up clock input
  12. .GSR(0), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
  13. .GTS(0), // 1-bit input: Global 3-state input (GTS cannot be used for the port name)
  14. .KEYCLEARB(1), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
  15. .PACK(1), // 1-bit input: PROGRAM acknowledge input
  16. .USRCCLKO(flash_clk), // 1-bit input: User CCLK input
  17. .USRCCLKTS(0), // 1-bit input: User CCLK 3-state enable input
  18. .USRDONEO(1), // 1-bit input: User DONE pin output control
  19. .USRDONETS(1) // 1-bit input: User DONE 3-state enable outpu
  20. );

其中flash_clk就是你时序控制的flash时钟信号,连接到这就行了,其它的不需要改动,也无需约束此管脚(因为此管脚不需要在顶层作为输出信号了)。当然你也可以例化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类型信号(直接接芯片引脚)。
 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/89187417

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。