集成电路设计基础时序电路篇(一)-FPGA常见问题社区-FPGA CPLD-ChipDebug

集成电路设计基础时序电路篇(一)

导言:

今天开个专题:CMOS VLSI Design,关于IC设计的书,之前推荐大家看过,我猜测很多人英文都很难看下去,所以花点时间翻译部分给大家参考,这本书是从电路和系统的角度来阐述VLSI设计,内容相对比较基础,但所有设计基础才是王道,个人觉得是值得一看的。因为是机器和手工配合翻译,难免有错误的地方,请大家配合原文阅读。因为要考虑到学习FPGA的朋友,所以先从时序电路翻译起。

一、介绍

组合电路的输出是当前输入的一个函数。本章讨论的是时序电路,其中输出取决于先前和当前的输入;这种电路被称为有状态。有限状态机和流水线是时序电路的两个重要例子。

 

时序电路通常设计有flip-flops或锁存器,它们有时被称为存储器元件,用于保存被称为tokens(token一般指最小的数据,单位数据,token还有令牌/标记/暗号的意思,这里就理解为一个名字即可)的数据。这些元件的目的并不是真正的存储,而是为了执行顺序,将当前的token与前一个或下一个token区分开来。因此,我们将它们称为时序元件(sequencing elements)。如果没有时序元件,下一个token可能会赶上前一个token,使两者混淆。时序元件延迟过早到达的token,防止它们追上之前的token。不幸的是,它们不可避免地给已经很关键的token增加一些延迟,降低了系统的性能。这种额外的延迟被称为时序开销(sequencing overhead)。

 

本章考虑了静态和动态电路的时序问题。静态电路指的是没有时钟输入的门,如互补CMOS、pseudo-nMOS或通过晶体管逻辑(pass transistor logic)。动态电路指的是有时钟输入的门,特别是多米诺逻辑(domino logic)。为了使术语复杂化,时序元件本身可以是静态或动态的。静态存储的时序元件采用某种反馈来无限地保持其输出值。动态存储的元件通常将其值保持为电容器上的电荷,如果长时间不刷新,电荷就会漏掉。门和时序元件的静态或动态选择可以是独立的。

 

第2-4节探讨了静态电路的排序元件,特别是flip-flops、2-phase transparent latches和脉冲锁存器(pulsed latches)。第5节深入探讨了各种动态电路的排序方法。周期性时钟通常用于指示序列的时间/时序。第6节描述了如何将外部信号与时钟同步,并分析了同步器失效的风险。第7节讨论了波形流水线(Wave pipelining)。时钟的产生和分配将在后续专题进一步研究。

 

时序策略的选择与一个组织正在使用的设计流程密切相关。因此,在开始分配设计方向之前,必须确保设计捕获(design capture)、综合(synthesis)和验证(verification)的所有阶段都能得到满足。这包括单元库(锁存器或触发器电路和模型是否可用?);时序分析仪等工具(能否轻松实现时序闭合?) 和自动测试生成(是否可以轻松插入自测试元素?)。

二、Sequencing Static Circuits

锁存器和flip-flops是两个最常用的时序元件。它们都有三个端口:数据输入(D)、时钟(clk)和数据输出(Q)。当时钟为高电平时,锁存器是通透的,当时钟为低电平时,锁存器是不通透的;换句话说,当时钟为高电平时,D会流向Q,就像锁存器只是一个缓冲器一样,但当时钟为低电平时,即使D发生变化,锁存器也会保持其当前的Q输出。flip-flop是一个边沿触发的设备,在时钟的上升沿将D复制到Q,而在其他时间忽略D。图2-1中说明了这些情况。在第一个时钟上升沿之前,Q的未知状态由一对低电平和高电平的线表示。

 

图片[1]-集成电路设计基础时序电路篇(一)-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-1 锁存器和FF

 

本节将探讨三种最广泛使用的静态电路排序(sequencing static circuits,或者叫静态电路时序方案,但感觉动词更加合理)方法,包括:flip-flops、2-phase transparent latches和脉冲锁存器。理想的排序方法是不引入排序开销,允许元件背靠背排序,中间没有逻辑,赋予设计者平衡每个时钟周期中逻辑量的灵活性,容忍适量的时钟偏移而不降低性能,并且消耗零面积和功耗。我们将比较这些方法,并探讨它们的权衡取舍。我们还将研究每种元件的一些晶体管级电路实现。(理解晶体管级的元件对理解上层设计本身有很大好处,比如DFF)

