写在前面

本文内容主要来自Xilinx白皮书《wp272_Get Smart About Reset》,需要资源(有英文版和自翻中文版)的同学请转:Xilinx技术文档翻译汇总

真不是标题党,只是直译了Xilinx的白皮书。


1、为什么要设计复位?

首先回想一下,在平常的设计中我们是不是经常采用同步复位或者异步复位的写法,这一写法似乎都已经形成了肌肉记忆----每次我们写always块的时候总是会对所有的寄存器写一个复位赋初值的语句。

这样设计的目的是什么?似乎是为了给寄存器一个初值,避免仿真不定态或初始化操作错误。又似乎是为了在调试时能方便地使用按键进行复位(最常用的全局复位)。这么一看复位似乎是蛮重要的。

2、复位是否有必要?

似乎在平常的设计中,多数会使用异步复位的方式,异步复位由于是异步信号,所以不可避免地引入了亚稳态的可能,这一可能性随着时钟频率的提高而增加。好像在平常的设计与使用中,异步复位电路也不会引发什么问题。这是因为随着器件工艺的提升,现在器件的上升时间在0.0x 纳秒级,而一般设计的时钟周期可能在100~200M。只要复位的释放不是刚好在这0.0x 纳秒内就不会引发亚问题问题,显然这个概率极小(比例--0.0x:10),基本可以说是99.99不会有问题。但是著名的墨菲定律高速我们:再小概率的事情都会发生。所以不管怎样这种事情我们都应该要想办法避免。

再来看我们使用复位的主要目的:为了给寄存器一个初始值,从而避免仿真或使用错误。然而实际上,Xilinx的FPGA的内部资源(触发器和RAM)等都会在上电后默认赋初值,一般是0,或者可以在定义寄存器时手动赋值,如:

reg        [1:0]        test = 2'b01;                //定义时即赋初值

这么看的话仅仅为了赋初值而存在的赋值就没有意义的。数据链路上有初值就够了,因为后来的数据总会冲走之前的数据,数据仍然能稳步传递。但是控制链路就一定需要被复位后一定要恢复到初始状态,不然会“乱跑‘从而导致代码运行异常。其中最经典的例子就是状态机了,显然,如果状态机的状态模块没有复位的话,那么可能在出现异常后永远无法恢复到正常状态了。

最后,复位所使用的资源远超你的想象:

若频繁的使用全局复位,则势必将复位信号变成一个高扇出的信号,这对时序收敛无疑是一个巨大的挑战。

3、应该怎样设计复位?

说了这么多,那到底要怎么设计复位?

同步or异步?

        在FPGA同步复位、异步复位、异步复位同步释放一文中探讨过同步复位与异步复位的特点。

        同步复位:

有利于仿真

由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺,没有亚稳态问题

可以使所设计的系统成为 100%的同步时序电路,有利于时序分析

复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑延时因素

大多数的FPGA的DFF都只有异步复位端口,采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样会耗费逻辑资源

        异步复位

大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源

设计相对简单,异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR

复位信号容易受到毛刺的影响且容易存在亚稳态问题

建议使用同步复位的方式,若一定要使用异步复位的话,则建议使用异步复位、同步释放的方法。

高or低?

选择高还是低,需要根据具体的电平标准、器件结构来选择,并不是一概而论低电平有效的好或者高电平有效的好。简单经验:Altera的用低电平复位,Xilinx的用高电平复位。

总结

复位信号能不用就不要用,需要特定初值的可以在定义寄存器时赋值

如果一定需要则使用异步复位、同步释放的方法,并将复位信号局部化,避免高扇出

