对于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. 亚稳态往往是万恶之源,切记切记。

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

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

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

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

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

  3. .net基础学java系列(二)IDE 之 插件

    上一篇文章.net基础学java系列(二)IDE "扎实的基础"+"宽广的视野",基本可以帮我们摆脱码畜.码奴.码农的命运! IT领袖:IT大哥:IT精英:IT ...

  4. Vue基础系列(二)——Vue中的methods属性

      写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家指出. 作者简介: 一个不知名的前端开发 ...

  5. .net基础学java系列(二)IDE

    上一篇文章.net基础学java系列(一)视野 废话: "视野"这篇文章,管理员说它比较空洞!也许初学者看不懂表格中的大部分内容!多年的neter估计也有很多不知道的! 有.net ...

  6. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. Spring Boot 入门系列(二十四)多环境配置,3分钟搞定!

    之前讲过Spring Boot 的系统配置和自定义配置,实现了按照实际项目的要求配置系统的相关熟悉.但是,在实际项目开发过程中,需要面对不同的环境,例如:开发环境,测试环境,生产环境.各个环境的数据库 ...

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

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

  9. Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型

    一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...

随机推荐

  1. C#效率优化(1)-- 使用泛型时避免装箱

    本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家 ...

  2. 详细的最新版fastdfs单机版搭建

    前言 目前项目是tomcat单机部署的,图片.视频也是上传到tomcat目录下,关键是此项目的主要内容还就是针对图片.视频的,这让我非常担忧:文件服务器的应用是必然的,而且时间还不会太久.之前一直有听 ...

  3. JavaWeb学习 (十)————Cookie

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  4. Jenkins持续集成学习-Windows环境进行.Net开发2

    目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...

  5. [翻译]EntityFramework Core 2.2 发布

    原文来源 TechViews 今天我们将推出EF Core 2.2的最终版本,以及ASP.NET Core 2.2和.NET Core 2.2 .这是我们的开源和跨平台对象数据库映射技术的最新版本. ...

  6. 《Microsoft SQL Server 2012 T-SQL Fundamentals》

    书名 <SQL Server 2012 T-SQL基础教程> 图片 时间  2017-8 学习  每章后面有习题很适合我,看完写sql的能力有质的飞跃好书 http://tsql.soli ...

  7. Hibernate session中的createCriteria方法

    在应用中获取session对象: Session session=  HibernateUtil.getSession(); List list=session.createCriteria(Mete ...

  8. [PHP] 算法-找出两个链表的第一个公共结点的PHP实现

    输入两个链表,找出它们的第一个公共结点 1.两个单链表,有公共结点,那么必然,尾部公用 2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值 3.长的链表先走n步,两个链表再同时移 ...

  9. 【RabbitMQ】8、RabbitMQ之mandatory和immediate

    1. 概述 mandatory和immediate是AMQP协议中basic.publish方法中的两个标识位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能.对于刚开始接触Rabbi ...

  10. API网关【gateway 】- 3

    最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析. 由于采用了大量的nginx相关的东西,所以在此记录一下: 在ng ...