对于FPGA内部的复位,之前一直比较迷,这两天仔细研究官方数据手册,解开了心中的诸多疑惑,感觉自己又进步了呢.....


原创不易,转载请转原文,注明出处,谢谢。

 

一、关于POR(Power-On Reset )

FPGA在上电工作时,会先进入复位模式,将所有RAM位清除,并通过内部弱上拉电阻将用户I/O置为三态。接着依次完成 配置、初始化工作,如果这一切都顺利,就进入用户模式,FPGA会根据用户所编写的时序逻辑开始工作。

二、FPGA上电工作过程详解

从第一条我们知道,FPGA从上电到进入用户模式,会有一个过程。就不放时序图恶心人了,直接上干货,如图1所示。

图1

过程详解

  1. 上电触发一个复位事件,拉低nCONFIG、nSTATUS、CONF_DONE、INIT_DONE引脚,清除RAM位,三态用户I/O,进入复位;
  2. 复位过程中,控制逻辑检测所有供电电压,当他们在规定时间达到规定值,并稳定下来,则进入配置,否则就需要用户通过重新拉低nCONFIG足够时间等待电压达标,优秀的电源设计对数字电路是很重要的;
  3. 复位顺利完成,则依次释放nCONFIG、nSTATUS,让它们被上拉电阻拉高,进入配置,配置模式必须和MSEL[4:0]的设置必须匹配,编写的逻辑电路由quartus生成配置文件,在这个时候烧写到FPGA中,这过程叫做配置,常用的配置方式有JTAG在线模式,和EPCS/EPCQ配置模式;
  4. 配置成功,则释放CONF_DONE,进入初始化,初始化是按照用户意图将各寄存器置位成预期值;
  5. 初始化完成,则释放INIT_DONE,进入用户模式,系统按照既定时序开始运转。

*****注意*****

  • 电源不稳,后面一切免谈,电源质量好,后面一切应该也顺利;
  • 设计硬件电路时,nCONFIG、nSTATUS、CONF_DONE必须上拉,因为初始化完成就万事大吉了,所以INIT_DONE不用管,配置完成后当做普通I/O用;
  • MSEL[4:0]设置;
  • 设计硬件电路时,要注意配置FLASH和FPGA连接,以及JTAG端口的设计,硬件错了就白瞎;

三、关于FPGA的复位

如前所述,我们已经知道,每次上电工作,FPGA必定进行复位、初始化等操作。所以理论上,后续工作工程中,FPGA是不需要复位的,尤其是全局复位。但是,一方面为了保险起见应该进行局部复位和寄存器初始化(在时序过程中的任意时刻赋值),保证寄存器中的值是我们期望的值,而且某些IP核在工作前也必须复位;另一方面,电路中难免出现亚稳态等,使系统工作异常,这就需要形成一种机制,触发一个复位事件,使系统进入 “复位—>配置—>初始化—>用户模式” 这一过程。

所以有:

  1. 在 “三叔学FPGA系列之一:Cyclone V中的时钟资源” 一文中一提到,全局时钟布线资源通常非常有限,而全局复位用的也是全局时钟的布线资源,所以能不用全局复位尽量别用,用局部复位就行了,也就是不要在所有always中都用同一个rst_n,可以通过内部逻辑生成多个局部复位信号rstn0,rstn1,rstn2.....
  2. 在硬件电路设计时,Cyclone V以前的FPGA都有RESET引脚,但设计手册中别没有说这个引脚一定要用作复位,可以当做普通I/O用,在Cyclone V中RESET引脚被取消了。我的理解是:RESET引脚的作用有两点,一是为了在系统运行过程中出现异常时,可以手动按钮之类的触发一个复位事件,使系统复位;二是采用电容延时的方式,强制增加上电复位时间,确保复位成功。当上诉两方面都没有太大必要的情况下,RESET引脚就没什么用了,所以Intel牛B,在Cyclone V中直接去掉RESET引脚(个人猜想,未到技术区求证);
  3. 再次说明,RESET≠全局复位,实现全局复位有一万种方法,比如通过内部逻辑,或者通过matlab控制串口等等;
  4. 关于是否使用全局复位,网上众说纷纭,Intel也没有官方说法。我的理解是,看个人的系统情况。比如:全局时钟本来就紧张,那么就pass全局复位,用局部复位,反之资源充足,用全局复位。

四、验证后再来更新

关于第三节的内容,很多都是我个人的猜想,但是也是参考了官方手册,以及个人项目开发中的经验,准确率十之八九,后续验证后再来更新。

关于上述疑问,2018年11月3日续更

  1. 硬件设计没问题,时钟没问题,电源也没问题,理论上FPGA系统已经可以正常复位、配置、初始化、并工作了,接下来就逻辑设计的优劣问题;
  2. 有了第1条,FPGA中确实没必要使用全局复位,对于需要复位的模块,通过一定方法让它产生一种错误反馈机制,并触发一个局部复位就行了;
  3. 全局时钟都干掉了,专门的复位引脚也没有太大意义,它的作用不同于POR中的复位,仅仅是在已经初始化并进入用户模式的FPGA中产生一个复位信号而已,并不能起到上电复位的效果,这个效果,有局部复位就搞定了!要是系统死机了,复位引脚也无能为力,这需要可靠的逻辑电路设计来保障!
  4. 还是那句话,资源充足的土豪根本不需要纠结,随意作!我这么深究也是作,加深理解没错~

