范文一:时序图
第6章 时序逻辑电路
内容提要
时序逻辑电路的特性是具有记忆功能,即电路在某一时刻的输出不仅仅取决于这一时刻当前的输入,而且还与电路历史状态有关。时序逻辑电路在结构上由组合电路 和存储电路两部分组成,而且存储电路至少有一个输出作为组合逻辑电路的输入,组合电路的输出至少有一个作为存储电路的输入。
本章主要介绍时序逻辑电路的组成原理、时序逻辑电路的分析和设计方法及常用时序逻辑功能器件等。
时序逻辑电路的分析就是根据给定的时序逻辑电路的结构,找出该时序逻辑电路在输入信号及时钟作用下,存储电路状态的变化规律以及电路的输出值,从而了解该时序逻辑电路所完成的逻辑功能。 描述时序逻辑电路的逻辑功能一般采用存储电路的状态转移方程和电路输出函数表达式;或者采用状态转移表、状态转移图;或者用时序图(工作波形)来描述。
本章重点分析了移位寄存器、同步计数器和异步计数器,介绍了VHDL 描述时序逻辑电路的方法。
时序逻辑电路的设计就是根据逻辑命题的要求,设计出实现该命题功能要求的时序电路,并力求最简。
本章重点介绍了采用小规模器件设计同步计数器、异步计数器的方法,介绍了采用中规模功能器件设计任意模值计数器的方法以及序列信号发生器的方法。并介绍了同步时序逻辑电路设计的一般步骤。 教学基本要求
(1)掌握时序逻辑电路的基本分析方法。
(2)掌握同步时序逻辑电路(同步计数器)的设计方法。
(3)掌握常用时序功能部件(集成计数器、移位寄存器)的逻辑功能及应用。
(4)理解异步计数器的设计方法。
(5)理解VHDL 描述方法。
(6)了解同步时序逻辑电路设计的一般步骤。
重点与难点
本章重点:
(1)时序逻辑电路的分析,正确画出时序图(工作波形)。
(2)同步计数器的设计。
本章难点:
(1)异步时序逻辑电路的分析与设计。
(2)同步时序逻辑电路设计的一般步骤(原始状态流图建立、状态合并、状态编码等)。
主要教学内容
6. 1 时序逻辑电路的分析
6. 2 常用时序逻辑功能器件
6. 2. 1 常用集成计数器
6. 2. 2 常用集成寄存器和移位寄存器
6. 3 时序逻辑电路设计
6. 3. 1 同步时序逻辑电路设计的一般步骤
6. 3. 2 同步计数器的设计
6. 3. 3 异步计数器的设计
6. 3. 4 序列信号发生器
6. 4 采用中规模时序功能器设计时序逻辑电路
6. 4. 1 采用中规模计数器实现任意模值计数(分频)器
6. 4. 2 采用中规模集成移位寄存器
6. 5 VHDL 描述时序逻辑电路
6.1 时序逻辑电路的分析
分析由小规模逻辑器件构成的时序逻辑电路一般步骤为:
(1)根据给定的时序电路图,写出下列各逻辑表达式:
① 各触发器的时钟信号CP 的逻辑表达式。
② 各触发器的驱动方程,也就是各触发器的输入信号(激励)的逻辑表达式。
③ 时序电路的输出方程。
(2)将各触发器的驱动方程代入相应的触发器特征方程,得到该时序逻辑电路的状态转移方程。
(3)根据状态转移方程、时钟函数及输出方程,列出该时序电路的状态转移表,画出状态转移图或时序图(工作波形)。
(4)描述给定时序逻辑电路的逻辑功能。
例6–1 图6–1–1为一个同步时序电路,X 是输入控制信号,画Q 1、Q 2和Z 在X 信号控制下的工作波形(设Q 1、Q 2初态均为0)。
图6–1–1 例6–1电路
解 由电路可列出各方程。
(1)时钟表达式为CP 1=CP ↓,CP 2=CP ↓。由于是同一时钟,所以为同步时序逻辑电路。
(2)各触发器的驱动方程为
(3)将驱动方程代入J–K触发器的特征方程,则各触发器的状态转移方程为
(4)写出输出函数表达式为
(5)根据状态转移方程和输出函数表达式可画出工作波形,如图6–1–2所示。
图6–1–2 例6–1工作波形
画工作波形时必须注意:只有时钟触发沿到达时,触发器状态才能发生变化。该题画工作波形时,有一定技巧,由于Q 1n +1是X ⊕Q 1n ,所以当X =0且CP 下降沿到达 时,Q 1n +1=Q 1n ;当X =1且CP 下降沿到达时,Q 1n +1=Q 1n 。对于Q 2波形,若Q 2原状态为0,只有在X =0、Q 1=1时,时钟CP 下降沿到达使Q 2由0变化为1,以后Q 2就一直为1。根据Z =XQ 1n Q 2n ,可以很容易画出Z 的波形。
例6–2 画出图6–1–3所示计数器的状态转移图,并说明其逻辑功能。
图6–1–3 例6–2电路图
解 由电路可列出各方程。
(1)时钟表达式为CP 1=CP 2=CP 3=CP ↓,为同步时序逻辑电路。
(2)各触发器的驱动方程为
(3)各触发器的状态转移方程为
(4)列出状态转移表,如表6–1–1(a )所示。
.
表6–1–1 例6–2状态转移表
除去5个有效状态外,还有3个偏离状态,要检验3个偏离状态的转移情况,如表6–1–1(b )所示,才能得到完整的状态转移图。
(5)状态转移图,如图6–1–4所示。
图6–1–4 例6–2状态转移图
(6)该电路的逻辑功能是模5同步计数器。
例6–3 画出图6–1–5所示时序逻辑电路Q 1、Q 2的工作波形。
图6–1–5 例6–3电路
解 根据电路列出各方程。
(1)时钟表达式为CP 1=CP ↓,CP 2=[Q 1+CP ·Q 2]↓。由于触发器1和触发器2的时钟不同,所以为异步时序逻辑电路。
(2)各级触发器驱动方程为
(3)各级触发器状态转移方程为
(4)画工作波形,设Q 1、Q 2初态为0,如图6–1–6所示。
图6–1–6 例6–3工作波形
为了能正确画出波形,对异步时序最好同时画出或标出各触发器时钟的波形。对于Q 2,只有从CP 2函数产生下降沿时,Q 2才有可能改变状态。
由上面3个例题可以看出:
(1)时序逻辑电路有两大类,一是同步时序逻辑电路,其特点是各存储电路(触发器)的时钟是同一时钟,因此在时钟作用下,各存储电路同时发生状态转移。二 是异步时序逻辑电路,其特点是存储电路(触发器)的时钟不同,各存储电路发生状态转移只有在该存储电路的时钟信号作用下才会发生。
(2)分析时序逻辑电路除要正确写出状态转移方程外,特别要注意时钟信号的作用。触发器只有在时钟信号作用下才会发生状态的变化。
(3)完整的状态转移图除去有效状态外,还必须包括偏离状态。如果偏离状态能在时钟作用下自动进入有效状态,则该电路具有自启动功能,如果偏离状态不能自 动进入有效状态,则该电路就出现锁住的现象,要使其正常工作必须重新启动(置位或复位),这一点在下面时序逻辑电路设计中详细叙述。
6.2 常用时序逻辑功能器件
6.2.1 常用集成计数器
常用时序逻辑功能器件主要有计数器、寄存器和移位寄存器。对于常用时序逻辑功能器件只要求了解功能以及各使能端的使用。
常用集成计数器分为二进制计数器(含同步、异步、加减和可逆)和非二进制计数器(含同步、异步、加减和可逆),下面介绍几种典型的集成计数器。
1. 集成计数器54/74161
集成计数器54/74161为4位二进制同步加法计数器,其功能表如表6–2–1所示。
表6–2–1 CT54/74161功能表
从表6–2–1中可见:
(1)异步清零。即当CR =0时,不管其他输入的状态如何,计数器输出将被直接置零,称为异步置零,清零信号CR 低电平有效。
(2)同步并行预置。即当CR =1、LD =0,且有时钟脉冲CP 的上升沿到达时,预置输入d 0、d 1、d 2、d 3将同时分别置入到Q 0、Q 1、Q 2、Q 3。由于在时钟作用下完成置入,所以称同步预置。
(3)保持。在CR =LD =1时,当CT T ·CT P =0,计数器保持原状态不变。但当CT T =0、CT P =1时,输出CO =0;而当CT T =1、CT P =0时,输出CO 也保持不变。
(4)计数。当CR =LD =CT T =CT P =1时,计数器在CP 上升沿作用下 ,执行4位二进制同步加法计数。
2. 集成计数器CT54/74193
集成计数器CT54/74193为双时钟4位二进制同步可逆计数器,其功能表如表6–2–2所示。
表6–2–2 CT54/74193功能表
从表6–2–2中可见:
(1)异步清零。当CR =1时,输出直接清零,清零信号CR 高电平有效。
(2)异步预置。当CR =0、LD =0,预置输入d 0~d 3直接置入到Q 0~Q 3,预置信号LD 低电平有效。
(3)加法计数。当CR =0、LD =1、CP D =1时,计数脉冲由CP U 加入,完成同步4位二进制加法计数。
(4)减法计数,当CR =0、LD =1、CP U =1时,计数脉冲由CP D 加入,完成同步4位二进制减法计数。
3. 集成计数器CT54/74290
CT54/74290为异步十进制计数器,它由4个1位二进制计数器和1个五进制计数器组成,如果计数器脉冲由CP 0端输入,Q 0端输出,即为二进制计数器。如果计数脉冲由CP 1端输入,Q 3~Q 1端输出,即为五进制计数器。如果将Q 0与CP 1相连,计数脉冲由CP 0移入,Q 3~Q 0输出,即为8421码十进制计数器,因此又称二–五–十异步计数器。其功能表如表6–2–3所示。
表6–2–3 CT54/74290功能表
由表6–2–3可以看出,当复位输入 R 0A =R 0B =1,且置位输入S 9A ·S 9B =0时,Q 3~Q 0被直接置0;只要置位输入S 9A =S 9B =1时,Q 3Q 2Q 1Q 0=1001,即直接被置9;只有同时满足R 0A ·R 0B =0、S 9A ·S 9B =0时,才能在计数CP 下降沿作用下实现二–五–十计数。
6.2.2 常用集成寄存器和移位寄存器
1. 集成寄存器
寄存器是用来存储代码或数据的逻辑部件,1个触发器可存储1位二
进制代码。CT54/74175是一个4位集成寄存器,其功能表如表6–2–4所示。
表6–2–4 CT54/74175功能表
2. 集成移位寄存器
移位寄存器是寄存器中的各位数据(代码)在移位控制信号作用下,依次向高位或依次向低位移动1位,也就是具有移动功能的寄存器。移位寄存器内部的状态转移符合移位寄存规律。即Q i n +1=Q i –1n ,某一级触发器的下一个状态是邻级触发器的现状,只有第1级按输入信号变化。
CT54/74195是4位并入、并出移位寄存器,具有J –K 串行输入端,SH /LD 移位/置数端,CR 直接清零端,其功能见表6–2–5。
表6–2–5 CT54/74195功能表
有表6–2–5可见,CR =0时,直接异步置零;当CR =1、SH /LD =0时,同步置位;当CR =1、SH /LD =1时,在CP 上升沿作用下,串列输入J–K至Q 0,其余Q 0移入Q 1,Q 1移入Q 2,Q 2移入Q 3 ,实现右移功能。 CT54/74194 是一个4位双向移位寄存器,它具有左移、右移、并行输入、保持及异步清零等五种功能,其功能表如表6–2–6所示。
表6–2–6 CT54/74194功能表
6.3 时序逻辑电路设计
6.3.1 同步时序逻辑电路设计的一般步骤
第一步:根据设计要求,建立原始状态转移图和原始状态转移表。 首先分析设计要求的输入变量、输出变量,以及该电路应包含记忆状态,并用A 、B 、C 等表示。进一步观察在每一种可能输入组合作用下, 各个状态的转移情况及相应的输出,然后求得设计要求的状态转移图。
在建立原始状态图时,重要的是正确的描述题意,不必考虑是否简单。
第二步:状态化简。
状态化简是建立在状态等价的基础上。所谓两个状态等价是指这两个状态在相同输入条件下状态输出相同,状态转移效果相同,例为A 和B 两个状态A →B ,C →D 。若B 和D 是等价的,则A 和C 状态转移效果相同。
两个等价的状态可以合并,通过等价状态合并从而消去多余的状态。 第三步:状态编码,建立状态转移表。
状态编码即是对每个状态指定一个二进制代码。状态编码方案不同,实现电路的结构也不同,选取编码方案要有利于触发器驱动方程和输出方程的简化。
第四步:根据状态转移方程选择触发器。求触发器驱动方程和输出方程。
第五步:画逻辑电路并检查是否具有自启动特性。
例6–4 设计一个时序网络,只有连续3个或3个以上时钟作用期间,该网络的2个输入x 1和x 2都一致时输出才为1,否则输出为0。画出该时序网络的逻辑图。
解 第一步:建立原始状态图和原始状态表。
该电路网络有3个输入端x 1、x 2和CP ,且x 1、x 2和CP 同步,有1个输出Z 。原始状态图如图6–3–1所示,原始状态表如表6–3–1所示。
表6–3–1 例6–4原始状态表
图6–3–1 例6–4原始状态图
第二步:状态化简。
由原始状态表6–3–1可见,C 和D 在x 1=x 2和x 1≠x 2输入条件下,有相同的输出,且状态转移情况也完全相同,C 和D 为等价状态,可以合并为一个状态C ,消去状态D 。
第三步:状态编码,建立状态转移表。
该电路有3个状态,可用2位二进制码组合,令A =00、B =01、C =11,则状态转移表如表6–3–2所示。
表6–3–2 例6–4状态转移表
第四步:根据状态转移方程选择触发器。
求触发器的驱动方程和输出方程。由表6–3–2可列出Q 2n +1、Q 1n +1和输出Z 的卡诺图如图6–3–2所示。化简得
图6–3–2 例6–4卡诺图
选择D 触发器,则
第五步:检验是否具有自启动特性,画出逻辑图。
检验自启动是检验偏离状态Q 1Q 2=10时,在x 1x 2作用下的转移状况,Q 1Q 2=10时:当x 1≠x 2时,状态转移到00,输出0;当x 1=x 2时,状态转移到01,输出为1。
由于在所有输入条件下偏离状态均能转移到有效状态,电路具有自启动特性。该时序网络的逻辑图如图6–3–3(a )所示,状态转移图如图6–3–3(b )所示。
(a )
(b )
图6–3–3 例6–4 逻辑电路图与状态转移图
6.3.2 同步计数器的设计
同步计数器的设计步骤同6.3.1同步时序逻辑电路的设计,但由于一般计数器的模值即是状态数,因此无需状态化简。关于状态编码,通常选用二进制代码、循环代码或移存型代码等。所以同步计数器的设计主要是完成一般步骤中第三、四、五步。
例6–5 设计模6同步计数器。
解 由于模6计数器必须记忆6个状态,S 0、S 1、S 2、S 3、S 4、S 5用3位二进制代码表示。在教材中,选取的是S 0=000、S 1=001、S 2=011、S 3=111、S 4=110、S 5=100,按移位规律的编码,同时该码组又符合循环码规律(即相邻码组只有一位不同),本例采用二进制码规律来设计,以示比较。
令S 0=000、S 1=001、S 2=010、S 3=011、S 4=100、S 5=101,由此可列出状态转移表如表6–3–3所示。
表6–3–3 例6–5状态转移表
画出次态卡诺图和输出卡诺图如图6–3–4所示。化简得
图6–3–4 例6–5卡诺图
检验偏离状态。将偏离状态110、111代入状态转移方程得到110→ 111→ 100,能自动纳入有效状态,具有自启动特性。
如果采用D 触发器,显然电路比教材中采用移存码编码结构复杂。如果采用J–K触发器,则可将各级触发器的状态转移方程变换成JK 触发器特征方程Q n +1=JQ n +KQ n 的形式。从而求得J 、K 激励方程为
采用自然二进制编码的模6同步计数器电路如图6–3–5(a )所示,状态转移图如图6–3–5(b )所示。
(a )
(b )
图6–3–5 例6–5逻辑电路图的状态转移图
例6–6 设计一个能实现如图6–3–6时序图要求的同步时序逻辑电路。
图6–3–6 例6–6时序图
解 (1)由时序图可列出状态转移表如表6–3–4所示。
表6–3–4 例6–6状态转移表
列状态转移表时,注意状态转移表中次态的状态N (t ) 就是下一次转移的状态S (t ) 。列状态转移表直至完成状态转移循环,也就是转移至开始的初态结束。
(2)通过图6–3–7所示卡诺图,求得状态转移方程为
图6–3–7 例6–6卡诺图
分析该题的状态转移表,它符合移位寄存器编码规律,因此该题也可以只设计Q 1n +1就可以了。
(3)采用D 触发器的激励信号为
(4)检查是否具有自启动。
偏离状态有000、010和101,其转移为:000→ 001;010→ 101 → 011,都能进入有效状态,具有自启动特性。
(5)逻辑电路图如图6–3–8所示。
图6–3–8 例6–6 逻辑图
6.3.3 异步计数器的设计
异步计数器的设计与同步计数器的不同点是,在开始要由状态转移表选择各级触发器的时钟信号,然后由简化状态转移表来求状态转移方程,其余与同步计数器设计步骤方法相同。
例6–7 设计模6异步计数器。
解 模6计数器采用如表6–3–5所示的状态转移表。
表6–3–5 例6–7状态转移表
(1)由状态转移表选择各级触发器时钟。
第一级触发器时钟一定是计数脉冲CP ,以下各级触发器时钟从CP 和各级触发器的Q 输出来选择 。选择的原则是该级触发器状态改变时(由0变为1,或由1变为0)必须有时钟触发沿到达,其二是在上述条件下,时钟多余的触发沿越少越好。
由表6–3–5可见,CP 1=CP ↓;Q 2在序号1、3发生状态改变,这两个时刻Q 1在CP 作用下均有下降沿产生 ,所以选CP 2=Q 1↓;Q 3在序号3发生状态改变时,Q 2和Q 1都有下降沿产生 ,在序号5发生状态改变时,Q 2无下降沿产生,Q 1有下降沿产生,所以选择CP 3=Q 1↓。
(2)列简化状态转移表,求状态转移方程。
在列简化状态转移表时,将触发器没有时钟触发的下一个状态用×表示,因此表6–3–5可以化简为表6–3–6。
表6–3–6 例6–7简化状态转移表
因此每个序号均会触发而发生状态转移。Q 2、Q 3要Q 1↓Q 1要CP ↓触发,
触发,因此只有在序号1、3、5时才触发且发生状态转移,其余序号0、2、4由于没有Q 1下降沿产生,Q 2、Q 3不会发生状态改变,状态转移表中用×表示 。用卡诺图化简,如图6–3–9所示。由此可列出
图6–3–9 例6–7卡诺图
Q 3n +1=Q 2n , Q 2n +1=Q 3n Q 2n , Q 1n +1=Q 1n
(3)检验是否具有自启动特性,画逻辑图。
该计数器有两个偏离状态110和111,在CP 作用下,110→ 111→ 000,可以自启动纳入有效状态,具有自启动特性。用D 触发器实现的逻辑图如图6–3–10所示。
图6–3–10 例6–7逻辑图
例6–5是同步模6计数器,请同学们比较这两个计数器的不同。
6.3.4 序列信号发生器
1和0数码按一定规律排列的串行周期性信号称序列信号,在数字系统中通常作为同步信号、地址码等。对于序列信号发生器的设计有两种情况,一是根据给定序列信号设计发生器电路,二是根据要求序列信号的周期(码长)设计发生器电路。
1. 根据给定序列信号设计发生器电路
有两种方案,一是基于移位寄存器产生(移位型序列信号发生器),二是基于计数器产生(计数型序列信号发生器)。基于移位寄存器产生电路需要将给定码长 M 的序列信号按移存规律组成M 个状态循环,最后求出第一级串行输入激励函数。基于计数器产生电路是在同步计数器基础上加输出组合电路组成。同步计数器的模值就是序列信号的码长M 。
例6–8 设计产生序列信号101001,101001,…的发生器电路。 解 (1)设计移存型发生器电路。
根据给定序列信号,由于码长M =6,所以确定移位寄存器的位数n =3,按移位规律组成的状态转移如表6–3–7所示。
表6–3–7 例6–8 状态转移表
图6–3–11 例6–8卡诺图
因此,第一级输入激励信号,由卡诺图6–3–11可求得
Q 1n +1=Q 3n Q 1n +Q 3n Q 2n
检验是否具有自启动特性,由表6–3–7可见,有效状态6个,偏离状态为000和111,检验结果000→ 001,111 →110,具有自启动特性。逻辑图如图6–3–12所示。
图6–3–12 例6–8移位型逻辑图
(2)设计计数型发生器电路。
由于码长M =6,设计模6同步计数器(同例6–5)。
设计产生101001序列信号的组合电路,其真值表如表6–3–8所示。输出F 的卡诺图如图6–3–13所示,求出
表6–3–8 例6–8真值表
图6–3–13 例6–8 F 卡诺图
逻辑图如图6–3–14所示。
图6–3–14 例6–8计数型逻辑图
2. 根据序列信号码长M 的要求设计发生器电路
当设计已给定序列信号码长M 的要求时,首先是选择码型,码型确定后可根据给定序列信号的方法设计。对于码型的选择应根据序列信号的作用来选择,应用最多的是M =2n -1的最长线性序列信号及其派生的M <2n -1的非最长线性序列信号。
(1)M =2n -1的最长线性序列又称为伪随机序列信号,它是在n 位移位寄存器的基础上加上异或反馈电路组成。N 位移位寄存器产生(2n -
1)长度(最长线性序列的反馈函数可查表得到)。
则可以得到M =15的序列例如n =4,由表中可查得反馈函数f =Q 4⊕Q 3,
信号为111100010011010。
(2)M <2n -1的非最长线性序列信号可以在M =2n -1最长线性序列信号基础上产生,其方法是在(2n -1)个状态中跳过[(2n -1) -M ]个状态,使其M 个状态符合移存规律循环。 这种设计方法的关键在于找到起跳状态。寻找起跳状态的方法是:
① 根据M 要求,确定移位寄存器的位数n ,n ≥log 2M 。
② 由表查得(2n -1) 位最长线性序列的反馈函数f 。
③ 从111…开始作为序列Ⅰ,由反馈函数求出(2n -1) 最长线性序列信号。
④ 将序列Ⅰ左移[(2n -1) -M ]位,作为序列Ⅱ。
⑤ 序列Ⅰ和序列Ⅱ对应位进行异或运算,得到序列Ⅲ。
⑥ 在序列Ⅲ中找到10000… n 位数代码,对应于序列Ⅰ的n 位数码即为起跳状态。
⑦ 在序列Ⅰ中从起跳状态开始删去[(2n -1) -M ]位数码,即可得到长度为M 的序列信号。
例6–9 设计M =12的序列信号发生器。
解 ① 由于M =12,可能是n =4。
② 由表查得(2n -1) 位最长线性序列信号的反馈函数f =Q 4⊕Q 3。 ③ (2n -1) 位最长线序列信号为序列Ⅰ。
⑥ 在序列Ⅲ中找到1000,对应序列Ⅰ为起跳状态。
⑦ 在序列Ⅰ中从0001开始删去3位数码001,即可得到长度M =12的序列信号为111100011010,可设计移存型的序列信号发生器(步骤略)。
第一级输入激励函数为
其逻辑图如图6–3–15所示。
图6–3–15 例6–9逻辑图
6.4 采用中规模时序功能器设计时序逻辑电路
6.4.1 采用中规模计数器实现任意模值计数(分频)器
应用N 进制的集成计数器可以实现任意模值M (M <N )计数分频,通常利用集成计数器的清除端和置位端来实现。
1. 利用清除端复位
清除信号产生电路是固定结构形式,如图6–4–1所示,其中G 1为判别
G 1的输入端为计数模门,G 2和G 3为基本触发器产生足够的清除脉冲,
值M 的二进制代码中1。
图6–4–1 清除信号产生
例6–10 利用CT54/74161实现模12计数分频。
解 CT54/74161是4位二进制计数器,CR 为低电平异步清零,模12的二进制代码Q 3Q 2Q 1Q 0=1100,因此电路结构如图6–4–2所示。
图6–4–2 例6–10逻辑电路图
其工作原理是,当CP 为0时,G 3为1,CR =1,在CP 脉冲作用下,正常计数。一旦计数器进入到M =12(Q 3Q 2Q 1Q 0=1100)时,G 1输出为0,使G 2输出为1。由于CP =1,G 3输出为0,作用于CR ,使计数器清零为0000状态,同时G 1输出为1。G3输出为0的持续时间为CP =1的持续时间。此后CP =0,使G 3输出为1。计数器又进入正常计数,直至进入Q 3Q 2Q 1Q 0=1100,又产生清除信号,这样就完成了模12计数分频。由于1100出现的时间十分短暂,所以不包含在有效状态之中,其状态转移为
当M >N 时,可以用多片接连。
2. 利用置位控制端置位法
(1)同步置位法。
置位信号的产生也是固定结构,只需要改变输入数据,就可以改变计数模值 。它有三种电路结构形式:
的二进制代码,由满值输出CO 作为LD 。第一种:输入数据为(2n -M )
其特点是在状态循环中不包含全0态,如图6–4–3所示。分析图6–4–3,可得其状态转移为
图6–4–3 不包含全0态电路结构
图6–4–3为模12计数分频,其中0100(*)为置入数据。 第二种:输入数据为(2 n -M +1)的二进制代码,由或门产生置位控制信号,其特点是在状态循环中包含了全0状态,在全0时进行置位,如图6–4–4所示。分析图6–4–4可得其状态转移为
图6–4–4 包括全0态电路结构
其中0101(*)为置入数据。
第三种:输入数据为的二进制代码,如图6–4–5所示,它与图6–4–4的不同点在于Q 3输出反馈D 3作为置数输入,其特点是包含了全0态,而且Q 3输出为方波。
图6–4–5 包含全0态且输出为方波
分析图6–4–5,可得出状态转移为
其中0011(*)和1011(*)为置入数,Q 3有6个连0和6个连1,所以Q 3输出为方波。
(2)异步置位法。
电路结构同异步复位法,但它有一个置位判别,二是置位输入数。在同步置位中,置位判别状态是 0000或×000。而在异步置位时,
而置位数为从该状态开始跳可以是2n 个有效状态中的任意一个状态,
过(2n -M )后的状态数。通常以1111为判别状态,而置位数为(2n -M -1)二进制代码。
例如要实现模12计数分频,则置位数的状态为16–12–1=3,即 0011。如图6–4–6所示,其状态转移为
图
6–4–6
其中0011(*)为置位数,而1111出现时间十分短暂,不在有效序列之中。
6.4.2 采用中规模集成移位寄存器
移位寄存器的特点是状态转移符合移存规律,它经常用来作为环形计数器、扭环计数器、序列信号发生器等。也可以实现模 M 计数分频器,模值为M 的计数器关键在于找到符合移存规律的M 个状态转移。
第一种方法:采用同步置位法。
同步置位法的电路结构固定(见图6–4–7)。采用CT54/74195时,输
K =Q 3,将作为SH /LD 的控制信号,即当Q 3Q 2Q 1Q 0=×111入激励为J =Q 3,
时,在下一个时钟到达时执行置位功能,其余状态下,执行移位寄存。因此选择的预置数可以实现不同模值的计数分频。判别门G 的输出可以作为计数器的输出。
表6–4–1 给出了不同模值计数分频时预置数。
表6–4–1 不同模值预置数
例6–11 分析图6–4–7,列出状态转移表。
图6–4–7 例6–11逻辑图
解 设初态Q 3Q 2Q 1Q 0=0111,此时判别门G 的输出为0,下一时钟到达执行置位功能,使Q 3Q 2Q 1Q 0=0100,此后G 的输出为1,执行移位寄存功能,状态转移表如表6–4–2所示,该电路为模10计数器。
表6–4–2 例6–11状态表
第二种方法:不采用置位方法,而是建立M 个符合移存规律的状态,设计输入激励J–K和输出,这种方法的关键在于寻找符合移存规律的状态转移表。
在序列信号发生器中,我们曾介绍了码长为M 的移存型序列信号发生器是由n 个触发器构成,它有M 个状态按移存规律转移,因此码长为M 的移存型序列信号发生器可以作为模值为M 的移存型计数器,必须注意的是其输出要由组合电路产生。
例6–12 设计模12的移存型计数器。
解 由例6–9 M =12的序列信号111100011010,其状态转移表如表6–4–3所示。实现该状态转移的逻辑电路如图6–4–8所示。
表6–4–3 例6–12状态转移表
为了使输出简单,在表6–4–3中可选择任意一状态作为输出,本例中选0110为输出状态,通过卡诺图简化,可得F =Q 4Q 1。因此,逻辑图如图6–4–8所示。
图6–4–8 例6–12模12移存型计数器
6.5 VHDL描述时序逻辑电路
时序逻辑电路都是以时钟信号为驱动信号,时序逻辑电路只有在时钟信号的边沿到达时,其状态才发生改变,因此,时钟信号通常是描述时序逻辑电路程序的执行条件。
通常对触发时钟边沿检出条件可简写为
IF CP'EVENT AND CP='1' THEN; 上升沿触发;
IF CP'EVENT AND CP='0' THEN; 下降沿触发;
时序逻辑电路还有同步复(置)位和非同步复(置)位。同步复(置)位是在复(置)位信号有效且在给定时钟边沿到达时,时序逻辑电路复(置)位。而非同步复(置)位,只要复(置)位信号有效,时序逻辑电路立即复(置)位。
在VHDL 描述时,同步复(置)位一定在以时钟为敏感信号的进程中定义,且用IF 语句来描述必要的复(置)位条件。例如 PROCESS(CP)
BEGIN
IF(CP'EVENT AND CP='1') THEN
IF(cr='0') THEN
tmprg(n) <=>=>
...
而非同步复(置)位在描述时与同步方式不同,首先在进程的面感信号中除时钟信号以外,还应加上(置)位信号;其次用IF 语句描述复(置)位条件;最后在ELSIF 段描述时钟信号边沿条件。例如 PROCESS(CP,cr)
BEGIN
IF(cr='0') THEN
tmprg(n) <=>=>
IF(CP'EVENT AND CP='1') THEN
...
例6–13 用VHDL 描述六十进制计数器。
解 六十进制计数器常用于时钟计数,cp 为时钟输入端;load 为预置操作控制端(高电平有效);datain1(3~0)为个位数据输入端,datain10(2~0)为十位数据输入端;bcd1(3~0)为计数值个数输出,bcd10(2~0)为计数值十位输出。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY bcd60count IS
PORT(cp,load: IN STD_LOGIC;
datain1: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
datain10: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
bcd1: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
bcd10: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END bcd60count;
ARCHITECTURE rtl OF bcd60count IS
SIGNAL bcd1n:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL bcd10n:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(cp,load,datain1,datain10)
BEGIN
IF(load='1') THEN
bcd1n <=>=>
cd10n<=>=>
ELSIF(cp'EVENT AND cp='1') THEN
IF(bcd10n < 5)="">
IF(bcd1n< 9)="">
bcd1n <= bcd1n="" +="">=>
bcd10n <=>=>
ELSE
bcd1n <=>=>
bcd10n <= bcd10n="" +="">=>
END IF;
ELSE
IF(bcd1n< 9)="">
bcd1n<= bcd1n="" +="">=>
bcd10n <=>=>
ELSE
bcd1n <=>=>
bcd10n<=>=>
END IF;
END IF;
END IF;
END PROCESS;
bcd1<=>=>
cd10<=>=>
END rtl;
自我检测题
1. 已知同步时序电路如图P6–1所示,要求分析该电路,并说明其逻辑功能。
图P6–1
2. 一时序逻辑电路如图P6–2所示,虚线框内为计数器,C 为进位信号,且为整个电路的输出。已知CP 的频率为f CP ,试
图P6–2
(1)画出在CP 作用下,Q 1、Q 2、Q 3及C 的工作波形(设各触发器初始状态均为0)。
(2)说明输出信号C 的频率f C 与f CP 的关系。
(3)若虚线框内电路为N 进制计数器,则f C 与f CP 的关系如何?
3. 分析图P6–3所示时序逻辑电路。X 为控制信号,请说明电路的功能。
图P6–3
4. 试设计一个模4同步计数器。当x =0时,按二进制规律递增计数;当x =1时,按循环码递增计数。
5. 设计一个能周期性地产生01110001序列信号发生器。要求
(1)采用D 触发器和与非门实现。
(2)若D 触发器的参数有t pd cp= 20 ns ,根据建立时间t set =10 ns,数据保持时间t h =4 ns,与非门延迟时间t pd =6 ns,请估算该电路最高工作频率。
6. 分析图P6–4所示同步时序逻辑电路,要求
(1)画出状态转移图,并说明电路完成功能。
(2)某学生按逻辑图接线后,实验得到如下循环,经检查,触发器工作正常,试分析故障在何处。
图P6–4
7. 分析图P6–5所示电路,列出在CP 脉冲作用下电路的输出序列信号。图中74151为8选1数据选择器,EN =0使能工作;74194为4
位双向移位寄存器,当S 1=0,S 0=1,CR =1时右移工作,右移串行输入端为D IR 。
图P6–5
8. 图P6–6为两片74LS161组成的计数器,试
(1)分别列出芯片(Ⅰ)和芯片(Ⅱ)的状态转移表(图);
(2)芯片(Ⅰ)和芯片(Ⅱ)的计数模值为多少?
(3)芯片(Ⅱ)CO 的输出脉冲和CP 脉冲的分频比是多少?
图P6–6
9. 采用芯片74LS161设计一个计数器,自动完成3位二进制加/减循环计数,状态转移图如图P6–7所示。要求除74LS161芯片外,只能用三个2输入异或门和一个3输入与非门实现。
41
图P6–7
10. 请分析以下VHDL 程序所描述的时序逻辑电路的功能。 ENTITY xxxx IS
PORT(clk,clr,updn:IN STD_LOGIC;
qa,qb,qc,qd :OUT STD_LOGIC);
END xxxx;
ARCHITECTURE rtl OF xxxx IS
SIGNAL count_4:STD_LOGIC_VECTOR(3 DOWNTO 0) ;
BEGIN
qa<=>=>
qb <=>=>
qc <=>=>
d<=>=>
PROCESS(clr,clk)
BEGIN
IF(clr='1') THEN
count_4 <= (others="">'0');
LSIF(clk'EVENT AND CLK='1') THEN
IF(updn='1') THEN
42
count_4<=>=>
ELSE
count_4<=>=>
ENDIF ;
ENDIF ;
END PROCESS;
END rtl;
思考题
1. 什么是时序逻辑?时序逻辑与组合逻辑的区别在哪里?
2. 什么是同步时序逻辑?什么是异步时序逻辑?
3. 什么是具有自启动特性?
4. 分析与设计时序逻辑电路的一般步骤。
5. 在状态化简时,状态合并的条件是什么?
43
范文二:时序图
论坛
1.1.1.1登录功能
1.1.1.1.1任务描述
用户要完成回复 , 发帖等功能 , 要先登录 , 在登录窗口填写完整的信息 , 点击登录按 钮
:
图 3-1. 登录时序图
frontdisplsy 是前台页面 ,user 是客户类的对象 , 而 DBHelper 是数据库类的一个对象 , 前台要求用户登录功能 , 首先检查用户是否存在 , 如果存在 , 返回 true, 登录成功 1.1.1.1.2输入
填好用户名 , 密码 , 验证码等信息
1.1.1.1.3输出
登录成功 , 进入页面
1.1.1.2注册功能
1.1.1.2.1任务描述
填写完整用户的信息 , 可以注册一个新用户
图 3-2. 用户注册时序图
用户填写完整信息后 , 调用 user 类中的 IsUserExist()判断一下用户是否存在 , 如果不存在 , 则调用 UserAdd()函数增加增加用户,最后返回相应的信息。 1.1.1.2.2输入
注册用户的详细信息,点击注册按钮
1.1.1.2.3输出
注册成功或注册失败
1.1.1.3给用户增加角色
1.1.1.3.1任务描述
只有管理员可以使用此功能, 在后台页面, 管理员可以为每一个用户添加不同的 角色
图 3-3. 增加用户角色时序图
displsyBack 是后台页面, ,user 是客户类的对象 ,UserRole 是用户角色的一个对象, 而 DBHelper 是数据库类的一个对象, 添加角色时, 调用 UserRole 的 UserRoleAdd ()函数,如果成功,则返回正确信息。
1.1.1.3.2输入
选中用户,选中要赋予的角色
1.1.1.3.3输出
该用户成功的得到该角色
1.1.1.4给某角色增加权限
1.1.1.4.1任务描述
可以给不同的角色增加不同的权限
图 3-4. 给某角色增加权限时序图
1.1.1.4.2输入
选定响应的角色,选定响应的角色,点击按钮 1.1.1.4.3输出
赋予了该角色该权限
1.1.1.5增加版块
1.1.1.5.1任务描述
管理员可以给论坛增加相应的版块
图 3-5. 增加版块时序图
1.1.1.5.2输入
输入要增加板块的名字以及相关的信息,点击按钮 1.1.1.5.3输出
增加了要增加的版块
1.1.1.6更改客户信息
1.1.1.6.1任务描述
用户在登录之后可以更改自己的信息
图 3-6. 用户更改信息时序图
1.1.1.6.2输入
输入要更改的信息,点击更改按钮
1.1.1.6.3输出
成功的更改了相应的信息
1.1.1.7发帖
1.1.1.7.1任务描述
点击地图左上角漫游缩
图 3-7. 发帖时序图
1.1.1.7.2输入
输入相应的帖子的标题和内容以及相关的信息,点击发帖按钮
1.1.1.7.3输出
帖子发布成功并成功的显示到帖子显示的页面 1.1.1.8回复
1.1.1.8.1任务描述
登录后的用户可以针对某一个帖子进行回复
图 3-8. 回复时序图
1.1.1.8.2输入
输入回复的内容及相关信息,点击回复按钮 1.1.1.8.3输出
成功的回复并显示到相关的页面上
1.1.1.9删除帖子
1.1.1.9.1任务描述
管理员可以对某些不符合规定的帖子进行删除
图 错误!文档中没有指定样式的文字。 -9 删除帖子图
1.1.1.9.2输入
选中要删除的帖子,点击删除按钮
1.1.1.9.3输出
相应的帖子已经删除并且显示帖子的页面不再显示该帖子。 1.1.1.10删除回复
1.1.1.10.1任务描述
管理员可以对一些不符合要求的回复进行删除
图 错误!文档中没有指定样式的文字。 -10 删除回复图
1.1.1.10.2输入
选中要删除的回复,点击删除按钮
1.1.1.10.3输出
输出相应的帖子已经删除并且显示帖子的页面不再显示该帖子
范文三:时序图
实验四 时序图
一、实验目的
1.理解并掌握动态模型中时序图的相关知识。
2.掌握使用建模工具 Rational Rose创建时序图的操作步骤。
二、实验器材
1.计算机一台。
2. Rational Rose 工具软件。
三、实验内容与步骤
除了静态模型外, UML 还有非常重要的动态模型。 本次实验主要介绍动态 模型中的时序图。
时序图(Sequence Diagram)也称顺序图,描述了随时间变化,对象间传递 消息的先后顺序。在具体应用中,时序图通常用来展示用例行为中各个对象的 交互顺序。例如“图书管理系统”中的“借阅图书”用例,如果我们想刻画该 用例是如何完成借阅功能的,就要分析该用例所涉及到的对象间是通过怎样的 消息进行交互的, 这些消息又是通过怎样的顺序进行传递的, 那么就需要为 “借 阅图书”这一用例建立相应的时序图。
时序图可供用户、分析人员、设计人员、编码人员、测试人员使用,以帮 助他们深入理解系统的功能和结构。
在 UML 中,时序图被描绘成一个二维关系图。其中,横轴代表各个参与 交互的对象,纵轴代表时间,垂直向下延伸。一般来讲,时序图包括如下四种 构成元素:对象 (Object ) 、 生命线 (Lifeline ) 、 消息 (Message ) 、 激活期 (Activation ) 。
相关知识
1. 对象(Object )
静态模型的类图和对象图中,我们已经知道对象是类的实例,是系统中用 来描述客观事物的实体,是构成系统的基本单位。在动态模型的时序图中,对
象代表参与交互的角色,该角色可以是类的实例,也可以是系统参与者、人机 界面、功能模块等。
在 UML 1.x中,时序图的对象符号被表示为矩形,该矩形包含对象名称, 并且在该对象名称下方需加下划线。常见格式有下列三种,实际应用中如何选 择应视具体情况而定:
①见图 5.2所示,即对象名在前,类名在后,其间用冒号连接,表明前者是 后者的对象,如“ Tom ”是“ Student ”类的一个对象。
②见图 5.3所示,此种格式用于尚未给出对象名的情况,如只给出“ Student ” 类而没有给出该类对象的具体名称。
③见图 5.4所示,只给出对象名而省略类名,如只给出对象名“ Tom ” ,却没 有指出该对象具体属于哪个类。
2. 生命线(Lifeline )
生命线代表对象在一段时期内的存在。在 UML 1.x 中,生命线表示为一条 垂直的虚线,存在于对象底部中心位置,如图 5.5所示。但是在 UML 2.0中,生 命线改成了矩形加虚线的整体表示,而取消了原来关于对象的称呼。另外,由 于在 UML 2.0的时序图中矩形已经不代表对象,所以先前矩形对象名称下方的 下划线也被取消,如图 5.6所示。
在某些情况下,需要明显地表示出对象被销毁。例如,当使用没有自动垃 圾回收机制的 C++作为开发语言时,或者需要特别指明对象不再被使用时(如
图 5.4 对象表示格式(3
)
图 5.3 对象表示格式(2
)
图 5.2 对象表示格式(
1)
关闭数据库连接等) ,都需要销毁对象。在 UML 生命线中提供了表示对象销毁 的方式,如图 5.7所示。
3. 消息(Message )
消息是对象间通信的表现形式, 对象间的交互是通过消息的传递来完成的。 消息可以激发操作、唤起信号、创建对象或撤销对象。在时序图和后续的协作 图中均用到了这一概念,消息在具体应用中可以是确切的信号,也可以是某种 调用机制。
在 UML 中,消息表示为箭头,箭头起始的一方是发送方,箭头指向的一 方是接收方,如图 5.8中所示。箭头的类型体现了消息的类型,详见表 5.1。
注:同步消息,就是需要等待消息的处理完成,才可以接着执行下去。异步消息,就 是发送以后不必等待完成。
4. 激活期(Activation )
激活期,也称活动期或控制期(Focus of Control ) ,代表对象直接或间接执 行某项操作的时期;换言之,在该时期内对象被占用以完成特定的任务,而在
图 5.6 UML 2.0的生命线 Object
图 5.7 对象销毁
图 5.5 UML 1.x的对象和生命线 表 5.1 时序图常用消息类型
该时期以外对象则处于空闲状态。在 UML 中,激活期表示为对象生命线上的细 长矩形,该矩形也被称为激活条。对象在激活条的顶部被激活,完成特定的任 务后进入空闲状态,详见图 5.8所示。
激活期
消息
图 5.8 时序图中的消息和激活期
知识扩充
1. 监护条件
为了详细说明对象间的消息传递,可以在时序图中使用监护条件(或称约 束条件) ,加以辅助说明,如图 5.23“购买饮料零钱找不开”场景时序图所示, 其中括号内部标注信息即为监护条件。 例如消息 3的监护条件是 [cash>price]即顾 客现金大于饮料售价, 此条件满足时 Recorder (记录仪) 对象才传递找零信息给 Distributor (分配器)对象;又如消息 5的监护条件是 [no Change]即没有零钱, 此条件满足时 Recorder (记录仪)对象才会传递相关提示信息给 Panel (面板) 对象。
图 5.23 “ NoChange ”时序图
在大部分情况下,时序图中发送消息的时间是可以忽略的。如果有某些特 殊情况需要表示消息间的时间差,也可以在图中使用监护条件,用于指示时间 间隔。
2. 时序图工具栏
时序图工具栏上的按钮名称及功能,详见表 5.2。
表 5.2 时序图工具栏按钮
“图书管理系统”的时序图
1. 建立“用户登录”的时序图,并使用 Rational Rose工具实现。
(1)新建模型或打开模型
Rational Rose正常启动后,选择【 File 】 ->【 New 】菜单,新建一个模型命 名为“ Library ” ,如图 5.9所示。如果在此之前已经建立了“ Library ”模型,那 么就可以选择【 File 】 ->【 Open 】菜单,打开这个原有的模型。
图 5.9 新建模型或打开模型
(2)新建时序图
在视图区域树型列表中,右键单击【 Logical View】结点,然后在弹出的快 捷菜单中选择【 New 】 ->【 Sequence Diagram 】 ,如图 5.10所示。在此默认的时 序图名称为“ New Diagram” ,可以输入新的时序图名称为“ User Login” 。
(3) 创建对象
在时序图工具栏中选择对象按钮【
】即“ Object ” ,然后在绘图区域中单
击鼠标左键,便可以将指定的对象添加到时序图中,被添加的对象自动带有生 命线。如果要修改对象的名称,可以双击对象打开“对象属性”对话框,或者 右键单击该对象, 在弹出的快捷菜单中选择 【 Open Specification】 也可以打开 “对 象属性”对话框,如图 5.11所示。以创建 Librarian 对象为例,在图 5.11所示对 话框的【 Class 】下拉列表中,如果选择“ Librarian(Use Case View) ” , Librarian 对象将显示为类似参与者的图示,如果选择“ Lirarian(Logical View:Business Package) ” , Librarian 对象对象将显示为相似于类的图示。
本例时序图中涉及到两个对象,其一为 Librarian 创建的一个对象,其二为 Reader 类创建的一个对象,如图 5.12所示。
图 5.11 “对象属性”对话
对象所属的类
对象名
在时序图工具栏中选择消息按钮【 】即“ Object Message” ,然后在绘图
区域中两个对象生命线之间拖拽鼠标左键,便可以在指定的对象间添加相应的 消息,被添加消息后对象的激活期会自动出现。对象间的消息默认情况下只有 一个消息编号,如果要输入消息的具体内容或设置消息的类型,可以双击该消 息打开“消息属性”对话框,或者右键单击该消息打开“消息属性”对话框。 在“消息属性”对话框中选择【 General 】选项卡可以输入消息的名字和相关说 明信息,如图 5.13所示;在“消息属性”对话框中选择【 Detail 】选项卡可以设 置消息的类型等,如图 5.14所示。
如果要取消消息编号或取消激活期的显示,可以选择主菜单栏中的【 Tools 】 ->【 Options 】 ,在弹出的对话框中选择【 Diagram 】选项卡,通过复选框来完成相 应的设置,如图 5.15所示。
图 5.14
消息属性对话框 Detail
选项卡
图 5.13 消息属性对话框 General 选项
2. 建立“图书信息录入”的时序图,并使用 Rational Rose工具实现。
实际操作步骤与建立“用户登录”时序图相似,使用 Rational Rose 工具实 现的 “ InputBook ”时序图如图 5.17所示。
该时序图中涉及到的对象说明如下:
(1) Librarian 对象:Librarian 类即图书管理员类创建的一个对象。 (2) BookType 对象:BookType 类即图书类型创建的对象。 (3) Book 对象:Book 类即图书类创建的对象。 该时序图中涉及到的消息说明如下:
(1) bookType 消息:获取所有图书类型编号及类型名称。 (2) operationType 消息:选择操作方式。 (3) getBookInfo 消息:获取图书基本信息。
(4) returnBookInfo 消息:返回获取到的图书基本信息。 (5) editPage 消息:界面编辑。
(6) inputBookInfo :根据操作方式录入图书基本信息。 (7) returnInputMess :返回录入信息。
图 5.17 “ InputBook
”时序
3. 识别“图书管理系统”中管理员“查询热门图书”场景的对象、消息等 要素,并使用 Rational Rose工具绘制出其登录场景的时序图。
实际操作步骤与建立“用户登录”时序图相似,使用 Rational Rose 工具实 现的 “ SearchHotBook ”时序图如图 5.18所示。
该时序图中涉及到的对象说明如下:
(1) Librarian 对象:Librarian 类即图书管理员类创建的一个对象。
(2) BorrowManage 对象:借阅管理对象。
(3) BookType 对象:图书类型对象。
(4) Book 对象:图书对象。
该时序图中涉及到的消息说明如下:
(1) getBorrowInfo 消息:获取借阅信息。
(2) getBookType 消息:获取图书类型信息。
(3) getBookInfo 消息:获取图书基本信息。
(4) showResult 消息:显示查询结果。
图 5.18 “ SearchHotBook ”时序图
4. 识别“图书管理系统”中“借书”场景的对象、消息等要素,并使用 Rational Rose 工具绘制出其登录场景的时序图。
实际操作步骤与建立“用户登录”时序图相似,使用 Rational Rose 工具实 现的 “ BorrowBook ”时序图如图 5.19所示。
该时序图中涉及到的对象说明如下:
(1) Librarian 对象:Librarian 类即图书管理员类创建的一个对象。
(2) Reader 对象:读者对象。
(3) Book 对象:图书对象。
(4) ReaderType 对象:读者类型对象。
(5) BorrowManage 对象:借阅管理对象。
该时序图中涉及到的消息说明如下:
(1) getReaderInfo 消息:获取读者基本信息, 如办证日期、 借阅数量、
挂失标志,用处理图书证过期、借阅数量已满等问题
(2) getReaderType 消息:获取读者类型信息。
(3) getBookFlag 消息:获取图书借阅标志, 用于判断图书是否可借阅。 图 5.19 “ BorrowBook ”时序图
(4) InputBorrowInfo 消息:输入借阅信息,如读者编号,图书编号, 借还日期等。
(5) modifyBookFlag 消息:修改图书借阅标志。
(6) addBorrowBook 消息:增加读者已借阅图书数量。
5. 识别 “图书管理系统” 中 “查询罚金” 场景的对象、 消息等要素, 并使用 Rational Rose 工具绘制出其登录场景的时序图。
实际操作步骤与建立“用户登录”时序图相似,使用 Rational Rose 工具实 现的 “ SearchPayment ”时序图如图 5.20所示。
图 5.20 “ SearchPayment ” 时序图
该时序图中涉及到的对象说明如下:
(1) Librarian 对象:Librarian 类即图书管理员类创建的一个对象。
(2) Reader 对象:读者对象。
(3) Book 对象:图书对象。
(4) BorrowManage 对象:借阅管理对象。
该时序图中涉及到的消息说明如下:
(1) inputOption 消息:输入查询条件信息。
(2) getPaymentInfo 消息:获取罚金信息。
(3) getReaderInfo 消息:获取读者基本信息。
(4) getBookInfo 消息:获取图书基本信息。
(5) showResult 消息:显示出读者、图书及罚金信息。
四、测试
1、阅读如图 5.21所示“购买饮料”主要场景的时序图,试描述不同对象间消 息的传递。
图 5.21 “ BuyDrinkMain ” 时序图
2. 根据如下文字描述,绘制出“ ATM 取款”最理想场景(无需考虑特殊情况) 的时序图,并用 Rational Rose工具实现。
(1) 开始用户 “ Jack ” 将银行卡插入到读卡器, 读卡器读取卡号, 打开 “ Jack ”
的账目对象,并初始化屏幕,屏幕提示输入 PIN 密码, “ Jack ”输入密码,然后 系统验证密码与账户对象,发出相符的信息。
(2) ATM 屏幕向“ Jack ”提供操作选项, “ Jack ”选择取款,然后屏幕提示 “ Jack ”输入取款金额,他选择了 2000元 RMB ,系统启动账目对象进行核实, 之后从账户中取钱。
(3)系统启动账目对象进行核实的过程如下:首先,验证“ Jack ”的账目 至少有 2000元 RMB ;然后从中扣除 2000元 RMB ,再让吐钞机提供 2000元 RMB 现金;另外还需要让票据打印机提供取款凭据;最后让读卡器退卡。
五、实验报告要求
1.整理实验结果。
2.小结实验心得体会。
范文四:VGA时序图
基于 Verilog 的 VGA 驱动设计(一) VGA 时序分析
VGA 时序分析
电阻 DAC 转换网络和 640X480的 VGA 时序图 :
图 1
扫描频率
显示器采用 光栅扫描 方式,即 轰击荧光屏的电子束 在 CRT 屏幕上从左到右 (受水平同步信号 HSYNC 控制)、从上到下(受垂直同步信号 VSYNC 控制) 做有规律的移动。 光栅扫描又分 逐行扫描 和 隔行扫描 。 电子束采用光栅扫描方式, 从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后, 又回到下一条水平线的左端, 重复上面的过程; 当电子束完成右下角一点的扫描
此后,电子束又回到左上方起点,开始下一帧的扫描。这种方法 也就是常说的逐行扫描显示。
1.Horizonal Timing
图 2
A (us) Line Period(1040*20ns)
B (us) Sync pulse lenght
C (us) Back porch
D (us) Active video time
E (us) Front porch
2. Vertical Timing
图 3 O (ms) Frame Period 帧周期 P (ms) Sync length
Q (ms) Back porch
R (ms) Active video time
S (ms) Front porch
Horizonal timing information 水平扫描时序
图 4 Notes:
?
Active area is actually an active area added with 6 overscan border pixels (in some other VGA timing tables those border pixels are included in back and front porch)
Vertical timing information 垂直扫描时序
图 5 Notes:
? Active area is actually an active area added with 4 overscan border
lines (in some other VGA timing tables those border lines are included in back and front porch)
? Note than when the active part of VGA page is widened, it passes by the rising edge of the vertical sync signal in some modes (marked with *)
根据上面的水平和垂直扫描时序可以分析显示 800x600模式, FPGA 系统 时钟采用 Spartan-3E Starter Kit板上的 50MHz 的有源晶振。 为了显示器显示效 果好,采用刷新频率为 72Hz 。
以下以系统时钟频率为 50MHz , 显示器显示 800x600模式为例分析水平扫 描和垂直扫描时序:系统时钟周期为 1/50MHz=20ns
水平扫描 Horizonal(Line)
A 水平(行)周期为 1040个像素 (Pix),时间为 1040x20ns=20.8us;
B 同步脉冲为 120像素(Pix );
C 后沿为 61个像素 (Pix);(66)
D 有效时间为 806个像素 (Pix);(800)
E 前沿为 53个像素。(54)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描参数的设定
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// parameter LinePeriod =12'd1040;
parameter H_SyncPulse=10'd120;
parameter H_BackPorch=10'd61;
parameter H_ActivePix=10'd806;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// 水平扫描计数
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if (!rst_n) x_cnt <=>=>
else if(x_cnt == LinePeriod) x_cnt <=>=>
else x_cnt <= x_cnt+="">=>
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描信号 hsync 产生
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if (!rst_n) hsync_r <=>=>
else if(x_cnt == 1) hsync_r <= 1'b0;="" 产生="" hsync="">=>
else if(x_cnt == H_SyncPulse) hsync_r <=>=>
垂直扫描 Vertical(Frame)
O 垂直扫描周期为 666个行扫描,时间为 666x1040x20ns=13853us;
P 同步脉冲为 6个行扫描,时间为 6x1040x20ns=125us;
Q 后沿为 21个行扫描, 时间为 25x1040x20ns=436us; (后沿为 25个行扫描, 时间为 25x1040x20ns=520us;)
R 有效时间为 604个行扫描,时间为 604x1040x20ns=12563us; (有效时间 为 600个行扫描,时间为 600x1040x20ns=12480us)
S 前沿为 35个行扫描,时间为 35x1040x20ns=728us。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描参数的设定
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// parameter FramePeriod=
parameter V_SyncPulse=10'd6;
paramete r V_BackPorch=10'd21;
parameter V_ActivePix=10'd604;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描计数
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if (!rst_n) y_cnt <=>=>
else if(y_cnt == FramePeriod) y_cnt <=>=>
else if(x_cnt == LinePeriod) y_cnt <=>=>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// 垂直扫描信号 hsync 产生
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if (!rst_n) vsync_r <=>=>
else if(y_cnt == 1) vsync_r <= 1'b0;//产生="" vsync="">=>
else if(y_cnt == V_SyncPulse) vsync_r <=>=>
并不是每个像素都能显示的,只有在有效区域像素区域内才能显示 RGB
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描信号 hsync 产生
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// wire valid; //有效显示区标志
assign valid =
(x_cnt >= (H_SyncPulse+H_BackPorch)) &&
(x_cnt < (h_syncpulse+h_backporch+h_activepix))="">
(y_cnt >= (V_SyncPulse+V_BackPorch)) &&
(y_cnt <>
下面是测量逐行扫描 60HZ 的电视盒的 VGA 时序波形 :
图 6水平 — 垂直同步信号
图 7水平 — 垂直同步信号
图 8 RED-BLUE颜色信号
图 9水平同步 -R 颜色
图 10颜色 R-垂直同步
图 11
初步整理的时序
行周期 32us (频率 31.3Hz )
行同步脉冲时间 7us
场频率 60Hz
参考资料
1) VGA Signal Generation with the XS Board
2) CPLD 驱动 VGA 显示器
http://blog.21ic.com/user1/636/archives/2007/43935.html
(图 1)
3) VGA timing information
http://www.epanorama.net/documents/pc/vga_timing.html
(图 2、图 3、图 4、图 5)
4)瑞芯科技设计示例 RHic013:使用 FPGA 控制 VGA 显示
5) VGA Controller,Altium
6) VGA接口时序波形
http://www.dzsc.com/dzbbs/20070204/200765205519734395.html
范文五:uml时序图
借阅者查询书籍信息的时序图
:MaintenanceW:Item
indow
: Borrower
1: QueryBook()
2: find_on_title(Title)
借阅者预定书籍的时序图
:Web theTitle:Title : BorrowerApplication1: Login
2: find(String)
3: Return true
4: reserve
图书管理员处理书籍借阅的时序图
:Lend Windows:Title:Borrower:Loan:Item : Librarian
1: find title()
2: find(String)
3: find Item4: find on title(Title)5: identify borrower()6: find(String)
7: create(Borrower,Item)
系统管理员删除书目的时序图
:Maintenance :Title:Item : LibrarianWindows
1: remove item()
2: find(String)
3: find on title(Title)
4: destroy
5: destroy
管理人员开展工作的时序图
theManager:MatheRentRecord:theEmployee:Co
nagerWorkRecordmmonWorker()
viewRecord()
viewWorkInfo()
calculate()
return result
客户还车时序图
theCustomer:CtheCommonWorkertheSkillWorker:theCar:cartheServiceRecortheCustomerRecordtheRentrecord:ustomer:commonWorkerskillWorkerd:ServiceRecord:CustomerRecordWorkRecord
returnbackcheck_carstatus()fillRecord()
return
notify_payment()
pay
update_carstatus()
end()
updateRecord()
客户预定车辆的时序图
the Cudyomrtthe Request:Requet the Common W theCustomerR the Car:carOrderorker:common W orkerecord:CusttontRecord
fillOrder()
checkRequest()check()
no problem
InServiced()
OK
create new cus omer tecord
Allow()
isHandled()
nktify()系统管理人员管理网站的时序图
manage:ManagtheDatabase:Dthepage:Page : AdministratoreInterfaceatabase1: Login()
2: Sdd_or_delete_Article
3: show()
4: success
5: UpdateCAI()
6: show()
7: success
8: Add_or_delete_User
9: Notify()
10: success
学生下载文件的时序图
theDownLoadPagtheServer:ServetheDatebase:D : studente:DownLoadPageratabase
1: Request
2: Send(String,String)
3: Identity()
4: authorize
5: return
6: Success(Transfer)/Fail(Error)
用户登录系统的时序图
theLogFace:LotheServer:ServetheDatabase:D : UserginInterfaceratabase
1: Input(String)
2: send(String,int)
3: Query_end_Validate()
4: feedBack()
5: Return
6: ShowInfomation()
=>