2.1 Sequencing Methods

图2-2说明了组合逻辑块排序的三种方法。在每种情况下,都显示了时钟波形、排序元件和组合逻辑。横轴对应的是一个令牌到达电路中某一点的时间。例如,在时钟的第一个上升沿,令牌被捕获在第一个flip-flop。它在组合逻辑中传播,并在时钟的第二个上升沿到达第二个flip-flop。垂直虚线表示一个时钟周期和下一个时钟周期之间的边界。时钟周期为Tc。在一个两相系统中,相位之间可以通过tnonoverlap分开。在一个脉冲系统中,脉冲宽度为tpw。

 

图片[2]-集成电路设计基础时序电路篇(一)-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-2 Static sequencing methods

 

基于flip-flop的系统在每个周期边界使用一个flip-flop。令牌在上升沿上从一个周期推进到下一个周期。如果一个令牌过早地到达,它将在flip-flop处等待,直到下一个周期。回顾一下,flip-flop可以被看作是一对使用clk和其补码的背对背锁存器,如图10.3所示。如果我们把锁存器分开,就可以把组合逻辑的整个周期分为两个阶段,有时称为半周期。两个锁存器的时钟通常被称为1和2。它们可以对应于clk和它的补码clk,也可以是不重叠的(tnonoverlap 0)。在任何时候,至少有一个时钟是低电平,相应的锁存器是不透明的,防止一个标记赶上另一个标记。这两个锁存器的行为与运河水闸中的两个水密闸门的方式基本相同[Mead80]。脉冲锁存系统从每个周期中消除一个锁存器,并对剩余的锁存器施加一个简短的脉冲。如果该脉冲比通过组合逻辑的延迟短,我们仍然可以期待一个令牌在每个脉冲中只通过一个时钟周期前进。

 

表2-1 定义了组合逻辑和排序元件的延迟和时序约束。对于上升和下降转换,这些延迟可能有显着差异,可以用 r 或 f 后缀加以区分。为简洁起见,我们将使用整体最大值和最小值。

 

图片[3]-集成电路设计基础时序电路篇(一)-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-3 Flip-flop viewed as back-to-back latch pair

 

Term Name
tpd LogicPropagationDelay
tcd LogicContaminationDelay
tpcq Latch/FlopClock-to-Q PropagationDelay
tccq Latch/FlopClock-to-Q ContaminationDelay
tpdq LatchD-to-Q PropagationDelay
tcdq LatchD-to-Q ContaminationDelay
tsetup Latch/FlopSetupTime
thold Latch/FlopHoldTime

表2-1 Sequencing element timing notation

 

图2-4在时序图中说明了这些延时。在时序图中,横轴表示时间,纵轴表示逻辑电平。一条线表示一个信号在该时间是高电平或低电平。一对线表示一个信号是稳定的,但我们并不关心它的值。纵横交错的线表示信号在当时可能发生变化。一对有交叉阴影的线表示信号可能在一个时间间隔内变化一次或多次。

 

图10.4(a)显示了组合逻辑对输入A从一个任意值变化到另一个任意值的反应。输出Y不能瞬时变化。在污染延迟tcd之后,Y可能开始变化或突变。在传播延迟tpd之后,Y必须稳定到一个最终值。由于通过组合逻辑的多条路径,污染延迟和传播延迟可能非常不同。图10.4(b)显示了一个flip-flop的响应。如果要进行可靠的采样,数据输入必须在flop上升沿附近的一些窗口中保持稳定。具体来说,输入D必须在clk上升沿之前的某个设置时间tsetup内稳定下来,并且在时钟沿之后的保持时间thold内不应该再发生变化。输出在一个时钟到Q的污染延迟tccq之后开始变化,在一个时钟到Q的传播延迟tpcq之后完全稳定下来。图10.4(c)显示了锁存器的响应。现在,输入D必须在确定采样周期结束的下降沿附近建立并保持。锁存器在时钟上升沿变得透明后,输出最初会发生变化tccq,并在tpcq前稳定下来。当锁存器是透明的,输出将在一些D-to-Q延迟tcdq和tpdq之后继续跟踪输入。第10.4.2节讨论了如何在仿真中测量设置和保持时间以及传播延迟。

 

图片[4]-集成电路设计基础时序电路篇(一)-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-4 时序图

 

请登录后发表评论

    没有回复内容