分享

ic基础|复位篇∶关于同步复位和异步复位你不得不知道的二三事!

 新用户62592529 2024-05-11 发布于四川

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~

    本篇文章我们来讲讲复位信号。复位信号,它的设计目的是让芯片进入一个能稳定操作且确定的初始状态,从而能够避免芯片在上电后进行某个随机的状态而死机,或者是运行过程中出现了问题,能通过看门狗等方式产生复位而恢复初始状态。

    复位信号可以分为同步复位和异步复位两种,它们各自有自己的优点和缺点,我们接下来对这两种复位信号进行介绍。

一、同步复位

    同步复位也就是与时钟同步的复位,因此同步复位只有在时钟的有效沿来临时才能复位触发器的状态。

    同步复位的verilog代码如下所示:

always @(posedge clk) begin  if (!rst_n) begin out <= 1'b0;  end else if (load) begin out <= in; endend

    其综合得到的电路结构如下所示:

    图片

    如上图所示,可见同步复位是输入到触发器D端的,因此同步复占用了数据路径,进而增加了路径延迟。

    根据上述电路结构我们可以发现同步复位存在以下优缺点:

    同步复位的优点

  • 同步复位能确保电路是100%同步的,能确保复位只发生在时钟有效沿,进而过滤掉复位信号的毛刺。

  • 同步复位会被综合成更小的触发器。

  • 同步复位是同步电路,因此静态时序分析STA可以像分析其他数据路径那样分析同步复位,从而避免亚稳态

    同步复位的缺点

  • 需要耗费更多的资源,如上图所示,同步复位由于挤占的数据路径,因此加了一个与门进行控制,而这仅是一个触发器,芯片上所有的触发器如果都多消耗一个与门,那么所多消耗的资源就不可小觑了。

  • 由于同步复位占用了数据路径,因此必然会带来数据路径上的延迟,进而对建立时间的满足带来负面影响。

  • 由于同步复位依赖于时钟,假设时钟处于低功耗设计的考虑被关了的话(即使用clock gating),那么同步复位就无法生效。

二、异步复位

    异步复位即不与时钟同步的复位信号,使用异步复位的触发器在设计时就加入了一个独立的复位引脚,通过有效的复位信号即可在不依赖时钟的基础上将触发器进入复位初始状态。

    下面是带有异步复位信号的触发器的verilog代码:

always @(posedge clk or negedge rst_n) begin  if (!rst_n) begin    out <1'b0;  end else if (load) begin    out <= in;  endend

    这里提示一下:规定复位信号必须写在第一个if里,否则会出现编译报错!

    下图是上述代码所综合出的电路结构:

图片

    可见,此时复位信号不再挤占数据路径,其复位信号直接连接在了触发器的复位引脚上。

    下面对异步复位的优缺点进行总结:

    异步复位的优点

  • 使用异步复位最大的优点是不增肌数据路径的延迟,能保证数据路径上是干净的,这对于时序已经很紧张的数据路径来说非常友好。

  • 无需时钟即可复位,在芯片上电时或者时钟被gating时也能正常复位触发器。

  • 消耗更少的逻辑资源。

    异步复位的缺点

  • 异步复位是一个异步过程,它不能通过静态时序分析STA进行时序分析,因此有潜在的亚稳态问题。

  • 由于异步复位不与时钟同步,因此触发器对异步复位信号高度敏感,因此如果复位源头有噪声或者是毛刺就会引起伪复位,即产生错误的触发器复位。

  • 异步复位释放时不易保证同时到达每一个触发器。

三、异步复位信号的同步

    与数据信号需要满足的建立时间和保持时间类似,复位信号也需要满足恢复时间(recovery time)和撤销时间(removal time),他们的具体含义如下:

    恢复时间:指的是异步复位被设置为无效后,在下一个时钟有效沿到来之前需要保持稳定的最短时间。

    撤销时间:是在异步复位被设置为无效之前,与前一个时钟有效沿之间需要保持有效的最短时间。

    如下图所示:

    图片

    如果不满足异步复位信号的恢复时间和撤销时间,那么就可能产生亚稳态,进而导致某些寄存器或触发器提前退出复位状态,进而出现问题。

      因此,我们需要在异步复位信号释放时对其进行同步(也叫异步复位同步释放),即使用复位同步器,它的结构如下图所示:

    图片

    它的verilog代码如下所示:

always @(posedge clk or negedge rst_n) begin  if (!rst_n) begin    rst_dff1 <= 1'b0; rst_dff2 <= 1'b0;  end else begin    rst_dff1 <= 1'b1; rst_dff2 <= rst_dff1; endendassign masterrst_n = rst_dff2;

    接下来我们对上述的复位同步器进行分析:

    首先,当异步复位信号有效时,两个触发器都会被复位为0值,进而驱动主复位信号通过复位缓冲树,再到达设计中的其他触发器,然后整个设计都异步复位(即所谓'异步复位”)。

    当复位信号被置为无效时,第一个复位寄存器将在时钟的控制下被置为1,随后下一个周期,第二个复位寄存器也会被置为1,最终花费了两个时钟有效沿移除了主复位信号,进而整个设计开始正常工作(也就是所谓'同步释放”)。

    我们把上述两个过程称为异步复位同步释放

    再说明一下,这里之所以用了两个触发器进行复位信号同步是为了移除亚稳态。

    第一个触发器由于其D端固定输入高电平1,当其复位时被置为低电平0,因此当异步复位信号撤销时可能会违背恢复时间与撤销时间,进而导致亚稳态的出现。

    而对于第二个触发器,由于异步复位信号撤销时,其输入和输出都为低电平,因此不会出现亚稳态,而第一个触发器的亚稳态在经过了一个周期后,也会稳定下来,进而不会导致亚稳态向下游传递。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多