FPGA的复位设计要醒目点啦相关推荐

  1. FPGA异步复位设计代码

    1.1 FPGA异步复位设计代码 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA异步复位设计代码: 5)结束语. 1.1.2 本节引言 "不积跬步,无 ...

  2. FPGA同步复位设计代码

    1.1 FPGA同步复位设计代码 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA同步复位设计代码: 5)结束语. 1.1.2 本节引言 "不积跬步,无 ...

  3. FPGA中复位设计总结

    复位 首先FPGA的复位,对于大部分设计而言,是很简单的.简单在于,只要按照固定方法:按键按下,复位有效一次,相关信号复位.这能解决大部分的问题.而对于其他大规模的复位设计,则需要对细节深究. 方式 ...

  4. (9)FPGA复位设计(第2天)

    (9)FPGA复位设计(第2天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA复位设计(第2天) 5)技术交流 6)参考资料 2 FPGA初级课程介绍 ...

  5. (11)FPGA复位设计原则

    (11)FPGA复位设计原则 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA复位设计原则 5)结语 1.2 FPGA简介 FPGA(Field Programm ...

  6. 异步复位设计中的亚稳态问题及其解决方案

    异步复位设计中的亚稳态问题及其解决方案田志明,杨军,罗岚(东南大学国家专用集成电路系统工程技术研究中心,南京 210096) 摘 要:尽管异步复位是一种安全可靠复位电路的方法,但如果处理不当的话,异步 ...

  7. (47)FPGA同步复位与异步复位(异步复位同步释放)

    (47)FPGA同步复位与异步复位(异步复位同步释放) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA同步复位与异步复位(异步复位同步释放) 5)技术交流 ...

  8. (46)FPGA同步复位与异步复位(异步复位)

    (46)FPGA同步复位与异步复位(异步复位) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA同步复位与异步复位(异步复位) 5)技术交流 6)参考资料 2 ...

  9. (45)FPGA同步复位与异步复位(同步复位)

    (45)FPGA同步复位与异步复位(同步复位) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA同步复位与异步复位(同步复位) 5)技术交流 6)参考资料 2 ...

最新文章

  1. flex buider 4.6 打开设计模式(designer)时提示内存不足错误的解决办法
  2. IOS UIView 对象详解
  3. CVPR 2020 分方向论文大盘点合集
  4. mybatis11--多对多关联查询
  5. wav pcm数据是带符号的吗_UE4 C++基础教程 - 基础数据结构
  6. linux后台任务结束,linux 中任务的前后台切换和暂停、结束任务的命令
  7. linux软件包管理 pdf,中标麒麟Linux系统软件包管理介绍(22页)-原创力文档
  8. 7-4 是不是顺子 (10 分)
  9. 乒乓球比赛赛程_2018国际乒联乒乓球重大赛事详细赛程表,看点爆点早知道
  10. firefox android 去更新,Firefox Android移动版更新
  11. ubuntu repo安装方法
  12. MTK AF如何开启log 录制mobile log 如何full scan(无指令无图片版本)
  13. 基于Springboot健身会员俱乐部管理系统设计
  14. 阿里云跨境游戏及电商网络加速方案(全球加速和CDN)
  15. 彩虹代shua网仿小储store模板 已去除后门
  16. 【KALI使用】17 主动信息收集——四层发现(TCP、UDP、使用 scapy 定刢数据包迕行高级扫描)
  17. java酒店管理系统课程设计_JSP酒店管理系统课程设计.doc
  18. 事件循环EventLoop机制
  19. python浏览器插件下载_Python Editor 5.0.0.3
  20. 人类行为时空特性的统计力学(一)——认识幂律分布

热门文章

  1. 计算机课程可信计算,可信计算-表7.计算机学院(系、所)研究生课程简介.doc...
  2. javaweb之Html/Hss/JavaScript/BootStrap小结
  3. osi是什么?计算机有哪几层?每一层有什么作用?
  4. Angular6笔记(4)
  5. (五)Richardson 迭代法
  6. ArcGIS Pro出图去除底图的水印
  7. 《数据结构》XB专场(完)模块的引用与裁剪
  8. 目标检测评价指标:精确度mAP
  9. Data Quality Services
  10. ProjectEuler Problem1.Multiples of 3 and 5