引言
- 在时序电路的学习过程中,我们实际上一直在关注它的稳态,无论是写三组方程还是上一篇文章的设计,目标都是为了得到逻辑关系然后画图,从来没有考虑过它动态的问题
- 触发的难点是电路结构,后面那四个动态的时间
- 在时序电路中,由于引入了触发器,所以触发器的动态特性,时间参数等一定会带到时序逻辑电路中
- 前面讲的所有时序电路的分析和设计都是同步的,也就是单时钟
- 我们把时序电路抽象成触发器和触发器之间的浮云,每一个浮云都是一个驱动方程,所以在整个同步时序逻辑电路中,每一个驱动方程都是一个组合电路。云彩的大小各有不同
回忆触发器的动态特性(四个时间)
- 四个参数分为两组:一组是和组合电路一样是关于传输延迟的(Tcd,Tpd),还有一组是对信号的要求,要求数据信号和触发信号有一个配合(Tsetup,Thold)
- 在触发器中,所有时间参数的起点都变成触发的边沿
同步时序电路应该遵循的原则
(1)没有组合回环
(2)单时钟
(3)任何时候只关心驱动方程的运算结果
(4)时钟之间的间隔一定要大于每一个驱动方程的运算时间
(5)所有的变化一定都要以状态存在电路当中
- 也就是算完之后都放着,由于算的过程中,时钟没有到达所以没有影响
- 把其中一级分析清楚,整个电路就有章可循
同步时序电路的动态时间参数
- 上面的图中,每一个触发器都对数据和时间有一定的要求啊,每一个触发器都会对写进来的数据有一个传输延迟时间
- 随便摘一个出来
- 摘出来的触发器有前级也有后级,前级也是一个触发器
- 这一级想要稳定工作的话,对于这一级的驱动方程运算出来的star要早于触发脉冲来,晚于触发脉冲走,这是这个触发器本身提出的要求
- 这个要求由前级来满足。晚走:保持时间,由于是同步时序,所以前级和后级的触发信号是同时到来的,所以一旦触发边沿到来,输出就开始变化,所以要保证前面触发器的Tcd和后面的云的Tcd加起来满足Thold。
- 早来:建立时间,这个不是问题,因为只要触发脉冲不到,一直就在那建立的,所以要延长时钟脉冲。我现在想把时钟脉冲缩短,原因是想提高整个电路的工作频率,所以不能为了建立时间而把脉冲拉的特别长。!!所以,如果能算出来缩短的下限,就能算出来电路的最高工作频率
- 计算方法:两个时钟边沿之间就是一个工作周期。当一个时钟边沿到达后,新的信号的建立需要前级触发器的Tpd加上电路1的Tpd,这时候下个时钟边沿还不能来,还得往后再推一个Tsetup。两个边沿一定要覆盖两个传输加上一个建立时间,这就计算出了最高工作频率了
- !问题1:整个同步时序电路,最高工作频率取决于谁?
- 取决于最大的那朵云,触发器的传输延迟公共项一样,如果触发器的特性一样,建立时间也一样,所以唯一的区别就在组合电路那部分。所以应该找出整个时序电路工作周期中最长的工作周期作为整个的工作周期,这也是整个电路工作频率的一个瓶颈
- !问题2:如果不满足上面的不等式怎么办?
- 那就往云彩里加东西,但是同时也会造成工作频率降低。所以在改善一个性能的时候,另一个性能一定是要牺牲的
举例分析
- A信号的Tsetup >= 7ns
- A信号的Thold >= 0ns
(1和2要考虑A参与了FF2的驱动方程) - 时钟信号最小周期为:Tclk = 15ns
(!!!原理参考上一张图)
!!!Pipelining – 流水线
- 这部分内容书上没有,但是很重要(MIT的)
- 这是触发器在数字电路中的一类典型应用,!触发器和之前的作用不一样
背景
先不说电路,先说一些实际的东西
(1)美国人没有晒衣服的习惯,他们的洗衣房就是洗衣机+烘干机
(2)洗衣机比较快,大概30min;干衣机比较慢,60min
(3)所以一有衣服就送去洗的话,洗一次衣服要花的时间就是90min
(4)有人洗衣机洗完放烘干机(N=1),结束后洗衣机洗再放烘干机(N=2),这样的时间是90N
(5)流水线:第一步,把衣服放洗衣机;第二步:把洗洗完的衣服放干衣机,并把第二波衣服放洗衣机;第三步,重复第二部,以此类推(如果只有一台洗衣机和一台干衣机,衣服需要在洗衣机多呆30min)。这样的时间是NMax(WasherPD,DryerPD)= N*60
引出两个名词:
(1)Latency(延迟):
- 方式(4)中每一波衣服从进到出是90min
- 方式(5)中每一波衣服从进到出是120min
(2)Throughput(吞吐率,产出)
- 方式(4)中从外面接衣服的时间间隔是90min,吞吐率是1/90 outputs/min
- 方式(5)中从外面接衣服的时间间隔是60min,吞吐率是1/60 outputs/min
吞吐率高说明单位时间的处理能力强
回到电路
- 方式(4)其实描述的组合电路的工作方式,一件事情做完之后再做下一件,只要两个事情都没做完,新数据不会来
使用Pipelining前
- F,G,H的传输延迟时间都是ns的单位
- 所以总的传输延迟是45ns
- 但是F和G再H运算的时候都没有进行运算,就像洗衣房一样,我已经干完了,但是不能接新活,原因是要等后面干完
- Pipelining的思想就是源于我们要把触发器和组合电路结合起来。前面我们将触发器和组合电路一起完成电路功能和存储的设计。!!!!在Pipelining中,触发器是一个单独的应用,它的目标很简单,就是为了存储
- 就像这个电路中的F和G,只要有东西给他存着结果,他就能开始新的运算了。!!而一旦开始接新的数,电路的工作频率和吞吐量就提高了。
- !!!!实验测得组合电路的传输延迟都是ns单位了,但是现在号称的频率都非常高,这个实现的技术就是Pipelining
使用Pipelining后
- 就是加触发器
- 之前的电路参数:Latency = 45,Throughput = 1/45
- 现在的电路参数:Latency = 50,Throughput = 1/25
(50是前一个人的25加自己的25)
硬件pipeline注意点
- 关键:Pipelining都放在输出
- 注意1:我们之前的组合电路是没有Pipelining的,如果要加K级的pipeline的话,就意味着在输入到输出的每一条通道上都要经过K个触发器,一定要一样,从输入到输出不管走哪条线都要经过K级,这样才能同步
- 注意2:K级流水线所有的触发器都放在输出,另外,时钟是公用的,而且时钟的周期应该比最大的组合那部分长,还应该要加上触发器的建立时间
- 整体来说K级流水线的工作频率就是按照最大的那个来算的
反例
- 把流水线放在输入了
- A->C和A->B->C经过的流水线级数不一样
- 所以这么加完对电路的性能改善一点作用都没有
取流水线的办法
-
在最后的输出加一级
-
在不同级之间加
- A和B之间没必要化了,因为前面有个8ns,所以按照最长的算
- T = 1/8 ns
- L = 24ns
- 问题:电路中如果存在这么一个8ns的区域,那电路的工作频率是不是就上不去了?
- 前面的背景是只有一个洗衣机一个干衣机,所以前面的背景要提高就可以买一台干衣机,吞吐率就变成1/30。再多买还能提高
- 对于这个电路,设计一个外围电路让8ns -> 4ns
-
流水线的优缺点
(1)优点:吞吐率提高,使得整个电路的工作频率提高(核心)
(2)缺点1:单独跟踪某个数据的时候,这个数据在流水线中呆的时间会延长
(3)缺点2:如果电路中有一个特别慢的,整个电路的性能都取决于它(例:上面的8ns)
-
所以回到上面的图,看8ns能否降下来
- 如果某个电路采用的流水线,那么允许在这些模块的内部也采用流水线
- 找到薄弱的环节,让工作时间最长的环节并行,比如之前的洗衣房,再买一台干衣机的话,吞吐率就变成1/30,延迟是90
- 对于上图的C,可以用数据选择器
- 用了两个电平的触发器。当CLK=1时,下面的那个取数据,上面那个在保持(也就是在运算)
- 左下角Q=1时,选的是上面那个通道,实际上实在用上面的通道运算,同时左下角的Q=1,把下通道的触发器打开了,下面的通道取数,但是数据选择器没有选下一个通道,所以Q=1的这个周期内,下通道的输出都不会打开也就是按你自己的运算就可以
- 当下一个到达时,Q=0,依此类推。所以上下两个在切换着工作,那么上下两个的时钟周期需要覆盖C本身的时钟周期,所以此时C的传输延迟时间还是8ns,所以每个数本身传输延迟没变,但是两路错开,把吞吐率提高了
- !!控制核心就是左下角的边沿D触发器,提供了一个0和1的有限状态机
- 当做了上述处理把C的延迟变成4ns后
- 这时,T = 1/5, L = 25
本章小结
- 时序逻辑电路的特点(功能上和电路结构上),逻辑功能的描述方法(三个方程,其中两个时组合,只有一个是关乎状态的)
- 同步时序电路的分析方法(记住三个方程只有一个关注状态)和设计方法(设计方法的难点就在逻辑抽象)
- 流水线pipeline
- 典型时序电路模块的分析,如几种常用的MSI时序电路器件的基本功能及时序方法(功能表,附加控制端功能,扩展接法,任意进制计数器构成方法)
- 动态特性(前面所有的核心,时序电路之所以能稳定动作)
- 异步时序电路的额分析方法(没有一个定论的方法,自己仔细)