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

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

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

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

一、同步复位

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

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

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

其综合得到的电路结构如下所示:
在这里插入图片描述

如上图所示,可见同步复位是输入到触发器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;
  end
end

这里提示一下:规定复位信号必须写在第一个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;
  end
end
assign masterrst_n = rst_dff2;

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

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

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

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

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

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

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

如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!

  • 33
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值