三段式状态机课件_第1页
三段式状态机课件_第2页
三段式状态机课件_第3页
三段式状态机课件_第4页
三段式状态机课件_第5页
已阅读5页,还剩187页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章数字系统设计基础数字系统概述数字系统的设计方法

数字系统的设计准则

数字系统的设计步骤数字系统设计举例状态机的设计第13章数字系统设计基础数字系统概述数字系统的设1什么是数字系统?数字系统是指交互式的、以离散形式表示的,具有存储、传输、信息处理能力的逻辑子系统的集合。13.1数字系统概述什么是数字系统?数字系统是指交互式的、以离散213.1.1数字系统的优点

(1)工作稳定,抗干扰能力强。(2)精确度高。(3)系统可靠性高。(4)便于系统的模块化。(5)便于大规模集成,易于实现小型化。(6)可实现片上系统(SOC)。(7)可实现嵌入式系统。13.1.1数字系统的优点(1)工作稳定,抗干313.1.2数字系统的基本构成

一个完整的数字系统通常可分为五个部分:输入电路、输出电路、数据处理器、控制器和时钟电路。图13-2数字系统结构框图13.1.2数字系统的基本构成4

●输入/输出电路是整个数字系统对外信号交流的接口,是完成将物理量转化为数字量或将数字量转化为物理量的功能部件。

●数据处理器主要完成数据的采集、存储、运算和传输等功能。

●控制器是执行数字系统算法的核心,具有记忆功能,一般为时序系统。控制器负责规定算法的步骤,在每一个计算步骤给数据处理器发出命令信号,同时接收来自数字处理器的状态变量,确定下一个计算步骤,以确保算法按正确的次序实现。

●时钟电路是用来产生系统工作的同步时钟信号,使整个系统在时钟信号的作用下,一步一步地按顺序完成各种操作。

●输入/输出电路是整个数字系统对外信号交流的接口,是完5图13-3冯.诺依曼计算机框架图图13-3冯.诺依曼计算机框架图613.2数字系统的设计方法数字系统设计有多种方法,传统的方法有试凑设计法、MCU设计法等。传统的设计方法都是采用自下而上的设计方法,即首先确定可用的元件,然后根据这些器件进行逻辑设计,完成各模块后,进行连接形成系统,最后经调试、测量观察整个系统是否达到规定的性能指标。13.2.1传统的设计方法13.2数字系统的设计方法数字系统设计有多种方法,7系统测试与性能分析完整系统功能模块基本元器件

缺点:1、设计过程依赖现有的通用元器件、手工及经验;2、设计后期的仿真和调试3、基于原理图的设计、可移植性差;4、设计周期长、灵活性差、效率低传统电路设计方法:自下而上(Bottom-Up)的设计方法系统测试与性能分析完整系统功能模块基本元器件缺点:传8基于EDA技术的现代数字系统的设计一般采用自顶向下的方法。该方法首先根据系统的总体功能要求,进行系统级设计;然后按照一定的标准将整个系统划分成若干个子系统;接着将各个子系统划分为若干功能模块,针对各模块进行逻辑电路级设计。13.2.2基于EDA的现代数字系统设计方法基于EDA技术的现代数字系统的设计一般采用自顶向下的9

●自顶向下设计方法是一种模块化设计方法。对设计的描述从上到下逐步由粗略到详细,符合常规的逻辑思维习惯;

优点

●针对具体的设计,实施自顶向下的设计方法的形式会有所不同,但均需遵循以下两条原则:逐层分解功能和分层次进行设计。同时,应在各个设计层次上,考虑相应的仿真验证问题。

●适合多个设计者同时进行设计。随着技术的不断进步,许多设计由一个设计者已无法完成,由多个设计者分工协作完成一项设计的情况越来越多;●自顶向下设计方法是一种模块化设计方法。对设计的描10表13-1传统设计方法和EDA设计方法的比较表13-1传统设计方法和EDA设计方法的比较1113.3数字系统的设计准则1.分割准则2.系统的可观测性4.同步和异步电路5.最优化设计3.面积和速度的平衡与互换原则6.理想设计准则13.3数字系统的设计准则1.分割准则2.系统的可观测性4121.分割准则

●自顶向下的设计方法需要对系统功能进行分割,然后用逻辑语言进行描述。分割过程中,若分割过粗,则不易用逻辑语言表达;分割过细,则带来不必要的重复和繁琐。因此,分割的粗细需要根据具体的设计和设计工具情况而定。

2.系统的可观测性●在系统设计中,应该同时考虑功能检查和性能的测试,即系统可测性的问题。在设计系统的同时设计观测电路,指示系统内部的工作状态。

1.分割准则●自顶向下的设计方法需要对系统功能进行分134.同步和异步电路●异步电路会造成较大延时和逻辑竞争,容易引起系统的不稳定,而同步电路则是按照统一的时钟工作,稳定性好。因此,在设计时应尽可能采用同步电路进行设计,避免使用异步电路。在必须使用异步电路时,应采取措施来避免竞争和增加稳定性。3.面积和速度的平衡与互换原则

