1 前言
绝大部分数字逻辑最终是由标准单元实现的,而一般的标准单元里只有单沿触发器,要么上升沿触发,要么下降沿 触发;没有即上升沿触发也下降沿触发的双沿触发器。
而在现实应用中,随着DDR技术的流行,对双沿触发的需求越来越多。本文主要讲述如何用单沿触发器来有效的实 现双沿触发器的功能。
2 方法1:用时钟选择输出
这个是最直接的方法,分别用上升沿和下降沿采样数据,然后用时钟来选择不同沿的采样数据,高电平选择上升沿 采样的数据,低电平选择下降沿采样的数据。如图1:
图1:时钟选择输出的双沿触发器
此方法的问题在于输出Y和时钟clk相关,这对于后端APR是非常不建议的方式。clk和数据交叠,时钟树、时序分析 都会存在困扰。因此,若非迫不得已,请不要使用上述看起来很直观的方法。
3 方法2:组合设计,寄存器逻辑输出
此方法的目标是解决方法1的潜在问题,让输出路径上没有时钟,仅仅和寄存器相关。
首先,为了实现上升沿/下降沿都能采样数据,必须至少有一个上升沿触发器和一个下降沿触发器。
做如下定义:
因为输出Y仅仅和寄存器相关, 因此定义Y和 N,P 的关系为布尔函数 fy :
Y=fy(N,P)
Y′=fy(N′,P′)
而P'和N'不仅仅和寄存器相关,还和输入有关,因此定义:
N′=fn(i,N,P)
P′=fp(i,N,P)
为了达成如上目标,需要满足以下条件:
1. 双沿触发器的功能是,当下一个时钟沿(不论是上升沿还是下降沿)是来临之后,输出值必须等于输入值 i,即:
o 当输入 i=0 时, Y′=0
o 当输入 i=1 时, Y′=1
2. 先考虑上升沿,对于上升沿,下降沿的触发器值不变,也就是
N′=N
整理如表1:
Table 1: 正沿逻辑真值表 |
||||
i |
N |
P |
Y'= fy(N',P') |
P'=fp(i,N,P) |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
|
0 |
1 |
0 |
0 |
|
0 |
1 |
1 |
0 |
|
1 |
0 |
0 |
1 |
|
1 |
0 |
1 |
1 |
|
1 |
1 |
0 |
1 |
|
1 |
1 |
1 |
1 |
|
由上表,由于 Y′ 只和 i 相关(注意: N′=N):
o 上半部,不论N取值是0还是1, Y'的取值都是0;
o 下半部,不论N取值是0还是1, Y'的取值都是1;
考虑到如下等式:
N xor N=0
N xor ~N=1
根据如上等式,如果设定:
Y′=N′ xor P′
Y=N xor P
就可以满足真值表中关于 Y 的要求,于是将真值表上部分(Y′=0)的部分的 P′ 值填写为和 N 相同的值. 将真值表下部分(Y′=1)的 P′ 值填写为 N 值的取反,P′ 填写之后,得到如下真值表表2:
Table 2: 正沿逻辑真值表 |
||||
i |
N |
P |
Y'= fy(N',P') |
P'=fp(i,N,P) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
根据以上真值表,经过化简,得到:
P′=fp(i,N,P)=i xor N
3. 同理,考虑下降沿,对于下降沿, 上升沿触发器的值不变, P′=P. 整理真值表如表3:
Table 3: 负沿逻辑真值表 |
||||
i |
P |
N |
Y'= fy(N',P') |
N'=fp(i,N,P) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
4. 也可以得到 N′ 的简化逻辑:
5. N′=fn(i,N,P)=i xor P
6. 综合 Y, P′ 和 N′ 的逻辑:
Y=N xor P
N′=i xor P
P′=i xor N
得到如下的双沿触发器的实现, 如图2:
图2:寄存器输出的双沿触发器
4 结论:
本文根据双沿触发器的设计要求,要求满足输出只和寄存器相关,一步一步根据真值表得到各个状态和输出的逻辑关系, 从而得到双沿触发器的设计结果。
评论