Maggie • 来自相关话题

6天前

基于D触发器谈一下对数字电路中时序的一些理解(针对单个触发器的时序分析)

图1. D触发器symbol为了便于理解给出了D触发器的symbol,时序图和比较简单的静态CMOS D触发器原理图时序逻辑电路中重要的几个参数:t-su : 建立时间,D的数据需要在建立时间前到达t-hold: 保持时间,D在该段时间应保持稳定Tc-q : ...查看全部

图1. D触发器symbol

为了便于理解给出了D触发器的symbol,时序图和比较简单的静态CMOS D触发器原理图

时序逻辑电路中重要的几个参数:

  • t-su : 建立时间,D的数据需要在建立时间前到达

  • t-hold: 保持时间,D在该段时间应保持稳定

  • Tc-q : 时钟到输出的延时,时钟到CLK→Q路径延迟

    结合CMOS结构可以对上述三个时间有更好的理解:


  • 图2. D触发器简单时序图

  • 图3. D触发器简单的CMOS结构-时钟上升沿敏感

  • 根据原理图对三个时间进一步理解:该电路工作原理,CLK = 0,T1开,数据经D传输至两个反相器进行缓存,等到CLK=1;T2开,数据经过反相器 I3,I4后输出至 Q。所以上升沿敏感其实传输的数据是CLK= 0 时的数据。因此需要被传输的数据应该在上升沿来到前稳定,即建立时间。保持时间需要从传输门进行考虑,CMOS结构并不是突变,MOS在输入变化时有一段时间不稳定,为了I1,I2处数据发生突变,所以数据需要稳定一段时间。Tc-q很好理解,路劲延迟。

    结合上述分析,进行一个简单的实验。

    实验内容,4位二进制计数器,计数器计数到10将valid拉高一个时钟,实验中有两个valid,一个valid_w,一个valid_r,具体不同见源代码:

    module timing_test(clk,rst,valid_w,valid_r);
    input clk;
    input rst;
    output valid_w;
    output reg valid_r;

    reg [3:0] cnt;
    assign valid_w = cnt == 4'd10 ? 1'b1: 1'b0;
    always @(posedge clk or posedge rst)
      if(rst)
          valid_r <= 1'b0;
      else if(cnt == 4'd10)
          valid_r <= 1'b1;
      else if(cnt == 4'd11)
          valid_r <= 1'b0;
      else
          valid_r <= 1'b0;
    always @(posedge clk or posedge rst)
      if(rst)
          cnt <= 4'd0;
      else
          cnt <= cnt + 1'b1;        
    endmodule


    仿真结果如图4:

  • 图4 实验仿真结果

  • 可以看到valid_w,是在cnt = 10时拉高,而valid_r是在cnt = 11时拉高,如何理解呢?结合图5的RTL图可以做一个很好的解释。

  • 图5 实验RTL图当时钟上升沿到的时候 

  • 计数加一需要在建立时间时才能被触发器采样,同时需要一段延迟才能数稳定。考虑当前时钟cnt=9;当下个时钟到来时,cnt触发器和valid_r触发器同时对clk上升沿敏感,D也同时采样,经过前面对时序的分析也可以知道,D采的是上升沿到来前的值所以valid_r采到的是cnt=9,在RTL_ROM中的比对结果,所以需要下个时钟才能获得cnt=10,在RTL_ROM中的比对结果。当然上升沿这个时刻valid_w也是0,但经过一小段传输延迟后valid_w变为0了,这里仿真结果在逻辑上是正确的,在大自然下应该会有一定的延迟。

Maggie • 来自相关话题

6天前

建立时间,保持时间,以及时钟skew对建立时间余量和保持时间余量的影响

寄存器能够稳定的把数据锁存起来,需要满足2个时间参数,一个是setup time,另外一个是hold time。setup time数据提前时钟沿到达的最小时间,hold time是时钟沿后数据保持的时间。如图4.1.1是集成电路中最常见的组合关系,Tco为从 ...查看全部

寄存器能够稳定的把数据锁存起来,需要满足2个时间参数,一个是setup time,另外一个是hold time。setup time数据提前时钟沿到达的最小时间,hold time是时钟沿后数据保持的时间。如图4.1.1是集成电路中最常见的组合关系,Tco为从时钟上升沿处开始到寄存器输出端Q处有数据输出之间的时间间隔,Tdelay为组合电路,以及走线延时。

图4.1.1

探讨的问题:

数据data从A点开始到达C点,满足什么条件才能保证ff2稳稳的锁存住数据?

clk_a和clk_b没有时钟skew:


建立时间:

如图4.1.2所示,data从第一个时钟上升沿也即t0时刻,传到C,需要经过ff1以及delay模块,耗时分别是Tco和Tdelay,在时刻t1到达C。第2个时钟上升沿在t2时刻才能到达。t2-t1为data先于第2个时钟上升沿到达的时间,建立时间要求data要至少先于第2个时钟上升沿Tsu时间到达,t2-t1-Tsu为建立时间余量用Tsu_r表示,根据图4.1.2黄色区域可得如下公式:

上式中建立时间余量Tsu_r一定不能小于0,因此,


保持时间:

如图4.1.1所示,data要传到C,需要经历ff1以及delay模块,耗时分别是Tco和Tdelay.

现在关注图4.1.3所示的第2个时钟上升沿p2,p2时刻ff2锁存住C上面的数据1,根据保持时间知识,ff2寄存的数据C要保持至少Thd。p2时刻ff1锁存住的新数据0到达C所用的时间为Tco+Tdelay要比Thd大才能保证ff2输出稳定。

图4.1.3黄色区域可得如下公式:

其中Thd_r为保持时间余量,一定不能小于0,因此,

clk_a和clk_b之间有skew:

建立时间:

图4.1.4

时钟无skew:

因此,对比可知当有时钟skew时,建立时间空余量更大,因此更能满足建立时间的要求。

保持时间:

图4.1.5

对于ff1,p3时刻锁存的新的数据0,传到C端的所用时间依然是Tco+Tdelay,对于ff2,相对于ff1的p3其要过skew时间,p4才能锁存住数据1,依然要求C端数据1稳定的时间至少是Thd。根据黄色区域有如下公式:

无skew:

因此,对比可知当有时钟skew的时,保持时间空余量变小,因此不利于保持时间的满足。