何为建立时间(Setup Time)和保持时间(HoldTime)?以D触发器为例,在作为接收端时;由于工艺、寄生参数、触发器结构等原因决定,被采样数据必需有一个稳定区 间,保证数据可以正确的被触发器采样。通常我们把这个要求的稳定区间称为 Setup-Hold window。我们把 Setup-Hold window 和时钟沿对应起来,把Setup-Hold window 分解为两部分,建立时间(Setup Time)和保持时间(Hold Time)。
我们先来对他有一个直观的描述:
在触发器的时钟沿到来前,输入数据必须保持在一个稳定状态的最小时间;称为建立时间(setuptime)。
在触发器的时钟沿到达后,输入数据需要继续保持在原状态的最小时间,称为保持时间(holdtime)。
建立保持时间的初步推导
在这里我们从触发器的内部结构来分析建立保持时间
上 图是一个由6个与非门构成的维持阻塞结构的D触发器,每个与非门有门延时tpd;其中/SD 和/RD是异步置0置1端;当/SD 和/RD为0、1(或1、0)时,触发器被直接置1(或置0),只有当/SD 和/RD同时为1时,CLK和D的变化才起作用。各端的逻辑关系如下
G1=(/SD&SD‘&G2) ////Q=/SD & SD‘ & /Q
G2=(/RD&RD‘&G1) ////Q=/RD & RD‘ & Q
RD‘=(SD‘&CP&a) ////RD‘ = SD‘ & CP & a
SD‘=(/RD&CP&b) ////SD‘ = /RD & CP & b
b=(/SD&SD‘&a) ////b = /SD & SD‘ & a
a=(D&/RD&RD‘) //// a = /RD & RD‘ & D
分析电路逻辑功能时可以假定/SD 和/RD同时为1,即可暂时把/SD 和/RD相关的门的连线去掉,如下图:
Q=SD‘ & /Q
/Q=& RD‘ & Q
RD‘ = CP & a // RD‘=0锁住G6,一个 & 门延迟,RD‘更新
SD‘ = CP & b //SD‘=0锁住G4 G5,一个 & 门延迟,SD‘更新
b = SD‘ & a //两个 & 门延迟2ptd,b的值更新
a = RD‘ & D //一个 & 门延迟tpd,a的值更新
结合上图触发器结构,我们看出,若要使时钟到来前数据a、b都稳定,从D到a经过1个与非门,到b经过2个与非门;所以必须使D在CLK上升沿到来之前至少提前2个tpd输入才能保证数据稳定;
时钟到来之后,要经过1个tpd,使RD’和SD’输出;当RD’=0时,锁住与非门G6;SD=0时,锁住G4和G5;使D的变化不再影响到下一级;
通过上面的推导结合建立保持时间的定义,我们可以得出该D触发器的建立时间为2*tpd;保持时间为tpd;
详细验证:
上面只是一个初步推论,不满足这个时间会不会又有怎样的现象?是否和我们取得的定义符合?为了支撑该推论我们还需要做些验证:当D与CLK的建立保持时间满足上述条件的情形和不满足上述条件情形都会出现什么状况;
我们列出在D输入为0时,
1. 比clk上升沿提前稳定2*tpd,并在clk上升沿到来后保持1*tpd;
2. 比clk上升沿提前稳定1*tpd,并在clk上升沿到来后保持1*tpd;
3. 比clk上升沿提前稳定2*tpd,并在clk上升沿到来不保持;
三种情形,看会对输出造成什么影响
以下为上述三个条件下的真值表;相邻两栏之间间隔一个tpd;Z表示无效状态,tpd=0时,Q 和/Q已被赋予一个初始状态;
D输入为0,比clk上升沿提前稳定2*tpd,并在clk上升沿到来后保持1*tpd
Tpd |
D |
a |
b |
CLK |
SD‘ |
RD’ |
Q |
/Q |
备注 |
0 |
Z |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
无数据输入时高阻态,Q被异步置0后释放 |
1 |
0 |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
有效数据开始输入 |
2 |
0 |
1 |
Z |
0 |
1 |
1 |
1 |
0 |
|
3 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
数据稳定(a和b) |
4 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
稳定后时钟沿到来 |
5 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
RD’锁定G6输出1状态,此处开始输入D变化不对输出造成影响 |
6 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
|
7 |
X |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
此值由SD‘&RD‘经过tpd后输出,当CLK为低时,数据保持,直到下一个时钟到来 |
D输入为0,比clk上升沿提前稳定1*tpd,并在clk上升沿到来后保持1*tpd
Tpd |
D |
a |
b |
CLK |
SD‘ |
RD’ |
Q |
/Q |
备注 |
0 |
Z |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
无数据输入时高阻态,Q被异步置0后释放 |
1 |
0 |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
有效数据开始输入 |
2 |
1 |
1 |
Z |
0 |
1 |
1 |
1 |
0 |
D在1个tpd后跳变(不满足建立时间) |
3 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
时钟来临 |
4 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
稳定后时钟沿到来 |
5 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
输出错误,且不能锁住G6,会有空翻转,数据无法保持,状态不定 |
6 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
|
7 |
X |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
此值由SD‘&RD‘经过tpd后输出,当CLK为低时,数据保持,直到下一个时钟到来 |
D输入为0,比clk上升沿提前稳定2*tpd,并在clk上升沿到来不保持
tpd |
D |
a |
b |
CLK |
SD‘ |
RD’ |
Q |
/Q |
备注 |
0 |
Z |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
无数据输入时高阻态,Q被异步置0后释放 |
1 |
0 |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
有效数据开始输入 |
2 |
0 |
1 |
Z |
0 |
1 |
1 |
1 |
0 |
|
3 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
数据稳定(a和b) |
4 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
稳定后时钟沿到来 |
5 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
RD’锁定G6输出1状态,此处开始输入D变化不对输出造成影响 |
6 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
|
7 |
X |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
此值由SD‘&RD‘经过tpd后输出,当CLK为低时,数据保持,直到下一个时钟到来 |
8 |
X |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
SD’锁定G4和G5输出1状态,此处开始输入D变化不对输出造成影响 |
9 |
X |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
锁定为此出错状态 |
从表中结果来看,不满足建立保持时间出现了误触发、空翻转等异常操作,且可能无法锁定G6与非门,使保持时间失效;以上只是不满足建立保持时间的部分现象。这类现象叫亚稳态。
D触发器的逻辑很有趣,初始输入输出状态不同与非门翻转的过程也会不一样;当D=1时情形会和D=0有所不同,在此不赘述,附件会有一个计算表格,大家有兴趣可以推导当D=1时的状态。
异步信号:异步信号对于本地时钟域系统都意味着一个不稳定的源,因为总是存在这种可能,时钟会在异步信号变化的时候进行了采样,导致建立/保持时间不稳定,D触发器进入亚稳定状态。
危害:异步信号A的输入,可能导致亚稳态,引起信号B的输出状态不稳定。如果B信号有多个扇出,那么就不能保证所有的扇出将亚稳态的信号识别为相同的逻辑电平值,电路判断出现混乱。
保 证下级时钟对上级数据采样的Setup时间和Hold时间,避免亚稳态。(注:如果触发器的Setup time或者Hold time不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压 值,而不是等于数据输入端D的值。这段之间成为决断时间(Resolution time)。经过Resolution time之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系)
使用两级寄存器采样可以有效的减少亚稳态继续传播的概率,但是无法纠正由于亚稳态导致的数据错误。在图中,左边为异步输入端,经过两级触发器采样,在右边的输出与bclk同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个Clk周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。理论上如果再添加一级寄存器,使同步采样达到3级,则末级输出为亚稳态的概率几乎等于0。
经过两级触发器采样能解决异步信号的亚稳态问题,但是不能保证输出的值是正确的。
原文:http://www.cnblogs.com/chip/p/5203790.html