FPGA实现串口升级及MultiBoot(二)FPGA启动流程

news2025/1/10 21:24:23

d4a52c23ace5dbfc3db4f1d6eb783a86.jpeg

这个系列开篇肯定要先了解FPGA的启动流程,试想一下:我想实现MultiBoot,那么我应该在什么时候开始升级,升级失败后FPGA进行了哪些操作,以及怎么回到Golden区?

还有一个问题,就是我硬件打板回来,烧写进FLASH后起不来,这应该怎么排查?

缩略词索引:

  • K7:Kintex 7

  • V7:Vertex 7

  • A7:Artix 7

以上所有这些的前提就是理解FPGA启动流程。

e0bc66193d855dad7e7740b6b4b13f74.png图0:7系列FPGA启动步骤-参考:UG470

AMD-Xilinx FPGA启动阶段大概可以分为以上几个步骤(上图参考来源:UG470 Figure 5-3),下面分别讲解每一个步骤中FPGA做哪些工作。

一、器件上电

器件外围设置

对于7系列FPGA主要的关注点就是BANK0、BANK14和BANK15,BANK0主要关注电源和配置引脚,下表是一些注意点:

f0bc1764de8e5253d58e912a9eee2b0d.png图1:电源域相关配置-来源:UG470

关于Vertex7系列详见《UG470》表2-7和表2-8。

SPI FLASH配置使用BANK0和BANK14,BPI则是BANK0、BANK14和BANK15,相关的电源域如图1所示,对于FPGA人员主要关注BANK0,下面是一个K7的典型电路:

4f8ea488758f7b0cda4cb2e76809bf23.png

重点关注:M0、M1、M2引脚(其他重要引脚我们下一节重点介绍),这几个引脚是关于FPGA的启动配置引脚:

f61187cf32c5e19954592ba44f5ad6ae.png图2:启动配置引脚-来源:UG470

上电时序

7系列FPGA其实对于上电时序要求不是那么高,但是对于电源域的要求比较高,下图就是FPGA的上电时序要求。

e6671e62362b11675373817a6109365b.png图3:SPI x1 启动时序-来源:UG470

相关时序要求如下:

38be6deb81dc9a54750b9ee382b264d0.png图4:几个重要时序参数-来源:UG470

图4中Tpor的值和具体器件有关,大概的范围是10~50ms,若是从模式配置,建议按照60ms设计,主模式配置,建议按照5ms来考虑。

二、配置初始化

配置初始化操作,也就是上电复位完成后,相关配置存储器按顺序清零。配置初始化的触发条件主要由以下几种情况:器件正常上电、Program_B信号拉低、IProg指令、JTAG的JProgram指令、Fallback重配,以及触发器通过全局(GSR)的重新初始化。配置初始化期间,除了少量的配置输出管脚外,其余IO的状态通过PUDC_B管脚上下拉确定,详细说明见图5。

5eddce6c4e819316c239cebcd8c41c89.png图5:PUDC_B管脚上下拉和IO管脚配置关系-来源:UG470

配置初始化期间还会将芯片内所有模块的配置RAM清零,包括寄存器的值和Block RAM的存储值,FF触发器重新初始化。在配置存储器清零过程中,INIT_B信号一直为低电平,当完成清零后,INIT_B信号才会变成高电平。因此INIT_B信号拉高表示初始化完成,图4中也简单说明了从上电配置到INIT_B信号拉高约多长时间。

三、配置管脚读取

按照图0中步骤,经历过上面两个步骤后,接下来就是进行配置模式采集。配置模式采集也很好理解,就是当INIT_B信号拉高后读取M2,M1,M0管脚的电平状态,这几个管脚的上下拉是决定FPGA的启动模式,详细设计如图6所示。

0bf6cfc89c1fb9a342d10d7a23ebd60a.png图6:FPGA配置管脚和启动模式-来源:UG470

因为INIT_B拉高后,才进行模式采样,所以可以通过外部强制把INIT_B拉低后,进行延时再配置。如果加载模式为Master模式,FPGA很快就会输出有效的CCLK。此时,FPGA开始在配置时钟的上升沿对配置数据进行采样,当然也可以通过设置,使用下降沿来采集配置数据。

四、检测同步头

当和外设进行通信的时候,我们一般都会在协议里增加头校验、尾校验以及数据校验。对于FPGA读取FLASH中配置数据一样(还没到读取用户数据流),这个头校验就叫“同步头”,它是一段特殊的同步字。“同步头”的作用和协议头校验一样帮助FPGA确定正确的数据位置,同步字之前的配置数据都会被FPGA忽略,也就是FPGA仅仅在同步化之后才正式开始接收配置数据。同步字说明详见图7。

d9d059adf45bdd99f52aeffc436d0111.png图7:FPGA 同步字-来源:UG470

五、器件ID检测