●面积是指一个设计消耗的逻辑资源数量,一般可以用触发器和组合逻辑单元来度量。速度指设计在芯片上稳定运行时能够达到的最高频率。面积和速度是一对矛盾的需求,在设计中应力求平衡,在一定条件下可相互转换。4.同步和异步电路●异步电路会造成较大延时和逻辑竞争,146.理想设计准则

●一个理想的设计,应该具有以下基本特征:设计总体上流畅,无拖泥带水的感觉;资源分配、I/O分配合理,没有任何设计上和性能上的瓶颈;系统结构协调;具有良好的可观测性;易于修改和移植;器件的特点能得到充分的发挥。5.最优化设计●由于可编程器件的逻辑资源、连接资源和I/O资源有限,器件的速度和性能也是有限的,用器件设计系统的过程相当于求最优解的过程,因此,需要给定两个约束条件:边界条件和最优化目标。

6.理想设计准则●一个理想的设计,应该具有以下基本特征1513.4数字系统的设计步骤图13-4数字系统设计流程图13.4数字系统的设计步骤图13-4数字系统设计流程图161.系统需求分析

●系统需求分析是数字系统设计的首要任务。设计者在读完技术任务书后应明确以下内容:确定系统的基本功能;确定输入和输出信号;确定各功能模块之间的相互关系;确定系统具体指标。2.确定总体方案●数字系统总体方案将直接影响整个数字系统的质量与性能,总体方案需要综合考虑以下几个因素:系统功能要求、系统使用要求和系统性能价格比。1.系统需求分析●系统需求分析是数字系统设计的首要任174.系统和子系统逻辑描述●采用比较规范的形式来描述系统的逻辑功能。对系统的逻辑描述可先采用较粗略的方框图,再将方框图逐步细化为详细逻辑流程图,最后将详细逻辑流程图用电路原理图或硬件描述语言描述出来。3.建立系统及子系统结构框图

●把系统从逻辑上划分为数据子系统和控制子系统两部分,画出整个系统的结构框图。然后将数据子系统分解为多个基本的逻辑功能模块。最后画出由基本功能模块组成的数据子系统结构框图,数据子系统中所需的各种控制信号将由控制子系统产生。4.系统和子系统逻辑描述●采用比较规范的形式来描述系统186.系统的物理实现

●通过EDA软件仿真,如果设计的数字系统满足总体要求,就可以用芯片实现数字系统。首先实现各个逻辑功能电路,调试正确后,再将它们互连成子系统,最后进行数字系统总体调试。5.系统仿真与验证●在电路设计完成以后必须验证设计是否正确。数字电路设计的EDA软件都具有仿真功能,先通过系统仿真,当系统仿真结果正确后再进行实际电路的测试。6.系统的物理实现●通过EDA软件仿真,如果设计的数19状态机是一种具有指定数目的状态的概念机,它在某个指定的时刻仅处于一个状态,状态的改变是对输入事件的响应。状态机的基本要素有三个:状态、输入条件和输出。什么是状态机?13.5状态机的设计状态机是一种具有指定数目的状态的概念机,它在某个20状态机的优势:

(1)状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点;(2)状态机的结构相对简单,设计方案相对固定;(3)状态机容易构成性能良好的同步时序逻辑模块;(4)与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的好处;(5)在高速运算和控制方面,状态机更有其巨大的优势。(6)高可靠性。状态机的优势:(1)状态机克服了纯硬件数字系统顺序方式控制21应用实例1

图13-5自动售货机控制系统方框图自动售货机设定逻辑变量:设投币信号A、B为输入逻辑变量,投入一枚一元硬币时用A=1表示,未投入时A=0。投入一枚五角硬币用B=1表示,未投入时B=0;设矿泉水和找钱为两个输出变量,分别用Z和Y表示,给出矿泉水时Z=1,不给时Z=0,找回一枚五角硬币时Y=1,不找时Y=0。

应用实例122图13-6自动售货机状态转换图图13-6自动售货机状态转换图23libraryieee;useieee.std_logic_1164.all;entityshj_ctrlis port(a,b:instd_logic; clk:instd_logic; z,y:outstd_logic);endshj_ctrl;architecturebehaofshj_ctrlistypestatesis(s0,s1,s2);signalstate:states;signalx:std_logic_vector(1downto0);beginx<=a&b;process(clk,x,state)begin ifrising_edge(clk)then casestateis whens0=> z<='0';y<='0'; if(x="01")then state<=s1; elsif(x="10")thenlibraryieee;24 state<=s2; else state<=s0; endif; whens1=>z<='0';y<='0'; if(x="01")then state<=s2; elsif(x="10")then state<=s0;z<='1';y<='0'; else state<=s1; endif; whens2=>z<='0';y<='0'; if(x="01")then state<=s0;z<='1';y<='0'; elsif(x="10")then state<=s0;z<='1';y<='1'; else state<=s2; endif; endcase; endif;endprocess;endbeha; state<=s2;2513.5.1状态机的基本构成及描述方式1.状态机的基本要素状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。输入:指状态机中进入每个状态的条件。输出:指在某一个状态时特定发生的事件。

