1.4 时序逻辑电路基础
1.4.1 时序逻辑电路的结构
数字电路通常分为组合逻辑电路和时序逻辑电路两大类。组合逻辑电路的特点是输入的变化直接反映了输出的变化,其输出的状态仅取决于输入的当前状态,与输入、输出的原始状态无关。时序逻辑电路的输出不仅与当前的输入有关,而且与其输出状态的原始状态有关,其相当于在组合逻辑电路的输入端加上了一个反馈输入,在其电路中有一个存储电路,可以将输出的状态保持住,我们可以用图1-7来描述时序逻辑电路的构成。
图1-7 时序逻辑电路的结构框图
从图1-7中可以看出,与组合逻辑电路相比,时序逻辑电路增加了关键部件——具有存储功能的电路,即存储电路。因此,了解存储电路的工作原理是掌握时序逻辑电路的基础。正如数字电路的基本构成单元是模拟器件一样,存储电路的基本构成单元仍然是前面学习过的门电路。在后续讨论FPGA电路设计时,为了保证电路工作的稳定和可靠,绝大部分电路都会被设计成同步时序逻辑电路。
基本存储电路分为电平触发的锁存器电路和边沿触发的触发器电路两种。FPGA设计一般采用边沿触发的触发器电路,而了解触发器还需要从了解锁存器开始。
1.4.2 D触发器的工作波形
经过数字电路技术课程的学习,我们知道,锁存器是由电平控制的,触发器是由时钟的边沿(上升沿或下降沿)控制的。在学习FPGA电路设计时需要注意,设计FPGA时序逻辑电路时要避免形成锁存器电路,这是因为锁存器电路的稳定性不够好,不能满足同步时序逻辑电路的时序要求。电平触发的锁存器电路仍然可能产生竞争冒险,控制电平的抖动会增强电路的不稳定性。为增强电路的稳定性,我们希望电路状态的翻转仅发生在某些固定时刻(边沿),而不是某个时段(电平)。
正如三极管构成了反相器电路,门电路可以组成锁存器,我们所需要的触发器是由锁存器构成的。图1-8(a)是由两个数据锁存器构成的下降沿触发器逻辑电路原理图。触发器分为JK触发器和D触发器等。对于FPGA设计来讲,只需要了解D触发器的工作波形即可。
根据数据锁存器的工作原理,我们很容易绘制出触发器输入输出波形,如图1-8(b)所示。由于图1-8中的使能信号En通过一级反相器送至第二级数据锁存器,因此第二级数据锁存器的使能信号En仅在低电平时有效。从图1-8(b)所示的波形可以看出,输出信号Qout的状态仅在En的下降沿时刻发生变化,且其在En下降沿时刻的值与输入信号D在En下降沿前一时刻的值相同。这样,两个由电平触发的数据锁存器构成了一个由边沿触发的触发器。
图1-8 下降沿触发器逻辑电路原理图及输入输出波形图
如果将数据锁存器的使能信号En设计成低电平有效(锁存器逻辑符号中,En前有一个小圆圈),两个这样的锁存器就可以构成在En上升沿触发的触发器,其逻辑电路原理图及输入输出波形图如图1-9所示。
图1-9 上升沿触发器逻辑电路原理图及输入输出波形图
一般来讲,在触发器电路中,使用一个时钟信号来控制触发器的状态翻转。这样,整个电路的状态都仅在时钟信号的统一控制下(上升沿或下降沿)发生变化。由于发生状态变化只在某一时刻,而不是某段时间,所以电路的稳定性和可靠性得以大大提高。对于图1-8、图1-9所示的电路来讲,输出状态在使能信号En的控制下随输入信号D的状态发生改变,通常将这种电路称为D触发器,使能信号通常用时钟信号clk代替。图1-10给出了上升沿触发器的工作波形图,更好地展示了D触发器的工作过程。
图1-10 在时钟信号控制下的上升沿触发器的工作波形图
D触发器的特性方程与数据锁存器相同,只不过数据变化只发生在时钟的边沿,而不是控制信号的某一电平状态。
1.4.3 计数器与寄存器电路
一些稍微复杂的电路都会采用时序逻辑电路设计。时序逻辑电路的功能器件种类繁多,我们只介绍计数器和寄存器,以加深读者对采用基本触发器构成更为复杂电路的理解。
1.计数器
计数器是数字系统中用得十分普遍的基本逻辑器件。它不仅能够记录输入时钟脉冲的个数,还可以实现分频、定时、产生节拍脉冲和脉冲序列等。计数器的种类很多,按时钟脉冲输入方式的不同,可分为同步计数器和异步计数器;按进位制的不同,可分为二进制计数器和非二进制计数器;按计数过程中数字增减趋势的不同,可分为加计数器、减计数器和可逆计数器。
数字电路技术课程中讨论的计数器是采用多个触发器级联而成的,需要详细分析每个触发器在计数脉冲控制下的工作状态。对于FPGA设计来讲,采用Verilog HDL编写的代码所形成的计数器结构已完全不同,实际上由一个加法器和一个触发器组合而成。因此,我们仅需要了解计数功能及输入输出波形即可。表1-4是二进制加计数器的状态表。
图1-11是二进制同步加计数器的工作波形图。读者可自行对照表1-4分析信号的波形。
表1-4 二进制加计数器的状态表
图1-11 二进制同步加计数器的工作波形图
2.寄存器与移位寄存器
寄存器是计算机和其他数字电路系统中用来存储代码或逻辑数据的逻辑部件。它的主要组成部分是触发器。一个触发器能存储1位二进制代码,存储n位二进制代码的寄存器就要由n个触发器组成。
一个4位的集成寄存器74LS175的逻辑电路原理图如图1-12所示,其中,R D是异步清零控制端,CP为时钟信号端。在往寄存器中寄存数据或代码之前,必须先将寄存器清零,否则有可能出错。D1~D4是数据输入端,在clk脉冲上升沿作用下,D1~D4端的数据被并行地存入寄存器。输出数据可以并行从Q1~Q 4端引出,也可以并行从Q1'~Q'4端引出反码输出。
寄存器74LS175只有寄存数据或代码的功能。有时为了处理数据,需要将寄存器中的各位数据在移位控制信号作用下,依次向高位或低位移动1位。具有移位功能的寄存器称为移位寄存器。
图1-12 集成寄存器74LS175逻辑电路原理图
把若干触发器串接起来,就可以构成一个移位寄存器。由4个边沿D触发器构成的4位移位寄存器逻辑电路原理图如图1-13所示。数据从串行输入端D1输入,左边触发器的输出作为右邻触发器的数据输入。
图1-13 4位移位寄存器逻辑电路原理图
假设移位寄存器的初始状态为0000,现将数码D3D2D1D(01101)从高位(D3)至低位依次送入D端,经过第一个时钟脉冲后,Q0=D3。由于跟随数码D3后的数码是D2,则经过第二个时钟脉冲后,触发器FF0的状态移入触发器FF1,而FF0变为新的状态,即Q1=D3,Q0=D2。依此类推,可得4位右向移位寄存器的状态。
输入数码依次由低位触发器移到高位触发器,做右向移动,经过4个时钟脉冲后,4个触发器的输出状态Q3Q2Q1Q0与输入数码D3D2D1D0相对应。为了加深理解,图1-14画出了数码D3D2D1D(01101)在寄存器中移位的波形。经过4个时钟脉冲后,1101出现在寄存器的输出端Q3、Q2、Q1、Q0。这样,就可将从D端串行输入的数码转换为Q3、Q2、Q1、Q0端的并行输出。
图1-14 4位移位寄存器时序图
图1-14中还画出了第5到第8个时钟脉冲作用下,输入数码在寄存器中移位的波形,由图可见,在第8个时钟脉冲作用后,数码从Q3端全部移出寄存器。这说明存入该寄存器中的数码也可以从Dout端串行输出,只不过相对输入信号延时了4个时钟周期。