为了确保位流和FPGA芯片匹配,在读取到同步字后还会检测配置位流中的器件ID和目标ID是否一致。ID是一个固定的32位的数据,基于IEEE Std 1149.1标准。7系列FPGA的ID已经在UG470 的 Table 1-1中列出,下图是截取的一部分,其他详见UG470。

36e5b864e81014f8c5c3f01045392606.png图8:器件ID - 截取:UG470

32位的ID中包含了28位的特征值和4位掩码。特征值包括厂商信息,器件族,器件规模等。如果器件ID和位流配置中不匹配,FPGA 会将内部寄存器的第一位ID_Err置高,软件也会显示错误信息,同时停止后续位流加载。

六、配置文件载入

在第四步和第五步顺利通过后,FPGA开始加载配置数据。

配置文件框架

7 系列 FPGA 配置文件以帧的形式排列。帧是 7 系列 FPGA 配置内存空间中最小的可寻址段,因此所有操作都必须作用于整个配置帧。每帧由 101 个 32 位组成。

因为后续我们操作基本都是通过脚本或者GUI进行配置的,这部分内容实际我们目前也用不上,所以有兴趣的可以去看看UG470中第五章关于这部分详细介绍。

七、CRC校验

配置文件载入完成后,为了验证数据的正确性,FPGA还自动设置了CRC校验(CRC是同步进行),导入完成后会将计算的CRC值与期望CRC值进行比较。如果CRC校验不正确,FPGA会自动把INIT-B拉低,放弃这次配置。用户必须把PROG-B引脚拉低,才能进行重新配置。默认情况下,生成的配置位流会自动添加CRC校验,但这个不是必须的,可以通过位流设置功能取消CRC检验,但是取消CRC校验会存在因导入的错误位流而引起功能异常甚至损坏器件。

c7171daa4df2e8285d84cb4785993ae6.png图9:通过上图顺序进行CRC设置

八、启动序列

最后一个步骤就是启动序列,也是我们需要重点关注的一步。

前面几步顺利完成后就到最后一步了,FPGA进入启动序列流程。启动序列包含8个顺序启动状态(0-7)操作,其中启动状态0对用户是不透明的,Phase1-Phase7如图10所示。

a613e61613cef739a3e50d789d381841.png图10:启动序列1~7 - 来源:UG470

启动序列事件的默认顺序为先释放DONE引脚,然后激活I/O,最后启动写使能(详见UG470中Table 5-11 默认启动顺序,下面图12中)。实际使用中,可以通过BitGen参数对启动顺序进行设置来满足不同的需求。也就是上图中除了步骤7以外,其余几个步骤启动顺序是用户可编程的,并且启动顺序中的内容也是可编辑的,如是否等待MMCM锁定或者是否等待DCI阻抗匹配这些都是可配置的,以上两个可选配置。

但是,对于1-全局使能GWE(使能RAM和Flip-Flops所有同步单元工作)置位、2-取消全局三态GTS,激活输出管脚这两步时强制执行的,否则对于1不执行的话,FPGA无法正常工作;对于2不执行则FPGA所有引脚将功能失效。

释放DONE管脚,FPGA将取消之前按照PUDC_B引脚设置的引脚默认状态。DONE引脚是开漏输出信号,因此芯片外部需要使用一个330Ω上拉,当器件释放DONE管脚,DONE管脚的电平变为高电平。上面的详细说明如图11所示:

ae3b49e419db39e70e0480c749ab138f.png图11:启动序列说明 - 来源:UG470

默认启动序列时序图:

179da521cd150aa2c08f94e87318cc97.png 571e239ef2ddfa5ad8e976511e3285df.png图12:默认启动序列时序图 - 来源:UG470

修改上面默认的启动序列的Vivado设置如下图所示。

b4a35e0298cdedaab66e5d6afd58af04.png图13:修改默认启动序列的Vivado设置

总结

虽然还没开始进入正题,但是“前戏”也很重要,这决定了你能深入多少。本文主要需要了解的就是FPGA启动的几个步骤,其内容更适合排查和设计FPGA相关硬件。

对于设计中常见的概念我们下一篇会详细介绍~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chrome下载视频的插件

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

SprinBoot+Vue个性化旅游推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

数学建模_数据预处理流程(全)

数据预处理整体流程图 一般数据预处理流程 处理缺失值:填补或删除缺失值。处理异常值:检测并处理异常值。数据编码:将分类变量进行标签编码或独热编码。数据标准化/归一化:对数据进行标准化或归一化处理。连续变量离散化&#xff…

人机交互系统中的人脸讲话生成系统调研

《Human-Computer Interaction System: A Survey of Talking-Head Generation》 图片源:https://github.com/Yazdi9/Talking_Face_Avatar 目录 前言摘要一、背景介绍二、人机交互系统体系结构2.1. 语音模块2.2. 对话系统模块2.3. 人脸说话动作生成 三 人脸动作生成…

