第5章 时序逻辑电路 CHAPTER 5 兴趣阅读——微处理器发明 特德·霍夫(Ted Hoff)1937年生于美国纽约州,从小就对电子科学产生了浓厚的兴趣。1954年,他进入了美国纽约特洛伊的Rensselear综合工学院攻读电子工程专业。在此期间,他发明了电子火车探测器和雷电探测器,并获得了专利。1958年进入了斯坦福大学,后取得了硕士和博士学位。 1968年,霍夫加入Intel (英特尔)公司,开始从事半导体存储芯片的研究工作。1969年6月的一天,日本ETI公司的人员找到霍夫,想请他设计一套极其复杂的计算器芯片。这种设计方案已经超出了当时英特尔公司的业务范围,但霍夫却从方案中得到了启发。于是,“能否以一种微型的通用计算机芯片取代计算器中的整套芯片”的大胆念头渐渐在霍夫脑子中萌生。 霍夫与从仙童公司跳槽来的斯坦·麦卓尔合作,成立了研发小组,研究目标是将一台通用计算机造在一个芯片系统上。霍夫的最大突破是对芯片组织结构的设计,在他的方案中,计算机的“大脑”由四部分组成——中央处理器(CPU)、存储指令的只读存储器(ROM)、存储动态数据的随机存储存取器(RAM)和一个简单的用作输入输出的移位寄存器。就这样,世界上第一台真正可运转的微处理器4004在1971年问世了,该芯片集成了2000个晶体管,处理能力相当于世界上第一台计算机。之后相继推出了8位微处理器8008、8080和IBM采用的芯片8088,乃至后来的80X86、Pentium系列芯片,微处理器市场开始红火起来,霍夫为英特尔和全世界的微处理器领域做出了无可替代的贡献。 我国微处理器技术研究起步较晚但发展很快,龙芯中科技术股份有限公司自主研发的龙芯3C5000L处理器与目前市场中主流CPU之间的差距已经越来越小,甚至可以满足云计算和数据中心性能要求。我国2015年发射的北斗卫星首次使用了“龙芯”微处理器。 图51是霍夫和他发明的微处理器及中国“龙芯”系列微处理器。 图51霍夫和他发明的微处理器及中国“龙芯”系列微处理器 本章首先介绍时序逻辑电路在逻辑功能和电路结构上的特点,然后着重讨论时序逻辑电路的分析和设计方法,最后分别介绍了寄存器和计数器这两类常用的时序逻辑电路。此外,还给出了用Multisim和VHDL分析设计时序逻辑电路的实例。本章学习要求如下: (1) 理解时序逻辑电路在逻辑功能及电路结构上的特点; (2) 熟悉时序逻辑电路逻辑功能的描述方法; (3) 掌握时序逻辑电路的一般分析方法; (4) 掌握同步时序逻辑电路的设计方法,能设计简单的同步时序逻辑电路; (5) 掌握寄存器的结构和工作原理; (6) 掌握集成计数器的结构、工作原理和使用方法; (7) 了解用Multisim和VHDL分析设计时序逻辑电路的方法。 5.1概述 5.1.1时序逻辑电路的基本概念 从对组合逻辑电路的讨论中可知,组合逻辑电路任一时刻的输出仅仅取决于当前时刻的输入,与之前各时刻的输入无关。除此之外,还有一类逻辑电路,它在任一时刻的输出不仅与当前时刻的输入有关,还与电路原来的状态有关,具备这种特点的逻辑电路称为时序逻辑电路,简称时序电路。 1. 时序电路的一般模型和结构特点 因为时序电路的输出与电路原来的状态有关,所以在时序电路中, 图52时序电路的一般结构模型 除了有能反映当前各输入状态的组合电路之外,还应该有能够记住电路原来状态的存储电路,因此时序电路由组合电路和起记忆作用的存储电路两部分组成,其中存储电路一般由各类触发器组成。时序电路的一般结构模型如图52所示。 图52中,X(X1,X2,…,Xi)为组合电路的(外部)输入信号; Y(Y1,Y2,…,Yj)为组合电路的(外部)输出信号; Z(Z1,Z2,…,Zk)为存储电路的输入信号; Q(Q1,Q2,…,Ql)为存储电路的输出信号。这些信号之间的逻辑关系可以用下面三组方程表示 Y=FX,Q(51) Z=GX,Q(52) Qn+1=HX,Q(53) 式(51)称为输出方程; 式(52)称为驱动方程或激励方程; 式(53)称为状态方程。其中: Q为存储电路当前时刻的输出信号,称为存储电路的现态; Qn+1为现态Q和输入信号X共同作用下存储电路建立的新状态,称为存储电路的次态。 2. 时序电路的分类 时序电路的类型很多,有不同的分类方法。 (1) 根据触发器的动作特点不同,时序电路可以分为同步时序电路和异步时序电路两类。 若时序电路中,所有触发器状态的变化是在同一时钟信号作用下同时发生的,就称为同步时序电路。 若时序电路中,没有统一的时钟信号,各触发器状态的变化不是同时发生的,而是有先有后的,这类时序电路称为异步时序电路。 (2) 根据输出信号的特点可以将时序电路分为米里(Mealy)型和摩尔(Moore)型两类。 若时序电路的输出不仅与电路的现态有关,还与该时刻的输入有关,则这类时序电路称为米里型时序电路。 若时序电路的输出仅与电路的现态有关,而与当前时刻的输入无关,或者根本就不存在独立设置的输出,而是以电路的状态作为输出,则这类时序电路称为摩尔型时序电路。 (3) 根据电路实现的逻辑功能不同,时序电路可以分为计数器、寄存器、顺序脉冲发生器、读/写存储器等类型。 5.1.2时序逻辑电路的功能描述方法 由于组合电路和时序电路的结构、性能不同,因此在逻辑功能的描述方法上也有所不同。时序电路逻辑功能的描述方法除逻辑表达式外,还有用来描述时序电路状态转换全过程的状态转换表、状态表、状态转换图和时序图等。 1. 逻辑表达式 用于描述时序电路功能的逻辑表达式为输出方程、驱动方程和状态方程,如式(51)~式(53)所示。 2. 状态转换表 状态转换表,也称为状态转换真值表,是用列表的方式描述时序电路输出、次态与电路输入、现态之间的逻辑关系。具体做法是,把时序电路的输入和现态的各种可能取值,代入状态方程和输出方程进行计算,求出相应的次态和输出,将全部的计算结果列成真值表的形式,就得到了状态转换表,其结构如表51所示。 表51时序电路的状态转换表 X1,X2,…,XiQr …Q1 Q0Qn+1r …Qn+11 Qn+10Y1,Y2,…,Yj 3. 状态表 状态表是由状态转换表转化而来的。对米里型时序电路,其表的第一行为输入X的各种可能取值,表的第一列为现态S,表的中间部分表示在相应输入和现态作用下时序电路的次态Sn+1和当前输出Y,其结构如表52所示。对摩尔型时序电路,因为输出与输入无关,所以可将输出放在最后一列,只和状态建立关系,其结构如表53所示。状态表能更直观、更清晰地反映出时序电路的状态转换关系。 表52米里型时序电路的状态表 SSn+1/Y x=x1x=x2…x=xn 表53摩尔型时序电路的状态表 SSn+1 x=x1x=x2…x=xn 4. 状态转换图 为了能更形象直观地表示出时序电路的状态转换规律,还可以将状态表的内容用图形的方式表示,即状态转换图(简称状态图)。时序电路状态图的画法与触发器状态图的画法一致,即以圆圈表示时序电路的各种状态,以箭头线表示状态转换方向。同时,在箭头线旁注明状态转换前的输入变量X的取值和输出变量Y的值。通常将X的取值标在斜线以上,将Y的值标在斜线以下。如果没有输入或输出信号,则对应的位置上为空,如图53(a)所示。 图53时序电路的状态图 图53(a)是适用于米里型时序电路的状态图。对于摩尔型时序电路,其状态图也可用图53(a)表示,由于电路输出只与现态有关,与输入无关,所以在绘制状态图时,输出可以不标注在箭头线旁,可与状态一起标注在圆圈中,中间用斜线分隔,通常斜线以上标状态值,斜线以下标Y值,如图53(b)所示。 5. 时序图 时序图又称为工作波形图,是描述时序电路在输入信号和时钟脉冲序列作用下,电路状态及输出随时间变化的波形图,其画法与触发器时序图的画法一致。 以上各个功能描述方法都可以用来描述同一个时序电路的逻辑功能,这些描述方法在本质上是相同的,所以它们之间可以相互转换。 微课视频 5.2同步时序电路的分析 所谓同步时序电路的分析,就是指出给定同步时序电路的逻辑功能。其关键是找出同步时序电路在输入信号及时钟信号作用下,电路的状态及输出的变化规律。 5.2.1同步时序电路的分析方法 同步时序电路的分析过程一般可归纳为如下几个步骤: (1) 根据给定的时序电路,列出时序电路的输出方程和各触发器的驱动方程; (2) 将触发器的驱动方程代入各自的特性方程,求出各触发器的次态方程,从而得到时序电路的状态方程; (3) 根据求得的状态方程和输出方程,列出时序电路的状态转换表; (4) 根据状态转换表列出状态表,画出状态图或时序图; (5) 总结分析时序电路的逻辑功能。 以上步骤是分析时序电路的一般步骤,实际分析过程中,可以根据电路的具体情况灵活运用,而没有严格的固定程序。 5.2.2同步时序电路分析举例 以下通过实例来阐述同步时序电路的分析方法。 【例51】时序电路如图54所示,试分析该电路。 图54例51的时序电路 (1) 列出时序电路的输出方程和驱动方程; (2) 求出电路的状态方程; (3) 列出电路的状态转换表; (4) 列出状态表,画出状态图,当输入序列x=1100110时,求出输出序列Y; (5) 指出电路的类型和逻辑功能。 解: 由图54可知,该电路由门电路和JK触发器组成。电路的输入为x、输出为Y。输出Y与输入x和状态Q均有关系,而且两个触发器共用一个时钟脉冲。所以,该电路是米里型同步时序电路。 (1) 列出同步时序电路的输出方程和驱动方程。 Y=x-Q1Q2(这里省略了CP) J1=x,K1=x- J2=xQ1,K2=x- (2) 将驱动方程式代入JK触发器的特性方程,求出时序电路的状态方程。 Qn+11=J1Q1+K1Q1=xQ1+xQ1=x Qn+12=J2Q2+K2Q2=xQ12+xQ2=x(Q1+Q2) (3) 根据状态方程和输出方程列出时序电路的状态转换表,如表54所示。 (4) 根据状态转换表列出状态表,画出状态图。 电路的状态表如表55所示,表中的第一行为该时序电路输入x的两种可能取值,表中第一列S为该时序电路的四种现态,即设S0=00,S1=01,S2=10,S3=11。表的中间部分表示在相应的输入x、现态S及CP脉冲的作用下建立的次态Sn+1和输出Y。 表54例51的状态转换表 xQ2Q1Qn+12Qn+11Y 000000 001000 010000 011001 100010 101110 110110 111110 表55例51的状态表 SSn+1/Y x=0x=1 S0S0/0S1/0 S1S0/0S3/0 S2S0/0S3/0 S3S0/1S3/0 为了更清楚地表示出状态的变化规律,还可以根据状态表画出状态图,如图55所示。 当输入序列x=1100110时,对应的时序图如图56所示。从图中可以看出,输出序列Y=0010001。 图55例51的状态图 图56例51的时序图 【注意】时序图中Y的脉冲与时钟脉冲等宽,原因是Y的表达式中实际上含有CP。 (5) 由状态图55可知,当输入一个1时,电路转到S1状态; 当输入两个1时,电路转到S3状态; 当第三个输入为0时,电路回到S0状态,且输出一个1。结合时序图中的输出序列,故该电路是110序列检测器,当输入序列中出现连续的110时,输出为1,否则输出为0。图中状态S2是多余状态。 【提示】状态表和状态图中字母表示的状态可直接用代码组合表示,此时S写为Q2Q1,Sn+1写为Qn+12Qn+11。 【例52】分析如图57所示电路,写出驱动方程、输出方程和状态方程,给出状态转换表和状态图。 图57例52的时序电路 解: 由图57可知,该电路是由门电路和JK触发器组成的同步摩尔型时序电路。 (1) 列出电路的驱动方程和输出方程。 J1=K1=xQ0 J0=K0=1 Y=Q1Q0 (2) 将驱动方程代入JK触发器的特性方程,得状态方程为 Qn+11=J1Q1+K1Q1=xQ0Q1+xQ0Q1=xQ0Q1Qn+10=J0Q0+K0Q0=Q0 (3) 列出电路的状态转换表,如表56所示。 表56例52的状态转换表 xQ1Q0Qn+11Qn+10Y 000010 001100 010110 011001 100110 101000 110010 111101 图58例52的状态图 (4) 由表56可以画出状态图,如图58所示。 在逻辑电路的分析过程中,首先应根据给定的逻辑电路,分析电路组成,从而判断属于哪种逻辑电路,进而采用正确的分析方法进行分析。在分析过程中也要根据电路的实际情况,合理选择各种逻辑功能的描述方法。 5.3同步时序电路的设计 时序电路的设计,也称为时序电路的综合,就是根据给定的逻辑功能要求,选择适当的逻辑器件,设计出符合设计要求的最简时序电路。 微课视频 5.3.1同步时序电路的设计方法 1. 同步时序电路的设计步骤 同步时序电路设计的一般步骤如图59所示。 图59同步时序电路的 一般设计步骤 (1) 建立原始状态表。通常,所要设计的同步时序电路的逻辑功能是通过文字、图形或波形来描述的,首先必须将它们变换成规范的状态图或状态表。这种直接从文字描述得到的状态图或状态表称为原始状态图或原始状态表。 具体做法是: 首先根据设计要求,确定输入变量、输出变量及电路应包含的状态数,然后定义输入、输出逻辑状态和每个电路状态的含义,最后按照设计要求建立原始状态图,进而建立原始状态表(也可直接建立原始状态表)。 (2) 状态化简。原始状态表(或图)中可能包含多余的状态,消除多余状态的过程称为状态化简。状态化简是建立在等价状态基础上的。如果两个状态在相同的输入条件下有同样的输出,并转换到同一个次态,那么这两个状态就称作等价状态。显然等价状态是重复的,可以合并成一个状态。合并等价状态可以削去多余的状态,以便建立最简状态表(或图)。 (3) 状态编码。给最简状态表中的每一个状态指定一个特定的二进制代码,形成编码状态表的过程称为状态编码,也称为状态分配。编码方案不同,设计出的时序电路结构也就不同。 (4) 选择触发器类型。不同触发器的驱动方式不同,选用不同的触发器设计出的时序电路是不一样的。因此,在设计具体时序电路之前,必须选定触发器的类型。 (5) 确定逻辑方程。根据编码状态表和选定的触发器类型,写出时序电路的状态方程、驱动方程和输出方程。 (6) 画逻辑电路图。根据得到的驱动方程和输出方程,画出逻辑电路图。 (7) 检查电路能否自启动。有些同步时序电路设计中会出现没用的无效状态,当电路上电后可能会进入这些无效状态而无法退出。因此,同步时序电路设计的最后一步必须检查所设计的电路能否进入有效状态,即是否具有自启动的能力。如果不能自启动,则需修改逻辑方程,再根据修改后的逻辑方程画逻辑电路图。 2. 建立原始状态表 从文字描述的设计要求建立原始状态表是同步时序电路设计的第一步,是后面所有设计工作的基础。但迄今为止,还没有一个系统的方法可以遵循,主要依赖设计者的经验和对设计任务的理解。 建立原始状态表,实质上就是要确定电路应具备哪些状态及如何进行状态转换,进而得到设计者要求的输入、输出时序关系。因此在建立原始状态图(或表)时,应关注的是正确性,尽可能不要遗漏任何一个状态,至于状态是否多余,此时不必注意。 常用的建立原始状态表的方法是: (1) 分析给定的设计要求,确定输入变量和输出变量。 (2) 先假定一个初态,从这个初态开始,每加入一个输入,就可以确定其次态(该次态可能是已有现态本身,也可能是已有的另一个状态,或者是一个新的状态)和输出。这个过程一直继续下去,直到每个现态向其次态的转换都被考虑到,且不再构成新的状态为止。这样就建立了所需的原始状态图。 (3) 根据原始状态图建立原始状态表。 【例53】试列出111序列检测器的状态表。 解: 根据设计要求,电路应有一个串行输入端x,用来输入信号序列; 一个串行输出端Y,用来指示对111序列的检测结果。输入和输出之间的关系是输入连续的111时,输出为1,其余情况输出均为0。则有 输入序列x: 0 111 输出序列Y: 0 001 对应状态S: ABCC 设初态为A,若第一个输入为x=0,不属于要检测的序列,电路停留在状态A上; 若x=1,电路从状态A转入状态B。在状态B下,若x=0,电路返回状态A; 若x=1,电路从状态B转入状态C。在状态C下,若x=0,电路返回状态A; 若x=1,电路状态停留在状态C。根据分析结果可画出状态图,如图510所示。 由状态图可作出状态表如表57所示。 图510例53的状态图 表57例53的状态表 S Sn+1/Y x=0x=1 AA/0B/0 BA/0C/0 CA/0C/1 【例54】有一代码检测器,用以检测串行输入的8421码,其输入的顺序是先低位后高位,当出现无效码(即输入1010,1011,1100,1101,1110,1111)时,电路的输出为1。试建立该代码检测器的原始状态图和原始状态表。 解: 根据设计要求,该电路有一个输入x和一个输出Y。由于输入的8421码是先低位后高位,因此,在判断输入码是否为无效码时,也应从低位到高位检测各位的输入值。设状态A为初始状态; 状态B和状态C表示最低一位代码分别取0和1两种情况; 状态D,E,F,G分别表示低两位代码的四种不同取值,即00~11; 状态H,I,J,K,L,M,N,P分别表示低三位代码的八种不同取值,即000~111。 当x输入的第四位代码到来时,电路即可对输入码进行判断,若出现无效码,检测器输出为1,否则为0。当4位代码检测完成后,应能返回原始状态A,以便下一组代码的检测。根据分析结果,可得到原始状态图,如图511所示。 图511例54的原始状态图 由原始状态图可转换出原始状态表,如表58所示。 表58例54的原始状态表 S Sn+1/Y x=0x=1 AB/0C/0 BD/0E/0 CF/0G/0 DH/0I/0 EJ/0K/0 FL/0M/0 GN/0P/0 HA/0A/0 IA/0A/1 JA/0A/1 KA/0A/1 LA/0A/0 MA/0A/1 NA/0A/1 PA/0A/1 在时序电路的设计过程中,原始状态表的建立方法并不是唯一的,只要能够正确建立原始状态表(图),即使比较复杂的方法也没有关系,因为在后续的状态化简中,多余的状态就会被消掉。 3. 状态化简 建立原始状态表时,为避免状态遗漏,可能会引入多余的状态。为了使设计出的电路更简单,就必须将原始状态表中的多余状态消除掉。消除多余状态的过程称为状态化简。 时序电路的状态表有完全定义和不完全定义两种类型。完全定义的状态表中,状态和输出值都是完全确定的。不完全定义状态表中,部分次态和输出值不能完全确定,需要在设计中逐步加以确定。下面以完全定义状态表的化简为例,介绍状态表的化简方法。 完全定义状态表的化简可以通过合并等价状态来实现。在介绍具体的化简方法之前,先介绍几个概念。 (1) 等价状态: 是指能满足以下条件的两个状态Si和Sj,记为{Si,Sj}。 ① 在各种输入取值下,输出完全相同。 ② 在各种输入取值下,次态满足下列条件之一:  两个次态完全相同;  两个次态为其现态本身或交错;  两个次态为状态对循环中的一个状态对;  两个次态的某一后续状态对可以合并。 (2) 等价状态的传递性: 若状态Si和Sj等价,状态Sj和Sm 等价,则状态Si必和Sm等价,记为{Si,Sj}{Sj,Sm}→{Sj,Sm}。 (3) 等价类: 是指彼此等价的状态构成的集合。如,若有{Si,Sj}和{Sj,Sm},则有等价类{Si,Sj,Sm}。 (4) 最大等价类: 不能被其他任何等价类包含的等价类。 状态表化简的根本任务就是从原始状态表中找出最大等价类,并用一个状态代替。确定最大等价类最常用的方法是隐含表法。 隐含表是一种斜边为阶梯形的直角三角形表格。该表格两个直角边上的方格数目相等,等于原始状态数减1。隐含表的纵向由上到下、横向从左到右均按照原始状态表中的状态顺序标注,但纵向“缺头”,横向“少尾”。表中的每个小方格用来表示相应的状态对之间是否存在等价关系。如图512所示就是根据具有A、B、C、D、E这五个状态的原始状态表作出的隐含表。 图512隐含表的画法 利用隐含表化简完全定义状态表的步骤如下: (1) 构造隐含表,并在表中每个方格中标明相应状态对是否等价。 ① 状态对肯定不等价的,在隐含表相应方格中标注“×”; ② 状态对肯定等价的,在隐含表相应方格中标注“√”; ③ 状态对条件等价的,在隐含表相应方格中标注等价条件。 (2) 顺序比较。先将隐含表中所有的状态按照一定顺序对照原始状态表逐一进行比较,并将比较结果按上面的约定标注在隐含表中每一个小方格内。 (3) 关联比较。追查填有等价条件的那些方格,若发现所填的等价条件肯定不能满足,就在该方格右上角加一个“×”。 (4) 确定原始状态表的最大等价类。从隐含表的最右边开始,逐列检查各个小方格,凡是未打“×”的方格,都代表一个等价状态对。彼此等价的几个状态可合并到一个等价类中,最终形成若干个最大等价类。如果有的状态没有包含在任何一个最大等价类中,则该状态自己就是一个最大等价类。 (5) 建立最简状态表。将每个最大等价类用一个状态来代替,将这种替代关系应用于原始状态表,并删除多余行,就得到了最简状态表。 【例55】试化简表59所示的原始状态表。 表59例55的原始状态表 SSn+1/Y x=0x=1 AC/0B/1 BF/0A/1 CD/0G/0 DD/1E/0 EC/0E/1 FD/0G/0 GC/1D/0 解: (1) 作隐含表如图513所示。 (2) 顺序比较。从原始状态表中可看出,状态C和状态F在x=0和x=1 时,它们的输出及次态均相等,因此C和F是等价状态对,在隐含表中C和F交叉的方格中画“√”。此外,A、B等价的条件是C、F等价,A、E等价的条件是B、E等价,B、E等价的条件是A、E和C、F分别等价,D、G等价的条件是C、D和D、E分别等价。将这些等价条件分别填入隐含表中对应的小方格。剩余的状态对均为不等价的状态对,在图中对应的小方格中画“×”。 图513例55的隐含表 (3) 关联比较。状态对A、B等价的条件是C、F等价,而C、F的确是等价状态对,因此A、B等价的条件满足。同理,状态对A、E和状态对B、E等价的条件也满足; 状态对D、G等价的条件是C、D和D、E分别等价,但是从图513可以看出,C、D和D、E均不等价,因此,D、G等价条件不满足,D、G不等价,在相应小方格的右上角加“×”。 (4) 确定原始状态表的最大等价类。隐含表中未打“×”的方格都代表一个等价状态对。根据图513可以得到全部等价对: {A,B}、{A,E}、{B,E}、{C,F}。因此可得到最大等价类{A,B,E}、{C,F}、{D}、{G}。 (5) 建立最简状态表。令a={G},b={C,F},c={A,B,E},d={D},并将这种替代关系应用于表59所示的原始状态表,便可得到其最简状态表,如表510所示。 表510例55的最简状态表 SSn+1/Y 01 ab/1d/0 bd/0a/0 cb/0c/1 dd/1c/0 【提示】在进行同步时序电路设计时,若所建立的原始状态表较简单时,可以直接采用观察法对状态表进行化简。 4. 状态编码 建立最简状态表后,要设计的同步时序电路所需的状态数N就被确定下来,进而电路所需要的触发器个数K也被确定下来,K和N应满足下列关系: 2K-1N的情况 当M>N时,必须将多片N进制计数器组合起来,才能形成M进制计数器。 如果M可分解成两个小于N的因数相乘,即M=N1×N2,则可采用串行进位方式或并行进位方式将一个N1进制计数器和一个N2进制计数器连接起来,构成M进制计数器。 串行进位方式连接是指低位计数器的进位信号连接到高位计数器的时钟端。 并行进位方式连接是指两个计数器的时钟同时接入计数脉冲,低位进位控制高位的计数使能信号。 如果M不能分解成N1和N2的乘积,则要采用整体复位方式或整体置数方式构成M进制计数器。 整体复位(或置数)方式的原理与MN的情况都适用。 【例517】试用两片74LS160实现一百进制计数器。 解: 因为100=10×10,因此用两片十进制计数器74LS160可以连成一百进制计数器。这里分别采用串行进位方式和并行进位方式来实现,如图574(a)、(b)所示。 图574例517逻辑电路图 在图574(a)中,两片74LS160的EP和ET端均接高电平,都工作在计数状态。当低位片计到1001时,输出端C变为高电平,经反相器后使高位片的CP端为低电平。下一个计数脉冲到达后,低位片计成0000,C跳回低电平,反相后有正跳变,使高位片计入1。 在图574(b)中,以低位片的输出C作为高位片EP和ET的输入,当低位片每计到1001时产生进位,使高位片处于计数工作状态,计入1,低位片计成0000。 【例518】分别用74LS160和74LS161构成六十进制计数器。 解: 构成六十进制计数器需用两片集成计数器,可采用整体置数或复位的方法,也可采用分解的方法。这里采用整体置数和整体复位的方法来实现。 首先,将两片74LS160接成10×10=100进制计数器,将两片74LS161接成16×16=256进制计数器,再将它们接成六十进制计数器。 74LS160是十进制的计数器,进位规律是逢十进一,即按着8421码规则计数,所以只要将个位的74LS160(1)接成9(1001),将十位的74LS160(2)接成5(0101),然后采用整体置数法使计数器形成00~59状态循环即可,每当状态到达59时,触发置数输入端有效,下一个时钟脉冲到来时将状态置为00,如图575(a)所示。 图575例518的逻辑电路图 74LS161是模16的4位二进制计数器,进位规律是逢十六进一,即按着自然4位二进制数规则计数,所以需要将十进制数60变为8位二进制数,即(60)10=(00111100)2。只要将个位的74LS161(1)接成1100,将十位的74LS161(2)接成0011,然后采用整体复位法使计数器形成00000000~00111011状态循环即可,每当状态到达00111100(此状态非有效状态)时,触发异步复位输入端有效,瞬间将状态置为“00000000”,如图575(b)所示。 *5.6利用Multisim分析时序逻辑电路 5.6.1两位同步二进制计数器的仿真分析 在Multisim 13.0中构建如图576所示的两位同步二进制加法计数器仿真电路。在元件工具栏的TTL器件库中选出上升沿触发的D触发器74LS74N、“与”门74LS08N、“异或”门74LS86N; 从电源/信号源库中选出电压源。同样也可以使用快捷键Ctrl+W调出选用元件对话框,再找出相应的元件。从虚拟仪器工具栏中选出字信号发生器XWG1、逻辑分析仪XLA1。 图576两位同步二进制计数器的仿真电路 双击字信号发生器的图标打开面板图,在字信号编辑区编辑时钟脉冲信号CP和直接复位信号D,若以十六进制(Hex)形式,则依次输入0、2、3、3、2、2、3、3、2、2、3、3、2、2、3、3、2、2共18个字组数据。单击最后一个字组数据进行循环字组信号终止设置(set final position),完成所有字组信号的设置; 在Frequency区设置输出字信号的频率。 单击字信号发生器面板图Control区中的Brust,电路开始仿真,字信号发生器从第一个字组信号开始逐个字组输出直到终止字组信号。 双击逻辑分析仪XLA1图标打开面板图,显示波形图如图577所示。在面板图的Clock选项区,通过Clocks/Div框设置每个水平刻度显示的时钟脉冲个数,要与字信号发生器输出字信号的频率相互配合,使屏幕上显示一个计数周期的波形。 图577两位同步二进制计数器的仿真波形 图577所示波形中,从上至下依次为计数时钟脉冲CP、异步复位信号D、状态输出Q0和Q1、进位输出Y。 由仿真结果可知,D =0时,各触发器初始状态均复位,计数器从00状态开始计数。D =1期间,在时钟脉冲CP作用下完成从00→01→10→11共四个状态的循环变化,并产生进位输出信号。故该计数器为两位同步二进制加法计数器。 5.6.2用74LS161N构成六十进制计数器 1. 并联进位方式 在Multisim 13.0中构建并联进位方式的六十进制计数器仿真电路,如图578所示。在元件工具栏的TTL器件库中选出集成计数器74LS161N、“与非”门74LS00N、反相器74LS04N; 从电源/信号源库中选出脉冲信号源、电压源及接地端,在指示元件库中选出共阴极LED数码显示器,并在Component栏中选择颜色。也可以使用快捷键Ctrl+W调出选用元件对话框,再找出相应的元件。 图578中反相器U6A的作用是将74LS161N的时钟脉冲触发方式修正为和实际器件一致的上升沿触发。U4集成计数器74LS161N采用置数法构成十进制计数器,U3集成计数器74LS161N采用复位法构成六进制计数器,它们共用一个时钟脉冲信号,用U5A及U6B形成的进位信号控制高位片U3的计数控制端ENP及ENT进行并联进位。 图578并联进位方式的六十进制计数器仿真电路 单击仿真开关,计数器开始计数,在计数时钟脉冲作用下从00~59进行六十个状态的循环变化,实现并行进位方式的六十进制加法计数。 2. 串联进位方式 在Multisim 13.0中构建串联进位方式的六十进制计数器仿真电路,如图579所示。图中U4集成计数器74LS161N采用置数法构成十进制计数器,U3集成计数器74LS161N也采用置数法构成六进制计数器,用U5A形成的进位信号作为高位片U3的计数脉冲信号进行串联进位。 图579串联进位方式的六十进制计数器仿真电路 单击仿真开关,计数器开始计数,在计数时钟脉冲作用下从00~59进行六十个状态的循环变化,实现串联进位方式的六十进制加法计数。 *5.7利用VHDL设计时序逻辑电路 本节用VHDL对十六进制计数器和移位寄存器进行设计和仿真。 1. 异步清零十六进制计数器的设计及仿真 设异步清零端为clr,时钟输入端为clk,输出端为count。源代码为 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter16 is port(clk,clr: in std_logic; count: out std_logic_vector(3 downto 0)); end counter16; architecture beha of counter16 is signal cnt: std_logic_vector(3 downto 0); begin process(clk,clr) begin if clr='0'then cnt<="0000"; elsif clk='1' and clk'event then cnt<=cnt+'1'; end if; count<=cnt; end process; end beha; 对源代码进行仿真,仿真结果如图580所示。 图580异步清零十六进制计数器的仿真图 2. 8位移位寄存器的设计及仿真 设d为串行输入信号,clk为时钟脉冲信号,b为8位输出向量。源代码为 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity shift8 is port(d,clk:in std_logic; b: out std_logic_vector(7 downto 0)); end entity shift8; architecture rtl of shift8 is signal b_s : std_logic_vector(7 downto 0); begin process (clk) begin if rising_edge(clk) then b_s <= b_s(6 downto 0) & d; --左移 --或者 b_s <= d & b_s(7 downto 1); --右移 end if; b <= b_s; end process; end rtl; 对源代码进行仿真,仿真结果如图581所示。 图5818位移位寄存器的仿真图 本章小结 本章介绍了时序逻辑电路的相关知识,主要讲述了如下内容。 (1) 时序电路的特点是当前时刻的输出不仅与当前时刻的输入有关,还与电路的原状态有关,因此时序电路是有记忆功能的逻辑电路,由组合电路和存储电路两部分组成,其中存储电路一般由若干个触发器构成。描述时序电路的逻辑功能有多种方法,包括逻辑表达式、状态转换表、状态表、状态转换图和时序图等。 (2) 同步时序电路分析的关键是要求出电路的输出方程、驱动方程和状态方程,进而作出状态转换表、状态转换图或时序图,依据这些描述方法来分析电路的逻辑功能。 (3) 同步时序电路设计的关键是能正确建立原始状态表(图),并能通过化简获得最简状态表,再依据最简状态表进行状态编码,然后合理选择触发器类型,并根据编码后的状态转换表求出电路的驱动方程和输出方程,最终画出逻辑电路图,并检查电路是否能够自启动,如无法自启动,则需要修正设计。 (4) 异步时序电路的分析与设计步骤,与同步时序电路的分析与设计步骤基本相同,但是因为异步时序电路没有统一的时钟信号来控制所有存储电路的状态变化,因此,分析时应特别注意状态变化与时钟的对应关系。 (5) 寄存器分为数码寄存器和移位寄存器两种,移位寄存器又分为单向移位寄存器和双向移位寄存器。集成移位寄存器使用方便、功能全、输入和输出方式灵活。用移位寄存器不仅可以寄存数码,还可以实现数据的串行并行转换、数据运算等功能。 (6) 计数器是数字系统最常用的时序逻辑器件。计数器的基本功能是对输入时钟脉冲进行累加或累减计数,此外还可用于分频、定时、产生节拍脉冲、数字运算等。常用的集成计数器有二进制计数器、十进制计数器等,利用这些集成计数器可以实现任意进制的计数器。 习题 1. 填空题 (1) 时序电路由电路和电路两部分组成。描述时序逻辑电路的三组方程分别是、、。 (2) 时序电路按照其触发器是否有统一的时钟控制分为时序电路和时序电路。 (3) 寄存器按照寄存功能的不同可分为寄存器和寄存器。 (4) 某寄存器由D触发器构成,有四位代码要存储,则此寄存器必须有个触发器。 (5) 按计数进制的不同,可将计数器分为、和N进制计数器等类型。 (6) 按计数过程中数值的增减来分,可将计数器分为、和三种。 2. 选择题 (1) 关于时序逻辑电路的特点,下列叙述正确的是。 A. 电路任一时刻的输出只与当时输入信号有关 B. 电路任一时刻的输出只与电路原来状态有关 C. 电路任一时刻的输出与输入信号和电路原来状态均有关 D. 电路任一时刻的输出与输入信号和电路原来状态均无关 (2) 摩尔型时序逻辑电路的输出。 A. 仅与输入有关B. 仅与电路现态有关 C. 与输入和电路现态均有关D. 与输入和电路现态均无关 (3) N个触发器可以构成寄存位二进制数码的寄存器。 A. N-1 B. N C. N+1 D. 2N (4) N个触发器可以构成最大计数长度(进制数)为的计数器。 A. N B. 2N C. N2 D. 2N (5) 4位二进制加法计数器正常工作时,从0000状态开始计数,经过四十三个输入计数脉冲后,计数器的状态是。 A. 0011 B. 1011 C. 1010 D. 1101 (6) 可以用来实现并/串转换和串/并转换的器件是。 A. 移位寄存器 B. 全加器 C. 译码器 D. 计数器 (7) 由两个模数分别为M1和M2的计数器串联而构成的计数器,其总模数为。 A. M1+M2 B. M1×M2 C. M1-M2 D. M1÷M2 (8) 下列电路不属于时序逻辑电路的是。 A. 数码寄存器 B. 编码器 C. 触发器 D. 可逆计数器 3. 分析如图582所示电路,写出它的驱动方程、状态方程和输出方程,列出状态表并画出状态图。 4. 分析如图583所示电路,写出它的驱动方程、状态方程和输出方程,列出状态表并画出状态图。 图582习题3图 图583习题4图 5. 试分析如图584所示时序电路逻辑功能,要求列出电路的驱动方程、输出方程、状态方程,画出状态图。 图584习题5图 6. 试分析如图585所示时序电路逻辑功能,要求列出电路的驱动方程、输出方程、状态方程,画出状态图。 图585习题6图 7. 试分析如图586所示同步时序电路逻辑功能,要求列出电路的驱动方程、输出方程、状态方程,画出状态图。 8. 试分析如图587所示同步时序电路逻辑功能,要求列出电路的驱动方程、输出方程、状态方程,画出状态图。 图586习题7图 图587习题8图 9. 图588所示电路是一个由计数器和4选1数据选择器构成的序列信号发生器,试分析计数器的状态转换关系和模数,以及在计数器控制下数据选择器的输出序列(设计数器初始状态为000)。 图588习题9图 10. 试用维持阻塞式D触发器和“与非”门设计一个同步时序电路,其状态图如图589所示。 11. 用“与非”门和JK触发器设计一个同步时序电路,以检测输入的信号序列是否为连续的101。 12. 试用JK触发器和门电路设计一个同步六进制加法计数器。 13. 试用D触发器和门电路设计一个同步可控计数器,当M=0时,其状态迁移为 当M=1时,其状态迁移为 14. 试分析如图590所示计数器,在M=0和M=1时各为几进制计数器? 图589习题10图 图590习题14图 15. 试分析如图591所示计数电路的分频比(即Y与CP的频率之比)。 图591习题15图 16. 试分析如图592所示时序电路的功能。 图592习题16图 17. 如图593所示电路是由74LS161和74LS151构成的序列信号发生器,求输出序列信号。 图593习题17图 18. 图594所示电路是一个可变计数器,试确定MN=01和MN=10时,电路分别构成几进制计数器? 19. 试分析图595所示电路为几进制计数器。 图594习题18图 图595习题19图 20. 分别用复位法和置数法将74LS161、74LS163接成十二进制计数器。 21. 分别用复位法和置数法将74LS160接成六进制计数器。