13.5.1状态机的基本构成及描述方式1.状态机的262.状态机的基本结构状态寄存器的功能是记忆状态机的内部状态;次态逻辑的功能是确定状态机的次态;输出逻辑的功能是确定状态机的输出。

图13-7状态机的基本结构框图2.状态机的基本结构图13-7状态机的基本结构框图273.状态机的基本描述方式状态转移图状态转移表HDL语言描述3.状态机的基本描述方式状态转移图状态转移表HDL语言2813.5.2状态机的分类根据状态机的状态数是否为有限个:有限状态机(FSM)无限状态机(ISM)根据输出与现态以及输入的关系:Moore型状态机Mealy型状态机

13.5.2状态机的分类根据状态机的状态数是否为有限个:2913.5.3状态机的状态编码1.顺序二进制编码表13-2顺序二进制编码13.5.3状态机的状态编码1.顺序二进制编码表130

2.格雷码编码

表13-3格雷码编码2.格雷码编码表13-3格雷码编码31

3.One-Hot编码表13-4One-Hot编码3.One-Hot编码表13-4One-Hot编32三段式状态机课件3313.5.4状态机的VHDL设计1.状态机的VHDL设计步骤分析控制器设计指标,建立系统算法模型图,即状态转移图;分析被控对象的时序状态,确定控制器状态机的各个状态及输入、输出条件;应用VHDL语言完成状态机的描述。13.5.4状态机的VHDL设计1.状态机的VHDL设计342.状态机的VHDL描述方法单进程(一段式)FSM描述方法是将整个状态机的三个模块合并起来,写到1个进程里面,在该进程中即描述状态转移,又描述状态的输入和输出;两进程(二段式)FSM描述方法是用2个进程来描述状态机,其中当前状态寄存器用一个同步时序进程来描述,输出逻辑和次态逻辑合并起来,用另一个组合逻辑进程来描述;三进程(三段式)FSM描述方法是将状态机的三个模块分别用3个进程来描述,一个同步时序进程描述状态寄存器,一个组合逻辑进程描述次态逻辑,最后输出逻辑单独用一个进程来描述。2.状态机的VHDL描述方法两进程(二段式)FSM描述方法35表13-5三种FSM描述方法比较表13-5三种FSM描述方法比较363.状态机的VHDL设计相关语句

TYPE数据类型名IS数据类型定义OF基本数据类型;TYPE数据类型名IS数据类型定义;typem_stateis(st0,st1,st2,st3,st4,st5);(1)状态定义语句signalcurrent_state:m_state;--定义现态signalnext_state:m_state;

--定义次态(2)状态变量定义语句3.状态机的VHDL设计相关语句TYPE数据类型名37①描述状态寄存器的进程:process(reset,clk)beginifreset=‘1’then current_state<=[初始状态];elsifclk’eventandclk=‘1’then current_state<=next_state;endif;endprocess;(3)三个模块进程描述语句①描述状态寄存器的进程:(3)三个模块进程描述语句38②描述次态逻辑的进程:process(current_state,其他输入信号)beginnext_state<=current_state;casecurrent_stateis whenstate1=> … next_state<=某个状态; … whenstate2=> …endcase;endprocess;

②描述次态逻辑的进程:39③描述输出逻辑的进程:process(current_state,其他输入信号)beginoutput<=缺省值casecurrent_stateis whenstate1=> output<=xxx; …endcase;endprocess;

③描述输出逻辑的进程:40(1)一段式状态机libraryieee;useieee.std_logic_1164.all;entitystatmachis port( clk :in bit; input :in bit; reset :in bit; output:outbit);endstatmach;architectureaofstatmachistypestate_typeis(s0,s1);signalstate:state_type;begin

