0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx FPGA的复位:全局复位并不是好的处理方式

电子工程师 来源:未知 作者:李倩 2018-11-19 10:34 次阅读

Get Smart About Reset: Think Local, Not Global

对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在很长一段时间内都是将复位信号作为一个I/O口,通过拨码开关硬件复位。后来也看了一些书籍,采用异步复位同步释放,对自己设计的改进。

不过自从我研读了Xilinx的White Paper后,让我对复位有了更新的认识。

One of the commandments of digital design states,"Thou shalt have a master reset for all flip-flops so that the test engineer will love you, and your simulations will not remain undefined for time eternal."

这句是用来装逼的。使用全局复位有利于我们仿真,所有的寄存器都是有初始值的,也可以在任意时刻让你的寄存器恢复初值,所以验证工程师很喜欢这样的设计,但是Xilinx建议的是尽量避免使用全局复位,这是为什么呢。

全局复位并不是好的处理方式

我们习惯上通常使用的复位有三种,

硬件开关:复位信号接一个拨码开关。

电源芯片:上电时候电源芯片产生,可以长时间维持,直到稳定。

控制芯片:控制芯片产生复位脉冲。

这些复位信号和FPGA内部信号的变化比起来是比较慢的。复位按钮最快也会到达毫秒级别,而FPGA内部信号都是纳秒级别的变化。全局复位的周期远大于系统时钟的周期,是完全可以保证所有的触发器被成功复位的。

但随着系统的频率越来越快,全局复位信号的释放形成一个高扇出的网络

Fan-out即扇出,模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛。因此,在写代码时应尽量避免高扇出的情况。

如图,全局复位的释放需要传输到不同的触发器。每一个触发器需要被释放复位,但是随着时钟频率的提高,加上复位路径网络的延迟,而且全局复位还是一个高扇出的网络,所以这对系统的时序是一个大挑战。

通常情况下,复位信号的异步释放,没有办法保证所有的触发器都能在同一时间内释放。触发器在A时刻接收到复位信号释放是最稳定的,在下一个时钟沿来临被激活,但是如果在C时刻接收到复位信号释放无法被激活,在B时刻收到复位信号释放,则会引起亚稳态。

随着系统时钟频率的提高,并不是所有的触发器都能在同一个时刻从复位状态被释放。

复位真的有那么重要吗?

白皮书上又说了,好的消息是99.9%的情况下,全局复位的异步释放并不会出现问题。所以大多数电路都可以正常工作。但是,如果你有了第一次就不能工作的电路,那你就是遇到那0.01%的情况,很不幸你的复位信号被在错误的时刻重置。(哈哈,皮)。

在一些情况下,复位释放的时间并不重要。

当你的数据采用流水线操作的时候,复位释放的时间并不重要,因为不管你流水线后面的触发器复位释放后是否出错,只需要一些周期后,整个流水线就又会正常工作了。白皮书上还说,这样的复位也是没有意义的。

但是有一些情况下,复位的释放后是很重要的。

比如独热码状态机。如果表示独热码状态的第一个触发器比第二个触发器早释放了一个时钟周期,那状态机的状态机会跳转到一个无效的状态。如果所有的表示独热码的寄存器无法在同一个周期内被释放,那状态机肯定会跳转到一个无效的状态。还有一些例子,请读者自己看白皮书。

解决99.99%的情况

其实当Xilinx FPGA配置或重新配置时,所有的单元都会被初始化。白皮书称为master reset,因为这可比你复位一些D触发器要强得多,它甚至初始化了片内RAM

Xilinx的器件也有嵌入处理的系列,软核或硬核。在程序执行第一条指令前,程序和数据区域已经定义好了。有了上电复位,还用专门消耗逻辑资源去复位触发器是没有意义的。

解决0.01%的方法

当然,白皮书也给出了处理复位的建议和方法。

Think Local, Not Global。异步复位,同步释放的方法。用内部定义复位信号的方法来复位触发器,而不是全都直接使用全局复位信号。当进行复位操作时,所有的触发器被预设为1。如上图,移位寄存器的最后一个触发器去操作模块内部定义的复位网络。当复位信号释放时,移位寄存器经过移位,当最后一个触发器由高电平变为低电平时,对本地的复位网络进行复位操作。也就是异步复位,同步释放。

复位的消耗的资源比你想象的要多

复位网络占用大量布线资源。

提高了布局布线时间。

使用器件的逻辑资源。

会使你的设计变得更大。

占用更多的逻辑资源肯定会影响你的性能。

具体请参阅白皮书。

总结

并不是所有部分的设计都需要复位,所以设计者在设计过程中应该准确判断需要被复位的部分,从而采用异步复位、同步释放的方法进行对复位的严格处理。

当我们在设计每一个部分的时候,都要内心问问自己,这个bit需要被复位吗?

那么怎样处理Xilinx FPGA中的复位呢?Xilinx的工程师也给出了解释和方法。

https://www.eetimes.com/document.asp?doc_id=1278998

http://xilinx.eetrend.com/d6-xilinx/article/2013-07/4343.html

White Paper获得在微信订阅号后台回复“wp272”即可获得!

