大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~ 本篇文章我们来讲讲复位信号。复位信号,它的设计目的是让芯片进入一个能稳定操作且确定的初始状态,从而能够避免芯片在上电后进行某个随机的状态而死机,或者是运行过程中出现了问题,能通过看门狗等方式产生复位而恢复初始状态。 复位信号可以分为同步复位和异步复位两种,它们各自有自己的优点和缺点,我们接下来对这两种复位信号进行介绍。 一、同步复位 同步复位也就是与时钟同步的复位,因此同步复位只有在时钟的有效沿来临时才能复位触发器的状态。 同步复位的verilog代码如下所示: always @(posedge clk) begin if (!rst_n) begin out <= 1'b0; end else if (load) begin out <= in; end end 其综合得到的电路结构如下所示: 如上图所示,可见同步复位是输入到触发器D端的,因此同步复位占用了数据路径,进而增加了路径延迟。 根据上述电路结构我们可以发现同步复位存在以下优缺点: 同步复位的优点:
同步复位的缺点:
二、异步复位 异步复位即不与时钟同步的复位信号,使用异步复位的触发器在设计时就加入了一个独立的复位引脚,通过有效的复位信号即可在不依赖时钟的基础上将触发器进入复位初始状态。 下面是带有异步复位信号的触发器的verilog代码:
这里提示一下:规定复位信号必须写在第一个if里,否则会出现编译报错! 下图是上述代码所综合出的电路结构: 可见,此时复位信号不再挤占数据路径,其复位信号直接连接在了触发器的复位引脚上。 下面对异步复位的优缺点进行总结: 异步复位的优点:
异步复位的缺点:
三、异步复位信号的同步 与数据信号需要满足的建立时间和保持时间类似,复位信号也需要满足恢复时间(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,因此当异步复位信号撤销时可能会违背恢复时间与撤销时间,进而导致亚稳态的出现。 而对于第二个触发器,由于异步复位信号撤销时,其输入和输出都为低电平,因此不会出现亚稳态,而第一个触发器的亚稳态在经过了一个周期后,也会稳定下来,进而不会导致亚稳态向下游传递。 |
|
来自: 新用户62592529 > 《芯片》