关于上述疑问,2018年11月21日续更

  1. 经过验证,全局复位信号是必须的,全局复位引脚非必须(可用内部电路代替);
  2. 全局复位是为了等到所有寄存器被初始化赋值并稳定下来,再按照时钟整齐划一地读写,否则必定产生亚稳态,因为时钟的稳定必定先于寄存器的稳定;
  3. 上述内容已在cyclone V中已验证,延时时间要具体看工程复杂度、需要初始化的寄存器数量==,复位时间不够,必定产生亚稳态;
  4. 为了踩平这个坑,花了我两天时间。。。但是值!
  5. 亚稳态往往是万恶之源,切记切记。

转载于:https://www.cnblogs.com/zuilangsanshu/p/9898755.html

三叔学FPGA系列之二:Cyclone V中的POR、配置、初始化,以及复位相关推荐

  1. FPGA系列之一:Cyclone V中的时钟资源

    之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...

  2. CCIE-LAB-SDN-第二篇-DNAC中完成VN配置

    CCIE-LAB-SDN-第二篇-DNAC中完成VN配置 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 题目 第2.2节:在DNA中心完成VN配置 使用DNA中心GU ...

  3. java le下载安装_跟老杨学java系列(五) JDK的安装与配置

    跟老杨学java系列(五) JDK的安装与配置 提示:本节内容对于java入门是非常关键的,对于刚接触java的同学一定要认真学习,欢迎大家留言探讨技术问题.其他问题概不回复. (书接上回)上节课程我 ...

  4. 从零学ELK系列(二):VMware安装Centos(超详细图文教程)

    [前言] 最近在研究ELK日志收集架构,想搭一套环境收集自己项目的日志:需要Linux环境支持,自己在阿里云的服务器由于部署了自己的自有博客系统(https://zhanghan.xin),资源不充足 ...

  5. 计算机主机名有后缀,一起学DNS系列(二)理解计算机的主DNS后缀选项

    原本在这一节要讲解DNS的安装,但我发现其实在此之前,还需要向大家说明几个基本的概念,首先说到的是DNS后缀. 在之前的基础章节里,我们知道了一个域名可以分为主体和后缀2部分,这里的主机我们可以理解为 ...

  6. 笨鸟先飞学编程系列之二 基础代码的编写1(转)

    通过上次课题的讲述,相信大家一定对什么是数据及数据的定义和使用方法有一定的了解了,在看本次课题之前希望大家能趁热打铁,再到网上下本C语言的教程,最好是买本数来巩固下变量相关的知识. 大家明白了怎么定义 ...

  7. 精通Server Core系列之二 ---Server Core安装与基本配置

    Server Core安装其实很简单,同前面的Windows Server 2008安装步骤一样,只要在选择安装操作系统这里,选择Server Core安装即可,这里使用Enterprise版本的服务 ...

  8. Win2008 R2 VDI动手实验系列之二:远程桌面虚拟化主机配置

    远程桌面虚拟化主机配置 在Win2008 R2 VDI动手实验系列的上篇文章中,我们部署了一个contoso.com域,而且把六台计算机都加入了域中,拓扑如下图所示.本文中我们要对RDVH计算机进行配 ...

  9. Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

    一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...

最新文章

  1. 怎样冷静地看待“小米智能新品”?
  2. pwm 正弦波_CC6420单相正弦波直流无刷马达驱动应用指南
  3. 在EF4.0中获取ObjectContext的数据库连接字符串
  4. erp采购总监个人总结_erp采购总监总结.docx
  5. python — Auto_QQ连连看
  6. 电大计算机教学自我测评,电大计算机自我鉴定.doc
  7. matlab和numpy的ones用法
  8. representation learning的理解
  9. java List复制:浅拷贝与深拷贝
  10. ###好好好好好########呼叫中心FAQ
  11. 怎么申请企业电子邮箱?TOM企业邮箱注册电子邮件流程详解
  12. 201671010434 王雯涵《英文文本统计分析》结对项目报告
  13. 大脑神经网络对比图高清,图神经网络和神经网络
  14. 远程控制软件向日葵等
  15. 阿里巴巴收购家装公司匠多多 持股20%
  16. django2.0 快速实现注册
  17. nvm 1.1.6百度网盘下载
  18. 航空公司客户画像和客户价值分析
  19. 2Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载
  20. 双十一直播需要做的准备,双十一直播常用小技巧

热门文章

  1. 设置层级为2html,前端知识(Css)汇总2
  2. nginx location匹配除了一个路径_nginx部署React项目
  3. 批量处理word文件内容_word文档批量处理大师
  4. [leetcode周赛]1346. 检查整数及其两倍数是否存在
  5. mooc中的习题--然后是几点
  6. extern 关键字的作用
  7. SourcesTree使用手册1:与Git进行通信
  8. 2017哈尔滨ACM CCPC-final 总结
  9. 拓扑排序:Kahn算法
  10. opencv 绘制图像轮廓