简单总结就是,Xilinx的FPGA应该尽量避免全局复位,有些部分的设计都可以不用复位,必需要复位的设计而采用 同步 高复位。

代码如下。设计中需要复位的部分,使用产生的sys_rst信号进行同步复位,而且是同步 高复位。再次贴出下图。

1module Sys_Rst(

2 input clk,

3 input rst,

4 output sys_rst

5

6);

7

8reg rst_r0;

9reg rst_r1;

10

11always @(posedge clk orposedge rst)begin

12 if(rst)begin

13 rst_r0 <= 1'b1;

14 rst_r1 <= 1'b1;

15 end

16 elsebegin

17 rst_r0 <= 1'b0;

18 rst_r1 <= rst_r0;

19 end

20end

21

22assign sys_rst = rst_r1;

23

24endmodule

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21663

    浏览量

    601672
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119980
  • Xilinx
    +关注

    关注

    71

    文章

    2163

    浏览量

    120975

原文标题:你真的会Xilinx FPGA的复位吗?

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详细解读FPGA复位的重点

    本篇文章参考Xilinx White Paper:Get Smart About Reset: Think Local, Not Global 在没看这篇文章前,回想一下平时我们常用的复位方式
    的头像 发表于 11-18 17:32 4299次阅读

    基于Xilinx FPGA复位信号处理

    作者:NingHeChuan Get Smart About Reset: Think Local, Not Global。 对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在
    的头像 发表于 12-25 12:08 2568次阅读
    基于<b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b>的<b class='flag-5'>复位</b>信号<b class='flag-5'>处理</b>

    FPGA全局复位及局部复位设计分享

    线将会是一个和时钟一样多扇出的网络,如此多的扇出,时钟信号是采用全局时钟网络的,那么复位如何处理?有人提出用全局时钟网络来传递复位信号,但是
    发表于 05-17 08:00

    FPGA开发中尽量避免全局复位的使用?(2)

    XilinxFPGA器件中,全局复位/置位信号(Global Set/Reset (GSR))(可以通过全局
    发表于 02-11 11:46 1000次阅读
    在<b class='flag-5'>FPGA</b>开发中尽量避免<b class='flag-5'>全局</b><b class='flag-5'>复位</b>的使用?(2)

    FPGA的理想的复位方法和技巧

    FPGA设计中,复位起到的是同步信号的作用,能够将所有的存储元件设置成已知状态。在数字电路设计中,设计人员一般把全局复位作为一个外部引脚来实现,在加电的时候初始化设计。
    发表于 11-22 17:03 5619次阅读
    <b class='flag-5'>FPGA</b>的理想的<b class='flag-5'>复位</b>方法和技巧

    Xilinx FPGA的同步复位和异步复位

    对于xilinx 7系列的FPGA而言,flip-flop支持高有效的异步复/置位和同步复位/置位。对普通逻辑设计,同步复位和异步复位没有区
    发表于 07-13 09:31 6569次阅读

    FPGA怎么搭复位电路 fpga复位电路设计方案

    FPGA的可靠复位是保证系统能够正常工作的必要条件,本文对FPGA设计中常用的复位设计方法进行了分类、分析和比较,并针对各种复位
    发表于 08-08 15:14 1w次阅读

    FPGA设计实战-复位电路仿真设计

    最近看 advanced fpga 以及 fpga 设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输
    的头像 发表于 10-30 12:17 498次阅读

    实现FPGA实战复位电路的设计和仿真

    最近看 advanced fpga 以及 fpga 设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输
    发表于 12-22 12:54 13次下载
    实现<b class='flag-5'>FPGA</b>实战<b class='flag-5'>复位</b>电路的设计和仿真

    FPGA复位电路的实现方式

    有人说FPGA不需要上电复位电路,因为内部自带上电复位信号。也有人说FPGA最好加一个上电复位电路,保证程序能够正常地执行。不管是什么样的结
    的头像 发表于 05-25 15:50 3407次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>电路的实现<b class='flag-5'>方式</b>

    不得不读的Xilinx FPGA复位策略

    尽量少使用复位,特别是少用全局复位,能不用复位就不用,一定要用复位的使用局部复位
    发表于 06-21 09:55 2489次阅读
    不得不读的<b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>策略

    你真的会Xilinx FPGA复位吗?

    对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在很长一段时间内都是将复位信号作为一个I/O口,通过拨码开关硬件
    发表于 06-21 10:39 1153次阅读
    你真的会<b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b>的<b class='flag-5'>复位</b>吗?

    FPGA同步复位和异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的复位操作是设计过程中不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运行。在FPGA设计中,
    的头像 发表于 07-17 11:12 1313次阅读

    复位电路的设计问题

    前言 最近看advanced fpga 以及fpga设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输
    的头像 发表于 11-15 11:13 89次阅读
    <b class='flag-5'>复位</b>电路的设计问题

    FPGA复位的8种技巧

    FPGA 设计中,复位起到的是同步信号的作用,能够将所有的存储元件设置成已知状态。在数字电路设计中,设计人员一般把全局复位作为一个外部引脚来实现,在加电的时候初始化设计。
    的头像 发表于 11-16 10:18 179次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>的8种技巧