首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

IC设计基础系列之CDC篇7:从CMOS到触发器(二)

IC设计基础系列之CDC篇7:从CMOS到触发器(二)

5、(D)触发器的建立时间和保持时间
  首先我们来看看建立时间和保持时间的定义,然后再看看为什么会这样。
  建立时间:时钟有效沿到来之前的某段时间内,数据必须稳定,否则触发器锁存不住数据,这段时间成为建立时间,用Tsetup或者Tsu表示,也就是说要锁存的数据必须比上升沿早来时间必须大于建立时间。
  保持时间:时钟有效沿到来之后的某段时间内,数据也必须稳定,否则触发器锁存不住数据,这段时间成为保持时间,用Thold或者Th表示。也就是说,要锁存的数据,在上升沿到来之后,还要停留比保持时间大的时间。
如下图所示:
            


  在第二个时钟上升沿的时候,要锁存住输入端D的高电平,D1是满足了建立时间和保持时间的情况;而D2则是建立时间没有满足,因此不能成功锁存住输入的高电平;D3保持时间不满足,也不能成功锁存输入的高电平。
  下面我们就来探讨一下为什么会会有建立时间和保持时间的要求(别跟我说不满足要求就不能锁存正确数据,我要的是根本原因,不是后果,也就是为什么不满足建立/保持时间会导致不能捕获正确锁存数据的原因):
  首先D触发器的门级结果如下所示:
      


  我们知道D触发器是在(上升)边沿进行锁存数据的,也就是clk从在01的时候锁存数据,那我们就看看这个上升沿的时候发生了什么:
假设原来的数据是1(也就是从锁存器锁存的数据是1),然后我们要锁存的数据是0。我是这么理解建立时间和保持时间的:
  首先,要让时钟上升沿之后Q输出为了,就是要让从锁存器输出为0,即是要主锁存器在时钟上升沿之后稳定地锁存住0,换个角度看就是:在上升沿到来以及到来之后,主锁存器负责锁存数据,而从锁存器则是负责传输 主锁存器所锁存好的 数据;这样一来,我们的研究重点就放在了主锁存器
  对于主锁存器,我们可以看这个图:
                


  在时钟上升沿到来后,我们要让Q输出0。假如数据的建立时间不足,会发生什么呢,也就是数据(0)相对于时钟上升沿来得太晚了会怎么样呢?
  假设在T=0ns的时候,clk0变成1(为方便分析,假设时钟是理想的,没有跳变延时)。我们假设一个数据D1=0T=-0.7ns的时候到达数据的端口,然后另一个数据D2=0T=-0.3ns的时候才来到数据端口(也就是说,D1来得早,而D2来得比较晚即建立时间不足)。然后D1这个0翻山越岭越过了反相器,变成1,经过了与门(由于与门的另一个输入为1)变成了1,经过或非门之后,使输出Q变成了0,也就是变成了从锁存器要锁存的0值。然后主锁存器Q刚输出0的时候,还不稳定,需要通过反馈使得自己的或非门的输入为1就是需要t1+t2+t3的时间(如下图所示)进行维持Q的稳定。
                


  然后我们再看看D2数据翻山越岭,刚刚翻到与门那里,时钟沿就来了,它都没有成功到达或非门输入。于是D2就肯定达不到目标了,也就是变不成了从锁存器要锁存的0值,这就是建立时间不足的引起锁存不住值的问题。
  接着我们看一下保持时间,当时钟经过上升沿跳变成1的时候,clk1信号到达与门需要t1时间(如下图所示),在这个t1时间内,与门的输入端clk始终保持原来的值1;这个时候,如果输入端D发送跳变,也就是从0变成1,经过t2延时之后,到达与门的另一个输入端,当t2<t1的时候(由于时钟需要经过反相,一般情况下t1是大于t2的),与门的输出就为1,也就是S=1,这就导致Q’=0.R是为0的(不管D改变前还是改变后),从而导致Q的输出就为1。这时候就输出错误了。
              


    因此我们需要输入D在时钟沿跳变之后保持不变,这个保持时间的实质就是这个t1t2的差值。


从上面的分析可以知道,保持时间一般情况下会比建立时间小
返回列表