基于人工智能的语音情感识别系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 语音情感识别是人工智能的一项重要应用,旨在通过分析语音信号中的特征来判断说话者的情感状态,如“愤怒”、“…

1800 万,财务自由了

《黑神话:悟空》 距离《黑神话:悟空》上线(8 月 20 日)上线已过去半个月,从刚开始全网热议,连官方都下场点评,到现在的逐渐回归平静。 不是游戏圈或是对数据不敏感的网友,可能会落入…

【路径规划】 使用计算机视觉和机器人操纵器绘制肖像

摘要 本项目展示了使用计算机视觉和机械臂绘制肖像的完整流程。系统利用网络摄像头获取肖像图像,经过图像处理后生成路径,然后利用逆向运动学将路径转化为机械臂的运动轨迹,最终在硬件机器人上执行绘制。实验结果表明,该系统能够…

【人工智能学习笔记】2_数据处理基础

数据的概述 数据(Data)的定义 用于表示客观事物的未经加工的原始素材不仅指狭义上的数字,也只具有一定意义的文字、字母、数字符号的组合客观事物的属性、数量、位置及其相互关系的抽象表示 在计算机科学与技术领域中,数据是指…

微信小程序和普通网页有什么不同

微信小程序和普通网页的区别主要体现在文件后缀、运行原理、运行环境、开发规则以及标签名等方面。微信小程序于2016年推出,依托微信庞大的用户基础,迅速成为移动应用中的佼佼者,而普通网页则基于传统的HTML、CSS和JavaScript技术构建。以下将…

2024年四川省安全员B证证考试题库及四川省安全员B证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年四川省安全员B证证考试题库及四川省安全员B证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

C语言深度剖析--不定期更新的第三弹

hello,everybody!最近又更新了哈,希望对大家有所帮助 switch case关键字 基本语法: switch(整型变量/常量/整型表达式){case 1:var 1;break;case 2:var 2;break;case 3:var 3;break;default:break; }switch case语句也和if语句一样具有判断和分支的功…

第4章-02-用WebDriver驱动浏览器页面截图

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

NX重要操作函数调用流程

1.文件打开 2.鼠标移动操作 3.定时器

Vue3+Ts封装类似于Element-plus的图片预览组件

组件目录结构如下: options.ts文件用来存储配置文件, 代码如下: import {isFirefox} from ./tools;export type ImageViewerAction = zoomIn | zoomOut | clocelise | anticlocelise;export const mousewheelEventName = isFirefox() ? DOMMouseScroll : mousewheel;// 键…

自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列五十三文本聚类算法》文本聚类介绍及相关算法K…

isalnum函数讲解 <ctype.h>头文件函数

目录 ​1.头文件 2.isalnum函数讲解​​​​​​​ 方源一把抓住VS2022&#xff0c;顷刻 炼化&#xff01; 1.头文件 以上函数都需要包括头文件<ctype.h> &#xff0c;其中包括 isalnum 函数 #include<ctype.h> 2.isalnum函数讲解 isalnum函数是一种判断字符…

解决:Module build failed (from ./node_modules/sass-loader/dist/cjs.js)问题

一、问题 Module build failed (from ./node_modules/sass-loader/dist/cjs.js): Error: Cannot find module sass 二、解决方法 1.清除缓存 npm cache clean --force2.重构项目 npm install 3.更新&#xff08;获取最新的&#xff09;node-sass和sass-loader依赖包 npm …

OpenAI SORA团队负责人 通往智能的方式 报告笔记

OpenAI SORA团队负责人 通往智能的方式 报告笔记 这个报告其实是2024年智源大会的主旨报告&#xff0c;OpenAI SORA和DALL-E团队负责人Aditya Ramesh给出的一段有关多模态大模型的报告。我去听了现场&#xff0c;感觉倍受启发&#xff0c;但是感觉很多并不能当场理解&#xff…

赢麻了!算法学不懂都来翻烂这本书,吊打国内所有晦涩难懂的毒教材!!

这本书巧妙的运用了简洁的图表和示意图&#xff0c;帮助读者更加直观的理解各种机器学习算法的工作原理和应用场景。 就是一本既全面又容易上手的机器学习宝典&#xff0c;适合各种水平的读者&#xff0c;不管你是对AI感兴趣的爱好者&#xff0c;还是正在从事相关工作的专业人…

Linux系统应用(5)——编译器gcc

个人内容简介&#xff1a; &#x1f343;个人主页&#xff1a;诉清风2023 &#x1f388;逆转时间的公式&#xff0c;就是珍惜现在ദ്ദി˶&#xff70;̀֊&#xff70;́ ) ✧ 目录 个人内容简介&#xff1a; &#x1f388;逆转时间的公式&#xff0c;就是珍惜现在ദ്ദ…