4.VHDL状态机实例(1)一段式状态机4.VHDL状态机实例41process(clk,reset)begin ifreset='1'then state<=s0; elsif(clk'eventandclk='1')then casestateis whens0=> state<=s1; output<='0'; whens1=> ifinput='1'then state<=s0; else state<=s1; endif; output<='1'; endcase; endif;endprocess;enda;process(clk,reset)42图13-10状态转换图图13-10状态转换图43--Moore型状态机的二段式描述:

libraryieee;useieee.std_logic_1164.all;entitystatmachisport(clock,s1,s2,reset:instd_logic; r1,y1,g1,r2,y2,g2:outstd_logic);end;architectureexemplarofstatmachistypestate_tis(st0,st1,st2,st3,st4,st5,st6,st7);signalstate,nxstate:state_t;beginprocess(reset,clock)beginif(reset='1')then state<=st0;elsifclock'eventandclock='1'then state<=nxstate;endif;endprocess;(2)二段式状态机--Moore型状态机的二段式描述:(2)二段式状态机44process(state,s1,s2)beginr1<='0';y1<='0';g1<='0';r2<='0';y2<='0';g2<='0'; casestateis whenst0=> g1<='1'; r2<='1'; ifs2=s1then nxstate<=st1; elsif(s1='0'ands2='1')then nxstate<=st2; else nxstate<=st0; endif; whenst1=> g1<='1'; r2<='1'; nxstate<=st2; process(state,s1,s2)45 whenst2=> g1<='1'; r2<='1'; nxstate<=st3; whenst3=> y1<='1'; r2<='1'; nxstate<=st4; whenst4=> r1<='1'; g2<='1'; if(s1='0'ands2='0')then nxstate<=st5; elsif(s1='1'ands2='0')then nxstate<=st6; else nxstate<=st4; endif; whenst5=> r1<='1'; g2<='1'; nxstate<=st6; whenst2=>46 whenst6=> r1<='1'; g2<='1'; nxstate<=st7; whenst7=> r1<='1'; y2<='1'; nxstate<=st0; endcase;endprocess;endexemplar; whenst6=>47图13-11状态转换图图13-11状态转换图48--Mealy型状态机的二段式描述:

libraryieee;useieee.std_logic_1164.all;entitystmch1isport(clk,in1,rst:instd_logic;out1:outstd_logic);endstmch1;architecturebehaveofstmch1istypestate_valuesis(sx,s0,s1);signalstate,next_state:state_values;begin--Mealy型状态机的二段式描述:49process(clk,rst)beginifrst='1'thenstate<=s0;elsifrising_edge(clk)thenstate<=next_state;endif;endprocess;process(state,in1)beginout1<='0';next_state<=sx;casestateiswhens0=>ifin1='0'thenout1<='1';next_state<=s1;elseprocess(clk,rst)50out1<='0';next_state<=s0;endif;whens1=>ifin1='0'thenout1<='0';next_state<=s0;elseout1<='1';next_state<=s1;endif;whensx=>next_state<=sx;endcase;endprocess;endbehave;out1<='051图13-12状态转换图图13-12状态转换图52libraryieee;useieee.std_logic_1164.all;entitymooreis port(rst:instd_logic; clock:instd_logic; x:instd_logic; z:outstd_logic);endmoore;architecturebehaviorofmooreistypestate_typeis(s0,s1,s2,s3);signalcurrent_state,next_state:state_type;begin(3)三段式状态机libraryieee;(3)三段式状态机53synch:process--状态寄存器的进程beginwaituntilclock'eventandclock='1';ifrst='1'then current_state<=s1;else current_state<=next_state;endif;endprocess;state_trans:process(current_state,x)--次态逻辑进程beginnext_state<=current_state;casecurrent_stateis whens0=> ifx='0'then next_state<=s0; else next_state<=s2; endif;synch:process--状态寄存器的进54 whens1=> ifx='0'then next_state<=s0; else next_state<=s2; endif; whens2=> ifx='0'then next_state<=s2; else next_state<=s3; endif; whens3=> ifx='0'then next_state<=s3; else next_state<=s1; endif;endcase;endprocess; whens1=>55out:process(current_state,x)--输出逻辑进程begin z<='0'; casecurrent_stateis whens0=> z<='0'; whens1=> z<='1'; whens2=> z<='1'; whens3=> z<='0'; endcase;endprocess;endbehavior;out:process(current_state,x)56图13-13状态转换图图13-13状态转换图57数字秒表的要求及工作原理要求:用VHDL语言设计数字秒表;计时单位:1秒;(即每秒计时1次)计时范围:60秒;显示方式:使用PLD实验板上的8个LED进行显示;用逻辑电路控制8个LED灯,左边4个代表秒表计数的十位,右边4个代表秒表计数的个位,在脉冲信号CP的作用下,间接显示秒表的BCD数值;数字秒表的要求及工作原理要求:用VHDL语言设计数字秒表;58LED灯表示数字秒表的状态示意图:………………………………1秒2秒9秒10秒19秒………………………………20秒59秒………………………………上图给出了数字秒表(60进制计数器)的效果图;灯亮代表逻辑1,灯灭代表逻辑0,即得到秒表的转移图。0秒LED灯表示数字秒表的状态示意图:………………1591、分频器设计(用VHDL语言描述)CP由实验板上的10MHz有源晶振产生(长方形的“铁块”);从PLD器件的专用时钟引脚Pin12输入到器件内部(在QuartusII下进行引脚锁定),为计数器提供时钟信号;由于实验板上所带的连续脉冲CP的频率为10MHz;因此,需要为秒表的计数器设计分频器,将10MHz的连续脉冲分频,得到秒脉冲;再由秒脉冲作为秒表计数器的计数频率。本质上就是用VHDL语言设计模值为10000000的计数器。实验任务

1、分频器设计(用VHDL语言描述)CP由实验板上的10MH602、计数器设计(用VHDL语言描述)直接的60进制计数器所对应的是二进制数值,不便于显示;因此,可将秒表看做由个位为10进制的计数器和十位为6进制的计数器进行级联构成,这种计数器也称为BCD计数器;采用VHDL分别描述10进制计数器和6进制计数器,当计数值为59时,若再来一个时钟脉冲,计数器回到初值0重新计数。也可以直接描述60进制计数器,然后除10,得到的商为十位,余数为个位。2、计数器设计(用VHDL语言描述)直接的60进制计数器所对61采用双进程描述的带分频60进制计数器采用双进程描述的带分频60进制计数器62采用双进程描述的带分频60进制计数器(续)采用双进程描述的带分频60进制计数器(续)63设计要求如下:(1)总线结构:数据总线位数8位、地址总线3位;(2)存储器:存储容量5×8位;(3)操作控制器:实现指令操作码所需的操作控制信号;(4)运算器:一个累加器,实现加法操作;(5)指令系统规模:3条指令。—8位模型计算机VHDL的设计13.6数字系统设计举例13.6.1设计任务及方案构思设计要求如下:—8位模型计算机VHDL的设计13.6数字64图13-1模型计算机结构框图图13-1模型计算机结构框图65图13-14模型计算机系统顶层原理图PC:程序计数器模块MAR:地址寄存器ROM:存储器DR:数据寄存器控制信号共有9个,具体是:程序计数器PC的计数控制信号PCI;地址寄存器MAR的寄存命令信号ARI;数据寄存器DR的寄存命令信号DRI;数据寄存器DR的输出控制信号DRO;累加器A的输人命令信号AI;累加器A的输出控制信号AO;ALU的加法运算控制信号SUMI;ALU的输出控制信号SUMO;指令寄存器IR的寄存命令信号IRI。IR:指令寄存器+译码器COUNTER:节拍发生器CTRL:控制器图13-14模型计算机系统顶层原理图PC:程序计数器模块661.算术逻辑单元(ALU)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityaluisport(ac,dr:instd_logic_vector(7downto0);--累加器ac,数据寄存器dr sumi:std_logic;--加法运算控制信号sumi sumo:std_logic;--输出控制信号sumo alu_out:outstd_logic_vector(7downto0));--运算结果endalu;architectureaofaluissignalalu_temp:std_logic_vector(7downto0);begin alu_temp<=ac+drwhensumi='0'; alu_out<=alu_tempwhensumo='0'else"ZZZZZZZZ";enda;13.6.3次级模块电路的分析及VHDL实现1.算术逻辑单元(ALU)的VHDL源程序13.6.367图13-15算术逻辑单元时序仿真波形图图13-15算术逻辑单元时序仿真波形图682.累加器模块(ACC)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entityaccisport(data_in:instd_logic_vector(7downto0);--数据输入 ai:instd_logic;--累加器a的输入命令信号ai ao:instd_logic;--累加器a的输出控制信号ao clk:instd_logic;--时钟频率输入 data_out:outstd_logic_vector(7downto0));--累加器数据输出endacc;architectureaofaccissignalregq:std_logic_vector(7downto0);beginprocess(clk,ai,ao)begin if(clk'eventandclk='1')then if(ai='0')then regq<=data_in; endif; endif;endprocess;data_out<=regqwhenao='0'else"ZZZZZZZZ";enda;

2.累加器模块(ACC)的VHDL源程序69图13-16累加器模块时序仿真波形图图13-16累加器模块时序仿真波形图703.节拍发生器(COUNTER)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitycounterisport(clk,clr:instd_logic;--系统时钟和异步清零控制信号 t0,t1,t2,t3,t4,t5,t6,t7:outstd_logic);--节拍脉冲输出endcounter;architectureaofcounterissignaltemp:std_logic_vector(7downto0);begin t0<=temp(0);t1<=temp(1);t2<=temp(2);t3<=temp(3); t4<=temp(4);t5<=temp(5);t6<=temp(6);t7<=temp(7);3.节拍发生器(COUNTER)的VHDL源程序71process(clk,clr)begin if(clr='0')then temp(0)<='1'; temp(1)<='0'; temp(2)<='0'; temp(3)<='0'; temp(4)<='0'; temp(5)<='0'; temp(6)<='0'; temp(7)<='0'; elsif(clk'eventandclk='1')then temp(0)<=temp(7);temp(1)<=temp(0); temp(2)<=temp(1);temp(3)<=temp(2); temp(4)<=temp(3);temp(5)<=temp(4); temp(6)<=temp(5);temp(7)<=temp(6); endif;endprocess;enda;process(clk,clr)72图13-18节拍发生器模块时序仿真波形图图13-18节拍发生器模块时序仿真波形图734.指令寄存器模块(IR)和指令译码器的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entityirisport(data_in:instd_logic_vector(7downto0);--数据输入 iri:instd_logic;--指令寄存器ir的寄存命令信号 clk:instd_logic;--系统时钟频率 ld,add,halt:outstd_logic);--译码输出的3条指令信号endir;architectureaofirissignalregq:std_logic_vector(7downto0);beginprocess(clk,iri)--指令寄存器进程begin if(clk'eventandclk='1')then

4.指令寄存器模块(IR)和指令译码器的VHDL源程序74 if(iri='0')then regq<=data_in; endif; endif;endprocess;process(regq)--指令译码器进程begin caseregqis when"00111111"=>ld<='1';add<='0';halt<='0'; when"01111111"=>ld<='0';add<='1';halt<='0'; when"10111111"=>ld<='0';add<='0';halt<='1'; whenothers=>ld<='0';add<='0';halt<='0'; endcase;endprocess;enda; if(iri='0')then75图13-19指令寄存器和译码器模块时序仿真波形图图13-19指令寄存器和译码器模块时序仿真波形图765.时钟产生器(CLK_SOURCE)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entityclk_sourceisport(clk_50m:instd_logic;--50MHz晶振时钟源输入 clk:outstd_logic);--系统时钟频率输出(1Hz)endentity;architectureaofclk_sourceissignalclk_temp:std_logic;beginclk<=clk_temp;process(clk_50m,clk_temp)5.时钟产生器(CLK_SOURCE)的VHDL源程序77variablecounter:integerrange0to24999999;beginif(clk_50m'eventandclk_50m='1')then if(counter=24999999)then counter:=0; clk_temp<=notclk_temp; else counter:=counter+1; endif;endif;endprocess;enda;variablecounter:integerrange78图13-20时钟产生器模块时序仿真波形图图13-20时钟产生器模块时序仿真波形图796.程序计数器模块(PC)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitypcisport( pci,clk,clr:instd_logic;--计数控制信号、时钟频率和清零标志 pcout:outstd_logic_vector(2downto0)--指令地址输出 );endpc;architectureaofpcissignalqout:std_logic_vector(2downto0);begin6.程序计数器模块(PC)的VHDL源程序80process(clk,clr,pci)begin if(clr='0')then qout<="000"; elsif(clk'eventandclk='1')then if(pci='1')then qout<=qout+1; endif; endif;endprocess;pcout<=qout;enda;

process(clk,clr,pci)81图13-21程序计数器模块时序仿真波形图图13-21程序计数器模块时序仿真波形图827.地址寄存器(MAR)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entitymarisport(addr_in:instd_logic_vector(2downto0);--地址输入 ari:instd_logic;--寄存命令信号 clk:instd_logic;--系统时钟频率addr_out:outstd_logic_vector(2downto0));--地址输出endmar;architectureaofmarisbeginprocess(clk,ari)begin if(clk'eventandclk='1')then if(ari='0')then addr_out<=addr_in; endif; endif;endprocess;enda;

7.地址寄存器(MAR)的VHDL源程序83图13-22地址寄存器模块时序仿真波形图图13-22地址寄存器模块时序仿真波形图848.存储器(ROM)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entityromisport(addr:inintegerrange0to4; dout:outstd_logic_vector(7downto0));endrom;architectureaofromistypevector_arrayisarray(0to4)ofstd_logic_vector(7downto0);constantmemory:vector_array:=("00111111","00000100","01111111","00000101","10111111");begin dout<=memory(addr);enda;8.存储器(ROM)的VHDL源程序85图13-23存储器模块时序仿真波形图图13-23存储器模块时序仿真波形图869.数据寄存器(DR)的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entitydrisport(data_in:instd_logic_vector(7downto0);--数据输入 dri:instd_logic;--寄存命令信号 dro:instd_logic;--输出控制信号 clk:instd_logic;--系统时钟频率 data_out:outstd_logic_vector(7downto0));--数据输出enddr;architectureaofdrissignalregq:std_logic_vector(7downto0);begin9.数据寄存器(DR)的VHDL源程序87process(clk,dri,dro)begin if(clk'eventandclk='1')then if(dri='1')then regq<=data_in; endif; endif;endprocess;data_out<=regqwhendro='1'else"ZZZZZZZZ";enda;process(clk,dri,dro)88图13-24数据寄存器模块时序仿真波形图图13-24数据寄存器模块时序仿真波形图8910.显示译码电路的VHDL源程序

libraryieee;useieee.std_logic_1164.all;entitydel7isport(alt_out:instd_logic_vector(7downto0);led7:outstd_logic_vector(6downto0));endentity;architectureoneofdel7isbeginprocess(alt_out)begin10.显示译码电路的VHDL源程序90casealt_outis when"00000000"=>led7<="1111110"; --0 when"00000001"=>led7<="0110000"; --1 when"00000010"=>led7<="1101101"; --2 when"00000011"=>led7<="1111001"; --3 when"00000100"=>led7<="0110011"; --4 when"00000101"=>led7<="1011011"; --5 when"00000110"=>led7<="1011111"; --6 when"00000111"=>led7<="1110000"; --7 when"00001000"=>led7<="1111111"; --8 when"00001001"=>led7<="1111011"; --9 whenothers=>null;endcase;endprocess;end;casealt_outis91图13-25显示译码模块时序仿真波形图图13-25显示译码模块时序仿真波形图9213.6.4控制器(CTRL)的VHDL设计模型计算机中控制信号共有9个,具体是:程序计数器PC的计数控制信号PCI;地址寄存器MAR的寄存命令信号ARI;数据寄存器DR的寄存命令信号DRI;数据寄存器DR的输出控制信号DRO;累加器A的输人命令信号AI;累加器A的输出控制信号AO;ALU的加法运算控制信号SUMI;ALU的输出控制信号SUMO;指令寄存器IR的寄存命令信号IRI。13.6.4控制器(CTRL)的VHDL设计模型计算机中控93libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityctrlisport( ld,add,halt:instd_logic;--来自指令译码器的3条指令 clk:instd_logic;--系统时钟频率 t0,tl,t2,t3,t4,t5,t6,t7:instd_logic;--节拍脉冲 pci,ari,dri,dro,ai,ao,sumi,sumo,iri:outstd_logic--控制信号输出);endentity;architectureaofctrlisbeginprocess(ld,add,halt,t0,tl,t2,t3,t4,t5,t6,t7)beginlibraryieee;94if(clk'eventandclk='1')thenif(halt='1')thenpci<='0';sumo<='0';else ari<=not(t0or(t3andld)or(t3andadd)); iri<=nott2; ai<=not((t6andld)or(t6andadd)); dri<=tlor(t4andld)or(t4andadd); pci<=t2or(t5andld)or(t5andadd); sumi<=not(t5andadd); sumo<=not(t6andadd); ao<=not(t7andadd);dro<=(t6andadd)or(t7andadd);endif;endif;endprocess;enda;

if(clk'eventandclk='1')then95图13-26控制器模块时序仿真波形图图13-26控制器模块时序仿真波形图96第13章数字系统设计基础数字系统概述数字系统的设计方法

数字系统的设计准则

数字系统的设计步骤数字系统设计举例状态机的设计第13章数字系统设计基础数字系统概述数字系统的设97什么是数字系统?数字系统是指交互式的、以离散形式表示的,具有存储、传输、信息处理能力的逻辑子系统的集合。13.1数字系统概述什么是数字系统?数字系统是指交互式的、以离散9813.1.1数字系统的优点

(1)工作稳定,抗干扰能力强。(2)精确度高。(3)系统可靠性高。(4)便于系统的模块化。(5)便于大规模集成,易于实现小型化。(6)可实现片上系统(SOC)。(7)可实现嵌入式系统。13.1.1数字系统的优点(1)工作稳定,抗干9913.1.2数字系统的基本构成

一个完整的数字系统通常可分为五个部分:输入电路、输出电路、数据处理器、控制器和时钟电路。图13-2数字系统结构框图13.1.2数字系统的基本构成100

●输入/输出电路是整个数字系统对外信号交流的接口,是完成将物理量转化为数字量或将数字量转化为物理量的功能部件。

●数据处理器主要完成数据的采集、存储、运算和传输等功能。

●控制器是执行数字系统算法的核心,具有记忆功能,一般为时序系统。控制器负责规定算法的步骤,在每一个计算步骤给数据处理器发出命令信号,同时接收来自数字处理器的状态变量,确定下一个计算步骤,以确保算法按正确的次序实现。

●时钟电路是用来产生系统工作的同步时钟信号,使整个系统在时钟信号的作用下,一步一步地按顺序完成各种操作。

●输入/输出电路是整个数字系统对外信号交流的接口,是完101图13-3冯.诺依曼计算机框架图图13-3冯.诺依曼计算机框架图10213.2数字系统的设计方法数字系统设计有多种方法,传统的方法有试凑设计法、MCU设计法等。传统的设计方法都是采用自下而上的设计方法,即首先确定可用的元件,然后根据这些器件进行逻辑设计,完成各模块后,进行连接形成系统,最后经调试、测量观察整个系统是否达到规定的性能指标。13.2.1传统的设计方法13.2数字系统的设计方法数字系统设计有多种方法,103系统测试与性能分析完整系统功能模块基本元器件

缺点:1、设计过程依赖现有的通用元器件、手工及经验;2、设计后期的仿真和调试3、基于原理图的设计、可移植性差;4、设计周期长、灵活性差、效率低传统电路设计方法:自下而上(Bottom-Up)的设计方法系统测试与性能分析完整系统功能模块基本元器件缺点:传104基于EDA技术的现代数字系统的设计一般采用自顶向下的方法。该方法首先根据系统的总体功能要求,进行系统级设计;然后按照一定的标准将整个系统划分成若干个子系统;接着将各个子系统划分为若干功能模块,针对各模块进行逻辑电路级设计。13.2.2基于EDA的现代数字系统设计方法基于EDA技术的现代数字系统的设计一般采用自顶向下的105

●自顶向下设计方法是一种模块化设计方法。对设计的描述从上到下逐步由粗略到详细,符合常规的逻辑思维习惯;

优点

●针对具体的设计,实施自顶向下的设计方法的形式会有所不同,但均需遵循以下两条原则:逐层分解功能和分层次进行设计。同时,应在各个设计层次上,考虑相应的仿真验证问题。

●适合多个设计者同时进行设计。随着技术的不断进步,许多设计由一个设计者已无法完成,由多个设计者分工协作完成一项设计的情况越来越多;●自顶向下设计方法是一种模块化设计方法。对设计的描106表13-1传统设计方法和EDA设计方法的比较表13-1传统设计方法和EDA设计方法的比较10713.3数字系统的设计准则1.分割准则2.系统的可观测性4.同步和异步电路5.最优化设计3.面积和速度的平衡与互换原则6.理想设计准则13.3数字系统的设计准则1.分割准则2.系统的可观测性41081.分割准则

●自顶向下的设计方法需要对系统功能进行分割,然后用逻辑语言进行描述。分割过程中,若分割过粗,则不易用逻辑语言表达;分割过细,则带来不必要的重复和繁琐。因此,分割的粗细需要根据具体的设计和设计工具情况而定。

2.系统的可观测性●在系统设计中,应该同时考虑功能检查和性能的测试,即系统可测性的问题。在设计系统的同时设计观测电路,指示系统内部的工作状态。

1.分割准则●自顶向下的设计方法需要对系统功能进行分1094.同步和异步电路●异步电路会造成较大延时和逻辑竞争,容易引起系统的不稳定,而同步电路则是按照统一的时钟工作,稳定性好。因此,在设计时应尽可能采用同步电路进行设计,避免使用异步电路。在必须使用异步电路时,应采取措施来避免竞争和增加稳定性。3.面积和速度的平衡与互换原则

●面积是指一个设计消耗的逻辑资源数量,一般可以用触发器和组合逻辑单元来度量。速度指设计在芯片上稳定运行时能够达到的最高频率。面积和速度是一对矛盾的需求,在设计中应力求平衡,在一定条件下可相互转换。4.同步和异步电路●异步电路会造成较大延时和逻辑竞争,1106.理想设计准则

●一个理想的设计,应该具有以下基本特征:设计总体上流畅,无拖泥带水的感觉;资源分配、I/O分配合理,没有任何设计上和性能上的瓶颈;系统结构协调;具有良好的可观测性;易于修改和移植;器件的特点能得到充分的发挥。5.最优化设计●由于可编程器件的逻辑资源、连接资源和I/O资源有限,器件的速度和性能也是有限的,用器件设计系统的过程相当于求最优解的过程,因此,需要给定两个约束条件:边界条件和最优化目标。

6.理想设计准则●一个理想的设计,应该具有以下基本特征11113.4数字系统的设计步骤图13-4数字系统设计流程图13.4数字系统的设计步骤图13-4数字系统设计流程图1121.系统需求分析

●系统需求分析是数字系统设计的首要任务。设计者在读完技术任务书后应明确以下内容:确定系统的基本功能;确定输入和输出信号;确定各功能模块之间的相互关系;确定系统具体指标。2.确定总体方案●数字系统总体方案将直接影响整个数字系统的质量与性能,总体方案需要综合考虑以下几个因素:系统功能要求、系统使用要求和系统性能价格比。1.系统需求分析●系统需求分析是数字系统设计的首要任1134.系统和子系统逻辑描述●采用比较规范的形式来描述系统的逻辑功能。对系统的逻辑描述可先采用较粗略的方框图,再将方框图逐步细化为详细逻辑流程图,最后将详细逻辑流程图用电路原理图或硬件描述语言描述出来。3.建立系统及子系统结构框图

●把系统从逻辑上划分为数据子系统和控制子系统两部分,画出整个系统的结构框图。然后将数据子系统分解为多个基本的逻辑功能模块。最后画出由基本功能模块组成的数据子系统结构框图,数据子系统中所需的各种控制信号将由控制子系统产生。4.系统和子系统逻辑描述●采用比较规范的形式来描述系统1146.系统的物理实现

●通过EDA软件仿真,如果设计的数字系统满足总体要求,就可以用芯片实现数字系统。首先实现各个逻辑功能电路,调试正确后,再将它们互连成子系统,最后进行数字系统总体调试。5.系统仿真与验证●在电路设计完成以后必须验证设计是否正确。数字电路设计的EDA软件都具有仿真功能,先通过系统仿真,当系统仿真结果正确后再进行实际电路的测试。6.系统的物理实现●通过EDA软件仿真,如果设计的数115状态机是一种具有指定数目的状态的概念机,它在某个指定的时刻仅处于一个状态,状态的改变是对输入事件的响应。状态机的基本要素有三个:状态、输入条件和输出。什么是状态机?13.5状态机的设计状态机是一种具有指定数目的状态的概念机,它在某个116状态机的优势:

(1)状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点;(2)状态机的结构相对简单,设计方案相对固定;(3)状态机容易构成性能良好的同步时序逻辑模块;(4)与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的好处;(5)在高速运算和控制方面,状态机更有其巨大的优势。(6)高可靠性。状态机的优势:(1)状态机克服了纯硬件数字系统顺序方式控制117应用实例1

图13-5自动售货机控制系统方框图自动售货机设定逻辑变量:设投币信号A、B为输入逻辑变量,投入一枚一元硬币时用A=1表示,未投入时A=0。投入一枚五角硬币用B=1表示,未投入时B=0;设矿泉水和找钱为两个输出变量,分别用Z和Y表示,给出矿泉水时Z=1,不给时Z=0,找回一枚五角硬币时Y=1,不找时Y=0。

应用实例1118图13-6自动售货机状态转换图图13-6自动售货机状态转换图119libraryieee;useieee.std_logic_1164.all;entityshj_ctrlis port(a,b:instd_logic; clk:instd_logic; z,y:outstd_logic);endshj_ctrl;architecturebehaofshj_ctrlistypestatesis(s0,s1,s2);signalstate:states;signalx:std_logic_vector(1downto0);beginx<=a&b;process(clk,x,state)begin ifrising_edge(clk)then casestateis whens0=> z<='0';y<='0'; if(x="01")then state<=s1; elsif(x="10")thenlibraryieee;120 state<=s2; else state<=s0; endif;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论