固件远程更新之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类型信号(直接接芯片引脚)。

原文地址:https://www.cnblogs.com/lionsde/p/10159339.html

时间: 2024-10-11 18:41:27

固件远程更新之STARTUPE2原语(fpga控制flash)的相关文章

利用FPGA控制WIFI模块(1)——8266篇

0.前言: 这一系列博客主要用来记录通过FPGA控制无线传输设备,特别是WIFI模块的博客.希望为后来的FPGAer提供相关的经验,少走弯路. 1.模组简介 ESP8266 系列模组是基于乐鑫ESP8266的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,以最低成本提供最大实用性.可以在10元以内实现WIFI-UART的双向控制.模块的基本外观可以参考下面官网的图片.图片里模块的型号是ESP-01S,安信可公司除了这款模块以外,还有几款几款类似的型号,都是基于ESP

ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)

前言 上节实现远程更新是更新的STM32F103C8T6的单片机 GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级 这节将告诉大家如何移植到其它型号的单片机. 这一节以 STM32F103RET6 (512KB Flash 64KB RAM) 为例 我使用我的这块板子 大家测试的时候可以按照下面的方式接到自己的GPRS模块(Air202 / SIM800) 单片机串口1 接到GPRS的AT指令配置串口

项目实战_Python.子进程/协程在固件检测更新升级程序中的正确姿势?

项目简介: 说明: 主要用于对接OA审批流程后自动下载固件生成更新后自动上传,具体实现代码请阅读代码 项目思路: 项目结构: firmwareupload/ ├── app │   ├── conf │   │   ├── config.py │   │   └── __init__.py │   ├── core │   │   ├── __init__.py │   │   ├── main.py │   │   └── task.py │   ├── __init__.py │   └──

linux中DNS远程更新及加密远程更新

1.DNS的远程更新 服务主机操作如下:vim /etc/named.rfc1912.zones chmod 777 /var/named/ 修改目录权限增加更新权限systemctl restart named 测试机 vim /etc/resolv.conf dig qq.bruce.com 2.远程加密更新 使用指定ip更新的方式,虽然可以对dns解析数据进行跟新,但是由于别的主机也可以将其ip设置成允许更新的ip,导致数据不安全,可以采用加密的方式进行远程更新. DNS主机: dnsse

分享一个远程更新目标库数据的存储过程

本文给大家分享一个远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库.USE [Table]--切换到源表,就是数据最新的那个表GO/****** Object: StoredProcedure [dbo].[proc_DataUpdate] Script Date: 2018/5/4 15:08:56 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO(http://www.0831jlyy.com)--

JS控制flash的播放

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" xml:lang="zh-CN"> <head&

JS控制flash的方法

JS控制flash的一些方法:Play() ---------------------------------------- 播放动画 StopPlay()------------------------------------停止动画 IsPlaying()----------------------------------- 动画是否正在播放 GotoFrame(frame_number)---------------- 跳转到某帧 TotalFrames()----------------

Firebase远程更新应用

能打造出色的应用不意味着一定能在商业上取得成功,两者之间还有许多工作要做,绝不能简单发布应用后就宣告“收工”.您需要能迅速根据用户反馈作出调整.测试新功能,以及向用户提供他们最关注的内容. Firebase 远程配置就是为此而生.利用 Firebase 远程配置,您可以在云端更改应用的外观和风格,从而快速响应用户的需求.另外,您还可以利用 Firebase 远程配置向不同用户提供不同内容,从而实现开展实验.逐步推出功能,乃至根据用户在应用中的互动行为向他们提供个性化内容的目的. 更新应用再也不必

四轴飞行器Bootloader和固件的更新

在四轴飞行器中,为了方便用户后期对飞行器进行固件升级,一般都采用了Bootloader技术.所谓Bootloader就是指单片机启动后首先运行的一段代码,它的最主要功能就是用于检查用户是否要更新飞控固件.如果是,则进入飞控固件更新进程,如果否,则直接运行当前的飞控固件.此外,有的Bootloader里面也包含进了一些基本的硬件检测功能,如果硬件检测失败,就不进入飞控功能.通常,Bootloader都要配合飞行器的上位机软件来使用. 下面以圆点博士小四轴飞行器为例进一步对Bootloader进行说