1、第第 6 章章 同步时序电路同步时序电路【课前思考课前思考】【学习指南学习指南】6.1同步时序电路概述同步时序电路概述6.2同步时序电路的设计同步时序电路的设计6.3状态化简状态化简6.4同步时序电路中的竞争和险象同步时序电路中的竞争和险象6.5算法状态机图算法状态机图6.6解题示例解题示例【本章小结本章小结】2008.122008.121 同步时序电路同步时序电路 异步时序电路 脉冲异步时序电路 电位异步时序电路 组合逻辑电路 时序逻辑电路 逻辑电路 触发器作为记忆元件,各触发器由同一个时钟脉冲驱动 6.1同步时序电路概述同步时序电路概述 时序逻辑电路:时序逻辑电路:时序电路的输出不仅取决于
2、当前的输入;还与当前的状态有关。时序电路的输出不仅取决于当前的输入;还与当前的状态有关。当前状态由此前的状态演变而来。当前状态由此前的状态演变而来。同步同步时序电路:时序电路:记忆元件由寄存器构成。记忆元件由寄存器构成。寄存器中寄存器中各各触发器触发器被被同一个时钟信号同一个时钟信号 clock 驱动。驱动。2008.122008.122时序电路的电路模型时序电路的电路模型 组合逻辑电路 记忆元件 输 出 Z(1.m)输 入 X(1.n)激励信号 Y(1.r)记忆元件现态 y(1.k)组合逻辑电路 记忆元件(寄存器)输 出 Z(1.m)(a)时序电路通用模型时序电路通用模型 (b)同步时序电路
3、模型同步时序电路模型 激励信号 Y(1.r)寄存器现态 y(1.k)清零信号 reset 时钟信号 clock 输 入 X(1.n)2008.122008.123时序电路的数学模型:时序电路的数学模型:有限状态机(有限状态机(FSM)有限状态机的状态集合表示为:有限状态机的状态集合表示为:S(1.p)=(s1,s2,si,sp)(6-1)将这将这p个状态编码,保存在状态寄存器个状态编码,保存在状态寄存器y(1.k)中:)中:y(1.k)=(y1,y 2,y i,y k)(6-2)状态个数状态个数p和寄存器长度和寄存器长度k之间必须满足以下关系:之间必须满足以下关系:组合逻辑电路产生激励信号和输
4、出信号:组合逻辑电路产生激励信号和输出信号:)36(2kp)46().1(,).1().1(kynXgrY)56().1(,).1().1(kynXfmZ)66().1().1(kyfmZMoore型 Mealy型 2008.122008.124有限状态机的有限状态机的Moore模型模型 Moore 模型的模型的 输出是且仅是当前状态的函数输出是且仅是当前状态的函数。2008.122008.125有限状态机的有限状态机的Mealy模型模型 Mealy 模型的模型的 输出是当前状态和当前输入的函数输出是当前状态和当前输入的函数。描述任何时序电路,既可以选用描述任何时序电路,既可以选用MooreM
5、oore模型,也可以模型,也可以选用选用MealyMealy模型模型 2008.122008.1266.2同步时序电路的设计同步时序电路的设计 设计流程设计流程 状态化简 简化的状态表 输出函数 Z 状态分配 编码形式的状态表 激励函数 Y 时序电路逻辑图 触发器选型 设计要求 原始状态表 原始状态图(a)手手工工设设计计 (b)使使用用 EDA 工工具具设设计计 设计要求 原始状态表 原始状态图 VHDL 行为描述 提交 Quartus 编译:产生目标电路 模拟:产生模拟波形 器件编程 2008.122008.127例例6.2 输入信号值检测器输入信号值检测器 检检测测器器 checker
6、reset sin clock sout 复位信号复位信号reset=0使检测器进入预期的初始使检测器进入预期的初始 状态;状态;时钟信号时钟信号clock的上升沿检测输入信号的上升沿检测输入信号sin的值,的值,如果如果sin连续连续3次(次(3)被检测为)被检测为1,则则 输出信号输出信号sout=1,否则否则sout=0。模拟波形见后模拟波形见后本例通过手工设计介绍基本概念2008.122008.128模拟波形模拟波形 可把下述模拟波形看作目标电路应实现的功能:可把下述模拟波形看作目标电路应实现的功能:2008.122008.129 reset 状态 输出 sin的取值 检测器的检测器的
7、Moore型状态迁移图型状态迁移图2008.122008.1210检测器的检测器的Moore型状态迁移表型状态迁移表 表表6.2 输入输入 reset sin 当前状态当前状态 次态次态 输出输出 sout 0 X X St0 0 0 St0 1 St0 St1 0 0 St0 1 St1 St2 0 0 St0 1 St2 St3 0 0 St0 1 1 St3 St3 1 2008.122008.1211检测器的检测器的Mealy型状态迁移图型状态迁移图同一个任务(检测器)同一个任务(检测器)可以用可以用MooreMoore模型;模型;也可以用也可以用MealyMealy模型模型对应的状态
8、表留作练习对应的状态表留作练习2008.122008.1212状态分配(编码)状态分配(编码)得到时序电路的最小化状态表之后,应该给每个状态分配一个二得到时序电路的最小化状态表之后,应该给每个状态分配一个二值代码,使该二值代码与状态寄存器的状态相对应。值代码,使该二值代码与状态寄存器的状态相对应。状态分配的要求状态分配的要求:成本成本较低;较低;避免避免险象险象发生。发生。成本成本较低较低 寄存器长度寄存器长度 k 的选择:的选择:如果优先考虑寄存器的成本,则应使寄存器的长度如果优先考虑寄存器的成本,则应使寄存器的长度 k 最短。最短。在在 k 最小最小的前提下进行编码,可能得到一个的前提下进
9、行编码,可能得到一个成本相对较低成本相对较低、但不一定是最低的方案。但不一定是最低的方案。手工设计过于繁琐,不可能做很多方案的比较。手工设计过于繁琐,不可能做很多方案的比较。设状态数为设状态数为 n,若满足以下关系若满足以下关系 则可以达到的则可以达到的 k 最小目的。最小目的。本例本例选择寄存器长度最短的方案,由于选择寄存器长度最短的方案,由于n=4,故,故 k=2。)76(221kkn2008.122008.1213状态编码状态编码 状态编码:状态编码:为避免险象发生,本例采用格雷码编码:为避免险象发生,本例采用格雷码编码:以编码形式表示的状态表以编码形式表示的状态表:输入 sin 现态
10、y2y1 输出 sout 次态 Y2Y1 0 00 1 00 0 01 0 00 1 01 0 11 0 00 1 11 0 10 0 00 1 10 1 10 2008.122008.1214确定激励函数和输出函数确定激励函数和输出函数 选择触发器类型:选择触发器类型:D触发器触发器 由状态表导出激励表由状态表导出激励表:2008.122008.1215确定激励函数和输出函数(续)确定激励函数和输出函数(续)由激励表导出激励函数和输出函数由激励表导出激励函数和输出函数:2008.122008.1216检测器原理图检测器原理图 由激励函数和输出函数导出原理图:由激励函数和输出函数导出原理图:2
11、008.122008.1217用用VHDL和和EDA工具进行设计工具进行设计 根据状态表(表根据状态表(表6.2)写出)写出VHDL代码:代码:ENTITY checker IS -实体声明,用于定义端口 PORT (clock,reset,sin:IN bit;-输入端口 sout:OUT bit );-输出端口 END checker;ARCHITECTURE behav OF checker IS -结构体用于定义电路的行为 TYPE state IS (st_0,st_1,st_2,st_3);-声明一个枚举类型,用于表示状态 BEGIN PROCESS(reset,clock )-进
12、程语句本身是并行语句,进程内只可出现顺序语句 -reset,clock 是该进程的敏感信号 VARIABLE temp:state;-声明一个内部变量 temp,用于保存检测器的状态 BEGIN IF reset=0 THEN -reset 低电平有效,进入预期的初始状态 temp:=st_0;-检测器进入状态 st_0 ELSIF(clockevent AND clock=1)THEN-clock 正跳变时发生状态转换 2008.122008.1218VHDL代码(续)代码(续)2008.122008.1219VHDL代码提交代码提交Quartus 编译编译 模拟模拟 模拟波形图:模拟波形图
13、:波形图与预期相符波形图与预期相符 2008.122008.12206.3状态化简状态化简 任务任务:消除冗余状态消除冗余状态,使状态总数最小或接近最小,使状态总数最小或接近最小,降低降低电路造价电路造价。类型:类型:完全规定的完全规定的有限状态机和有限状态机和不完全规定的不完全规定的有限状态机。有限状态机。状态表中,若次态栏中存在不确定的取值(用状态表中,若次态栏中存在不确定的取值(用表示)或输出栏表示)或输出栏中存在不确定的取值(用中存在不确定的取值(用d表示),则称该有限状态机为不完全规表示),则称该有限状态机为不完全规定的有限状态机;否则,是完全规定的有限状态机。定的有限状态机;否则,
14、是完全规定的有限状态机。完全规定的有限状态机可看作不完全规定的有限状态机的完全规定的有限状态机可看作不完全规定的有限状态机的一种特殊情况一种特殊情况 适合于不完全规定的有限状态机的状态化简算法必然也适合于不完全规定的有限状态机的状态化简算法必然也适合于完全规定的有限状态机适合于完全规定的有限状态机;反之则不然。反之则不然。表表6.6是一个不完全规定有限状态机的实例。是一个不完全规定有限状态机的实例。2008.122008.1221状态化简(续)状态化简(续)不完全规定有限状态机的不完全规定有限状态机的实例实例:表 6.6 不完全规定不完全规定有限状态机的状态表有限状态机的状态表 输 入 sin
15、 现 态 y 次 态 Y 输 出 sout s1 s4 d s2 s5 0 s3 s4 0 s4 s3 d 0 s5 s3 1 s1 s1 d s2 s1 d s3 s2 d s4 s3 d 1 s5 s2 d 2008.122008.1222不完全规定的不完全规定的FSM的状态化简的状态化简定义定义6.1 满足下述条件的满足下述条件的2个状态称为个状态称为相容状态对相容状态对:1.输出一致输出一致:2个状态的输出在有明确规定的地方取值相同。个状态的输出在有明确规定的地方取值相同。2.次态相容次态相容:对于输入信号取值的任一组合,这:对于输入信号取值的任一组合,这2个状态的次态相容。个状态的次
16、态相容。定义定义6.2 若状态集合若状态集合S中任意中任意2个状态对都是相容状态对,则个状态对都是相容状态对,则S是一是一个个相容类相容类,可以,可以合并合并为一个状态。为一个状态。例例 6.3 对表对表6.6所示状态表进行化简:所示状态表进行化简:2008.122008.1223状态化简实例(例状态化简实例(例6.3续)续)寻找相容状态对寻找相容状态对 思路思路:把不相容状态对排除之后,剩余的必然都是:把不相容状态对排除之后,剩余的必然都是相容状态对相容状态对。Step1 创建一个创建一个隐含表隐含表,表示表示状态对的全集合状态对的全集合:把所有状态(把所有状态(s1,s2,s3,s4,s5
17、s1,s2,s3,s4,s5)按序排列)按序排列;水平方向水平方向:自左向右地安排每一个状态但缺少最后一个状态(自左向右地安排每一个状态但缺少最后一个状态(本例缺少本例缺少s5s5););垂直方向垂直方向:自上向下地安排每一个状态但缺少第自上向下地安排每一个状态但缺少第1 1个状态(本例缺少个状态(本例缺少s1 s1)。)。s2 s3 s4 s5 s1 s2 s3 s4 隐含表隐含表:2008.122008.1224状态化简实例(例状态化简实例(例6.3续)续)寻找相容状态对寻找相容状态对 Step2 依据状态表依据状态表查找输出不一致的状态对查找输出不一致的状态对:本例有本例有2个输出不一致
18、的状态对(个输出不一致的状态对(s2,s5)和()和(s3,s5),),对应的方格中填入对应的方格中填入“”,标记其为不相容状态对。,标记其为不相容状态对。s2 s3 s4 s5 s1 s2 s3 s4 2008.122008.1225 s2 s3 s4 s5 s1 s2 s3 s4 状态化简实例(例状态化简实例(例6.3续)续)寻找相容状态对寻找相容状态对 Step3 依据状态表依据状态表查找次态不相容的状态对查找次态不相容的状态对:隐含表中没有标记隐含表中没有标记“”的方格属于可能相容、也可能不相容的状态对。的方格属于可能相容、也可能不相容的状态对。对于没有对于没有“”的方格,若存在某一输
19、入组合使其次态落入带有标记的方格,若存在某一输入组合使其次态落入带有标记“”的方格中,则它属于次态不相容的状态对。在该方格中填入的方格中,则它属于次态不相容的状态对。在该方格中填入“”。Step4 若若step3发现了新的不相容状态对,转发现了新的不相容状态对,转step3 继续查找;否则,隐继续查找;否则,隐含表中没有标记含表中没有标记“”的每一个方格都代表一个相容状态对,转的每一个方格都代表一个相容状态对,转step5。本例(本例(s2,s4)次态不相容!次态不相容!2008.122008.1226状态化简实例(例状态化简实例(例6.3续)续)合并相容类合并相容类Step5 相容状态对之间
20、用一条线相连相容状态对之间用一条线相连,构成,构成相容图相容图。任意两个状态。任意两个状态之间都有连线的状态构成一个之间都有连线的状态构成一个相容类相容类。尽量把规模较大的相容类合并为一个新的状态,使状态总数最少。尽量把规模较大的相容类合并为一个新的状态,使状态总数最少。每个状态必须属于且仅属于一个相容类。每个状态必须属于且仅属于一个相容类。单独一个状态也可以认为是相容类的一个特例。单独一个状态也可以认为是相容类的一个特例。2008.122008.1227状态化简实例(例状态化简实例(例6.3续)续)Step6 闭合性检查:闭合性检查:1.原始状态表(表原始状态表(表6.6)中的每一个状态属于
21、且仅属于一个相容类。)中的每一个状态属于且仅属于一个相容类。2.在输入信号取值的每一种组合的情况下,原始状态表(表在输入信号取值的每一种组合的情况下,原始状态表(表6.6)中的每一个状态的次态都落入一个且仅落入某一个相容类中。中的每一个状态的次态都落入一个且仅落入某一个相容类中。简化的状态表:简化的状态表:表 6.7 简化的状态表 输入 sin 现态y 次态Y 输出 sout A B 0 0 B A 1 A A d 1 B A d 2008.122008.12286.4 同步时序电路中的竞争和险象同步时序电路中的竞争和险象 同步时序电路由寄存器和组合逻辑电路构成,组合逻同步时序电路由寄存器和组
22、合逻辑电路构成,组合逻辑电路中的竞争和险象(见辑电路中的竞争和险象(见3.5节)在这里都会发生;节)在这里都会发生;本节重点探讨本节重点探讨状态变迁序列与险象的关系状态变迁序列与险象的关系。2008.122008.1229例例6.4 一个引发险象的同步时序电路一个引发险象的同步时序电路 计数序列 00 01 10 11 译码器输出序列 st0 st1 st2 st3 2008.122008.1230例例6.4 险象分析险象分析设设 Dff2 和和 Dff1 的现态为的现态为01,当,当clock时,经过少许延迟,将变为时,经过少许延迟,将变为10若若t1=t2=t3=t4=t5=t6=t7=t
23、8 则与门输入端的感受则与门输入端的感受到的状态变迁也是到的状态变迁也是01 10,无险象发生。否则,与门输入端感受到如,无险象发生。否则,与门输入端感受到如下情况:下情况:01 00(短暂)10:这种情况下信号st0处可能发生正尖峰的“毛刺”;01 11(短暂)10:这种情况下信号st3处可能发生正尖峰的“毛刺”防止险象发生的措施:计数序列必须保证相邻防止险象发生的措施:计数序列必须保证相邻2个状态的编码不允许个状态的编码不允许2位位或或2位以上同时发生变化。位以上同时发生变化。“海明距离(海明距离(Hamming distance)”的概念的概念 00 01 10 11 2008.1220
24、08.1231例例6.4 险象分析(续)险象分析(续)定义定义6.3 2个位串中取值不同的位数个位串中取值不同的位数称为位串之间的称为位串之间的海明距离海明距离。例如位串例如位串0110和和0111之间的海明距离为之间的海明距离为1;而位串;而位串0010和和0111之间之间的海明距离为的海明距离为2。为防止险象的发生,可采用为防止险象的发生,可采用格雷码编码格雷码编码(其海明距离为(其海明距离为1)。若采)。若采用格雷码编码,则本例的计数序列为用格雷码编码,则本例的计数序列为:由于由于2个相邻状态的编码的海明距离为个相邻状态的编码的海明距离为1,译码器的输出不会出现非,译码器的输出不会出现非
25、预期的预期的“毛刺毛刺”。2008.122008.1232例例6.4 防止险象发生的措施防止险象发生的措施措施之一:措施之一:计数器采用计数器采用格雷码编码格雷码编码 译码器的与门输入不会有两个译码器的与门输入不会有两个或两个以上信号同时发生变化或两个以上信号同时发生变化 无险象发生。无险象发生。措施之一:措施之一:计数器采用计数器采用1热态位编码热态位编码,不再需要译码器,直接把触发,不再需要译码器,直接把触发器的输出作为整个电路的输出器的输出作为整个电路的输出 无险象发生。无险象发生。00 01 11 10 00 01 10 11 0001 0010 0100 1000(st0)(st1)
26、(st2)(st3)2008.122008.1233在在VHDL描述中指定状态编码(例)描述中指定状态编码(例)ENTITY checker IS -实体声明,用于定义端口 PORT (clock,reset,sin:IN bit;-输入端口 sout:OUT bit );-输出端口 END checker;ARCHITECTURE behav OF checker IS -结构体用于定义电路的行为 constant st_0 :bit_vector(0 TO 1):=00;-声明一个常数 st_0:=00,用于指定状态编码 constant st_1 :bit_vector(0 TO 1):
27、=01;-声明一个常数 st_1:=01,用于指定状态编码 constant st_2 :bit_vector(0 TO 1):=11;-声明一个常数 st_2:=11,用于指定状态编码 constant st_3 :bit_vector(0 TO 1):=10;-声明一个常数 st_3:=10,用于指定状态编码 BEGIN PROCESS(reset,clock )-进程语句本身是并行语句,进程内只可出现顺序语句 -reset,clock 是该进程的敏感信号 VARIABLE temp:bit_vector(0 TO 1);-声明一个内部变量 temp,用于保存检测器的状态 BEGIN -以
28、下省略 END PROCESS;END behav;2008.122008.12346.5算法状态机图(算法状态机图(ASM图)图)有限状态机(有限状态机(FSM)也称作算法状态机()也称作算法状态机(algorithmic state machine,ASM)ASM图和状态图相比,更适合于描述规模较大的同步时序电路。图和状态图相比,更适合于描述规模较大的同步时序电路。ASM图中的元素图中的元素:2008.122008.1235检测器(例检测器(例6.2)的)的Moore型描述型描述 状态图状态图ASM图图2008.122008.1236检测器(例检测器(例6.2)的)的Mealy型描述型描述
29、状态图状态图 st_0 st_2 reset 0 sin 1 0 sin 1 0 sin 1 st_1 sout 0 sout 0 sout 1 sout 0 sout 0 sout 0 条件输出 ASM图图2008.122008.1237 异步清零 6.6解题示例解题示例 例例 6.7 设计一个产生设计一个产生6个节拍个节拍 的的节拍发生器节拍发生器。输入信号:输入信号:异步清零信号异步清零信号reset:reset=0时,强制进入初始状态时,强制进入初始状态st0;时钟信号时钟信号clock:激励节拍发生器发生状态转换。:激励节拍发生器发生状态转换。输出信号:输出信号:Q(0),Q(1),
30、Q(2),Q(3),Q(4),Q(5)依次出现高电平,且高电平依次出现高电平,且高电平的持续期与时钟周期相同。的持续期与时钟周期相同。2008.122008.1238解题示例解题示例 例例 6.7 续续 状态图(状态图(Moore型)型)状态编码(海明距离状态编码(海明距离=1)状状态态名名 st 0 st 1 st 2 st 3 st 4 st 5 编编 码码 000 001 011 111 101 100 2008.122008.1239解题示例解题示例 例例 6.7 续续 以状态编码形式表示的以状态编码形式表示的状态表状态表 2008.122008.1240解题示例解题示例 例例 6.7
31、 续续 状态表状态表 VHDL代码代码 2008.122008.1241解题示例解题示例 例例 6.7 续续 状态表状态表 VHDL代码代码 2008.122008.1242解题示例解题示例 例例 6.7 续续 状态表状态表 VHDL代码代码 WHEN st5=-状态 5 时的状态转换 temp -除了上述 6 个状态外,不会出现其它状态 NULL;-此时什么也不做 END CASE;END IF;END PROCESS;Q=-并行条件赋值语句指定每一种状态下的输出 100000 WHEN temp=st0 ELSE 010000 WHEN temp=st1 ELSE 001000 WHEN
32、temp=st2 ELSE 000100 WHEN temp=st3 ELSE 000010 WHEN temp=st4 ELSE 000001;END behav;2008.122008.1243解题示例解题示例 例例 6.7 续续 提交提交Quartus 模拟波形模拟波形 波形与预期相符波形与预期相符 异步清零 2008.122008.1244 现 态 次 态 输 出 Q(0.5)说 明 000 001 100000 001 011 010000 011 111 001000 111 101 000100 101 100 000010 100 000 000001 010 000 0000
33、01 110 000 000001 万一现态落入 010 或 110,令其次态自动进入预期的状态 000,此即谓自复位功能。解题示例解题示例 例例 6.8 将例将例 6.7 的设计要求做如下修改:的设计要求做如下修改:删除复位信号删除复位信号reset;增加自复位增加自复位功能:功能:无论什么原因(例如初始加电或干扰)使电路进入非指定状态,电路无论什么原因(例如初始加电或干扰)使电路进入非指定状态,电路都有能力自动恢复到正常工作状态。都有能力自动恢复到正常工作状态。建立符合题意的状态表(表建立符合题意的状态表(表6.10):):2008.122008.1245解题示例解题示例 例例 6.8 续
34、续 状态表状态表 VHDL代码代码 ENTITY tallot IS -在实体声明中定义端口 PORT(reset,clock :IN bit;-输入端口 Q:OUT bit_vector(0 TO 5);-输出端口 END tallot;ARCHITECTURE behav OF tallot IS -在结构体中定义电路的行为 CONSTANT st0:bit_vector(0 TO 2):=000;-用常数指定编码 CONSTANT st1:bit_vector(0 TO 2):=001;-用常数指定编码 CONSTANT st2:bit_vector(0 TO 2):=011;-用常数指
35、定编码 CONSTANT st3:bit_vector(0 TO 2):=111;-用常数指定编码 CONSTANT st4:bit_vector(0 TO 2):=101;-用常数指定编码 CONSTANT st5:bit_vector(0 TO 2):=100;-用常数指定编码 SIGNAL temp :bit_vector(0 TO 2);-声明一个内部信号 temp,用于代表状态 与例 6.7 相同 2008.122008.1246解题示例解题示例 例例 6.8 续续 状态表状态表 VHDL代码代码 BEGIN PROCESS(reset,clock)-进程的敏感信号是 reset 和
36、 clock BEGIN IF (reset=0)THEN -reset=0,强制进入初始状态 temp -状态 0 时的状态转换 temp -状态 1 时的状态转换 temp -状态 2 时的状态转换 temp -状态 3 时的状态转换 temp -状态 4 时的状态转换 temp -当现态处于其它状态时,一律进入 st0,temp =st0;-这就是自复位功能 END CASE;END IF;END PROCESS;Q=-并行条件赋值语句指定每一种状态下的输出 100000 WHEN temp=st0 ELSE 010000 WHEN temp=st1 ELSE 001000 WHEN t
37、emp=st2 ELSE 000100 WHEN temp=st3 ELSE 000010 WHEN temp=st4 ELSE 000001;END behav;与例 6.7 不同之处 2008.122008.1248解题示例解题示例 例例 6.8续续 提交提交Quartus 模拟波形模拟波形波形与预期相符波形与预期相符2008.122008.1249解题示例解题示例 例例 6.9 设计一个设计一个 8 位计时器位计时器 Timer:(1)reset:异步清零信号,低电平有效,具有最高的优先级。Reset=0使输出信号ring=0。(2)clock:同步时钟,正跳变触发。(3)start:计
38、时器启动信号。(4)ring:控制铃响的输出信号,高电平有效。l ring=1的持续期为8,超过此持续期后自动归 0。Timer ring clock start reset data_in(7.0)2008.122008.1250计时器计时器Timer的时序关系的时序关系 start=0 时,计时器 开始减计数 reset start start=1 时,计时器 接受来自 data_in的数据 接收数据 减计数 ring=1 ring=1的持续期为 8,超过此持续期后自动归 0。计时器的 值达到零 reset=0 进入初始状态 2008.122008.1251 控制器 减 1 计数器coun
39、ter st0 st1 st2 st3 reset counter输出值 clock ring data_in(0.7)start Timer目标电路的分解目标电路的分解 解:解:2008.122008.1252Timer的的ASM图图 reset 否 是 counter=1?counter data_in st1 st0 ring 0 counter 00000000 是 否 start=1?是 否 start=1?st2 是 否 counter=1?counter 减 1 counter 00001000 st3 ring 1 counter 减 1 接接收收数数据据 ring=1 持持续
40、续期期 减减计计数数 初初始始状状态态 2008.122008.1253Timer的状态表的状态表 输输 入入 reset start 当当前前 状状态态 次次 态态 执执 行行 操操 作作 0 X X st0 ring 0;0 st0 ring 0;counter 00000000;1 st0 st1 0 st2 1 st1 st1 counter data_in;X st2 IF counter=1 THEN st3;ELSE st2;END IF;IF counter=1 THEN counter 00001000;ELSE counter counter 1;END IF;1 X st
41、3 IF counter 1 THEN st3;ELSE st0;END IF;ring 1;IF counter 1 THEN counter counter 1;END IF;说明:counter 代表计数器。2008.122008.1254Timer的的VHDL代码代码 LIBRARY IEEE;-打开IEEE库 USE IEEE.std_logic_1164.ALL;-打开IEEE库中的程序包std_logic_1164 USE IEEE.std_logic_unsigned.ALL;-打开此程序包后,可以对std_logic_vector -类型的对象执行加/减运算 ENTITY t
42、imer IS -ENTITY用于定义端口 PORT(data_in:IN std_logic_vector(7 DOWNTO 0);-输入端口 reset,clock,start :IN std_logic;-输入端口 ring:OUT std_logic );-输出端口 END timer;2008.122008.1255VHDL代码(续)代码(续)2008.122008.1256VHDL代码(续)代码(续)2008.122008.1257例例 6.9 模拟波形模拟波形 VHDL代码提交代码提交Quartus 编译编译 模拟波形模拟波形 波形与预期相符波形与预期相符2008.122008.
43、1258本章小结本章小结 同步时序电路由状态寄存器和组合逻辑电路组成,同步时序电路由状态寄存器和组合逻辑电路组成,状态寄状态寄存器被同一个时钟信号激励。存器被同一个时钟信号激励。用有限状态机的理论设计同步时序电路的用有限状态机的理论设计同步时序电路的基本步骤基本步骤如下:如下:1.建立状态机的原始描述:状态图(或建立状态机的原始描述:状态图(或ASM图)、状态表。图)、状态表。2.状态化简:力求状态总数最少。状态化简:力求状态总数最少。3.状态分配:状态分配一方面影响电路的造价,另一方面也影响险象状态分配:状态分配一方面影响电路的造价,另一方面也影响险象是否发生。是否发生。4.建立以编码形式表
44、示的、简化的状态表。建立以编码形式表示的、简化的状态表。5.建立包含激励函数和输出函数的激励表。建立包含激励函数和输出函数的激励表。6.形成激励函数和输出函数的逻辑表达式,创建时序电路的逻辑图。形成激励函数和输出函数的逻辑表达式,创建时序电路的逻辑图。7.验证设计的正确性。验证设计的正确性。2008.122008.1259本章小结(续)本章小结(续)当电路的规模比较大时,当电路的规模比较大时,手工设计过程过于繁琐手工设计过程过于繁琐;用用EDA工具设计极为方便工具设计极为方便:设计工作的第一步是对目标电路预期功能的描述,后续工作则可设计工作的第一步是对目标电路预期功能的描述,后续工作则可交给交给EDA工具去完成。工具去完成。时序电路中的传播延时将影响电路能否正常工作,本章介时序电路中的传播延时将影响电路能否正常工作,本章介绍的设计技术的绍的设计技术的基本假定基本假定是:电路中所有变化都是在是:电路中所有变化都是在时钟时钟信号的有效边沿触发信号的有效边沿触发。在下一个时钟边沿到达之前,电路中各个信号都必须已经达到稳在下一个时钟边沿到达之前,电路中各个信号都必须已经达到稳定,即定,即时钟周期必须大于电路中最长的传输延迟时钟周期必须大于电路中最长的传输延迟。2008.122008.1260