页数:47页文件大小:531.3 KB来源: EDA技术及数字系统的应用ppt课件
本课件讲授数字系统的设计方法,介绍系统基本结构与层次化模块化技术、自顶向下设计流程、算法流程图与ASM图的建立和相互转换、数据处理单元与控制单元的设计,并给出含1统计电路、串行数字锁、交通信号控制与移位相加乘法器等实例。
《EDA技术及数字系统的应用》第七章封面,主题为数字系统设计及实例。
数字系统设计概述数字系统是对信息进行采集、转换、传输、存储和加工处理的一组相互联系、相互作用的部件所组成的一个有机整体,一般是由若干数字电路和逻辑功能部件组成,并由一个控制部件统一指挥。数字系统和逻辑功能部件(数字单元电路)的区别是看有没有控制部件,凡是有控制部件,并且能按照一定程序进行操作的系统,均被看成是一个数字系统;没有控制部件又不能按照一定程序进行操作的系统只能看成是一个逻辑功能部件或子系统。
数字系统的基本结构
数据处理单元和控制单元是一个数字系统中最基本的两部分,尽管各种数字系统可能具有完全不同的功能和形式,但是都可以用数据处理单元和控制单元所构成数字系统的基本结构来描述。控制单元产生的输出控制信号影响着其它系统控制单元的操作,使本系统与其它系统协调一致地工作。控制单元的外部控制信号也可能是其它系统的输出控制信号。数字系统中就是这样通过数据处理单元和控制单元之间的密切配合、协调工作,成为一个自动实现信息处理功能的有机整体。
数字系统设计的特点
系统的层次结构系统层次结构
电路层次化设计的Y图描述电路级系统级寄存器传输级逻辑门级行为域结构域物理域晶体管掩膜版门电路单元布局系统算法微处理器物理划分硬件模块芯片安排微分方程RTL级平面图逻辑级寄存器
电路的层次化、结构化设计过程可以用Y图来描述,图中三条轴表示三个互不相同的设计域:行为域、结构域和物理域。行为域描述一个特定的系统做些什么,要完成的功能;结构域描述实现某一功能的具体结构以及各个组成部件是怎样连接在一起的;物理域描述结构的物理实现,即怎样实际制造一个满足一定连接关系的结构和功能的芯片。每一个域都可以在不同的抽象层次上进行描述,离中心越远则抽象程度的描述越高。电路设计的总过程就是沿着每个轴向中心逼近的序列描述。从行为到结构、到物理实现的迭代,然后回到更低一级部件的行为。随着设计的进行,迭代的螺旋指向Y图的中心,得到最后的掩膜版设计。这些抽象描述中最高层次为系统级,最低层次为版图级或称物理级。
设计考虑结构描述行为描述设计层次系统功能方框图自然语言描述的性能、指标系统级时序、同步、测试微处理器、存储器、通用集成电路等组成的方框图算法芯片级(IC中也称系统级时序、同步、测试寄存器、ALU、计数器、MUX、ROM等数据流图、有限状态机、状态表、状态图寄存器级(IC中为宏单元)选择适当的基本门逻辑门、触发器布尔方程、卡诺图、Z变换逻辑门级电路性能,延时,噪声晶体管、R、L、C等电压、电流的微分方程电路级几何图形与工艺规则版图级电路设计的层次描述当前ASIC的设计可以说就是硬件的一种描述形式到另一种描述形式的转换过程。由寄存器传输级(RTL)的行为描述转换成下一级(逻辑门级)的结构描述(用逻辑门、触发器),称为逻辑综合;由结构域的描述转换成物理域的描述称为物理综合。这些综合技术是电子设计自动化中的关键技术。除了从系统级的自然语言行为描述到系统级或芯片级的结构描述的转换之外,其它各种描述形式的变换都有了自动综合工具或EDA工具。这些工具为电路设计者提供了很大的帮助,也改变了电子系统的设计方法。
如果把系统中密切相关的组件或构件划分在不同的模块中,使其内部的凝聚度降低,模块之间联系程度提高。这对系统的理解、设计、实现、调试和修改都带来许多困难。因此为了设计一个易于理解和开发的系统结构,应该提高模块相对独立性。模块结构的相对独立性一方面是指模块内各元器件组成的部件或构件之间联系的紧密程度;另方面是指模块之间的联系程度。提高模块内部的紧密程度和降低模块之间的联系,是提高模块相对相对独立性的二个方面。
数字系统设计方法
方框图和定时图
算法流程图算法流程图可以描述整个数字系统对信息的处理过程以及控制单元所提供的控制步骤。是描述数字系统功能和系统工作过程最常用方法之一。它与软件设计中的流程图十分相识。 ; 基本符号(a)工作块(b)判别块(c)条件块举例YN操作C操作A条件?操作BYN条件?某操作或相应输出
算法流程图的建立流程图的建立也就是算法设计过程,它是把系统要实现的复杂运算或操作分解成一系列子运算或操作,并且确定执行这些运算或操作的顺序和规律,为逻辑设计提供依据。
例试设计一个对串行输入信号含1的统计电路。输入序列XEND含1统计电路STZ统计个数含1的统计电路框图YNYNYN开始等待ST=1?X=1?n←n+1Z←0,n←0Z←Z+1n=15?END=1含1的统计电路算法流程图
例某单位有一台备用的柴油交流发电机,该机在市电停电时立即自动发电,在启动后三分钟内测量发电机的转速,如果转速没有达到规定值则报警。在进入正常发电状态时,需要不断测量转速和输出电压,以此调整供油量,保证发电机按规定要求输出交流电。如果转速或输出电压发生异常则报警,并且在三分钟内停机。试设计该发电机的控制电路。发电机控制电路算法流程图YYYYYNNNNN三分钟?停机开始市电停?三分钟?合格?发出启动信号测量转速调整油量报警报警转速电压合格
ASM图ASM图是来描述控制器在不同的时间内应完成的一系列操作,反映了控制条件及控制器状态的转换。这描述方法类似于流程图的形式。 ; ASM图的基本符号01条件判断框(b)(a)状态名二进制码S3011R←0C=1状态框数据单元操作和控制器输出数据单元操作和控制器输出条件框算法流程图只是按照操作所规定的先后顺序排列的步骤描述,并未严格地规定完成各操作所需的时间及操作之间的时间关系。因此必须把算法流程图转换成ASM图(算法状态机图)。
0110S1001F←F+1AS2010S3011BR←0S4100 ; ASM块每个ASM块必定包含一个状态框,可能还有几个同它相连接的判断框和条件框。每个ASM块表示一个时钟周期内系统所处的状态,在该状态下完成块内的若干操作。
ASM图和算法流程图之间有一定的对应关系。算法流程图规定了系统应进行的操作及操作的顺序,ASM图规定了为完成这些操作及操作的顺序所需的时间和控制器发出的输出信号。算法流程图导出ASM图,主要是定义状态,其原则有三条:
例S2S1S010STA←A+1E←1,F←1E←0001A4A3F←0A←0,F←0ASM图1110STA←0F←0A←A+1F←0E←1,F←1E←0001A4A3算法流程图开始
例含1统计电路的结构图ENDn=15Z统计个数CPX输入序列控制器ST启动CPACRCPB计数器A计数器B含1统计电路的ASM图010110S2S1S0STCR=0n=15END=1X=1CPA=S2·CPCPB=S2·X·CP
数据处理单元 ; 数据处理单元的结构CTXZE寄存器组合电路输入数据X和输出数据Z表示通过数据处理单元的数据。控制信号T是控制器发出的命令信号,决定数据处理单元应完成什么操作。输出信号E是由控制信号T形成的,实现寄存器操作的功能选择。状态变量信号C是数据处理单元产生的信号,它反馈给控制器,决定下一个操作步骤。
; 数据处理单元的设计步骤1.确定数据处理单元的逻辑框图算法流程图的形成过程就是数据处理单元结构的建立过程,据算法流程图和结构选择方案,画出数据处理单元的逻辑框图,并由此明确它与控制单元之间必须交换的信息以及这些信息之间的时间关系。2.列出数据处理单元的明细表提出对数据处理单元的全面要求,建立数据处理单元的技术规范——明细表,确定在每一控制信号作用下完成的一组操作。确定处理信息时,要完成哪些信息检验。确定输出信息是什么。根据算法可以建立数据处理单元的明细表,即操作明细表和状态表。操作明细表定义了数据处理单元,状态表定义了控制器。
3.器件选择采用通用集成电路芯片设计数据处理单元时,应注意∶一是易于控制,即器件的控制方式、控制信号以及产生这些控制信号的逻辑应尽可能简单,以简化控制单元的设计;二是力求模块数少,以减少电路体积、功耗,降低成本。选择具体的集成电路器件由设计者的经验和技巧所决定。除了常用的各种SSI、MSI或LSI数字集成电路外,有时还有配置多种辅助电路,如脉冲电路;还会遇到A/D和D/A转换器、集成运算放大器、锁相环以及其它辅助器件。例设计八位串行数字密码锁的数据处理单元。锁串行接收输入数码,当数码的位数和位值与开锁密码相同时,锁被打开,否则锁不开。
串行数字锁结构图MBRESETTRYREADXiADDP比较器M比较器B计数器A8-1选择器控制器数据处理单元
T3010101010101T4T2T1T0A←0TRYREADTRYREADBMA←A+1八位串行数字锁的ASM图T0初始状态T1接收数据状态T2开锁状态T3错误状态T4锁被打开设置位数ADDD0D7MBP=1四位比较器7485P0~3Q0~3Q0~3计数器74161A0A1A28-1MUX74151
控制单元的设计
系统的控制单元本质上就是同步时序电路,因此同步时序电路的设计方法完全适用于控制单元的硬件设计,两者的差别主要表现在两方面;一方面,同步时序电路的设计是依据状态转换图(表),而控制单元的设计是根据算法流程图和ASM图及其他描述形式;另一方面,控制单元的设计是在反复优化算法结构,并且已经完成数据处理单元设计后进行的,一般不需要再状态化简。 ; 控制单元的实现方法根据系统设计要求,建立描述控制器工作过程的算法流程图和ASM图。明确系统的工作状态、判别分支、状态输出和条件输出。然后由硬件描述语言编写(状态机)的程序来设计控制器。
NNYS4S3S2S1YS0CR=0ST?Z1=1Z3=1Z4=1Z2=1K?Z5=1ASM图LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_1ISPORT(clk,cr:INSTD_LOGIC;ST,K:INSTD_LOGIC;Z1,Z2,Z3,Z4,Z5:OUTSTD_LOGIC);ENDcontrol_1;ARCHITECTUREoneOFcontrol_1ISTYPEsbIS(s0,s1,s2,s3,s4);SIGNALss:sb;BEGINPROCESS(cr,clk)VARIABLEy1,y2,y3,y4,y5:STD_LOGIC;BEGINy1:='0';y2:='0';y3:='0';y4:='0';y5:='0';IFcr='0'THENss<=s0;ELSIFclk'EVENTANDclk='1'THENCASEssIS--用CASE语句和IF语句WHENs0=>--来实现状态转移IFST='1'THENss<=s1;ENDIF;WHENs1=>y1:='1';ss<=s2;WHENs2=>y3:='1';ss<=s3;WHENs3=>y4:='1';ss<=s4;WHENs4=>y2:='1';IFK='1'THENss<=s2;y5:='1';ELSEss<=s0;ENDIF;WHENOTHERS=>ss<=s0;ENDcase;ENDIF;Z1<=y1;Z2<=y2;Z3<=y3;Z4<=y4;Z5<=y5;ENDPROCESS;ENDone;例根据八位串行数字锁的ASM图。用VHDL语言描述的源文件:LIBRARYIEEE;、USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcontrol_2ISPORT(clk,clrn:INSTD_LOGIC;st,try,read:INSTD_LOGIC;M,B:INSTD_LOGIC;Z1,Z2:OUTSTD_LOGIC;A:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDcontrol_2;ARCHITECTUREoneOFcontrol_2ISTYPEssIS(T0,T1,T2,T3,T4);SIGNALstate:ss;BEGINPROCESS(clrn,clk)VARIABLEcont:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFclrn='0'THENstate<=T0;cont:="0000";ELSIFclk'EVENTANDclk='1'THENCASEstateIS--来实现状态转移WHENT0=>cont:="0000";Z1<='0';Z2<='0';IFst='1'THENstate<=T1;ENDIF;WHENT1=>IFtry='1'THENstate<=T3;ELSIFb='0'THENstate<=T3;ELSIFread='1'THENstate<=T1;cont:=cont+1;ELSIFM='0'THENstate<=T1;ELSEstate<=T2;ENDIF;WHENT2=>IFread='1'THENstate<=T3;ELSIFtry='0'THENstate<=T2;ELSEstate<=T4;ENDIF;WHENT3=>state<=T0;Z2<='1';WHENT4=>state<=T0;Z1<='1';WHENOTHERS=>state<=T0;ENDCASE;ENDIF;A<=cont;ENDPROCESS;ENDone;本页为竞赛抢答器电路实例页,源文件仅提取到标题,电路结构以图片形式呈现,建议对照原课件图片补充本页要点说明。
本页为数字钟设计实例页,源文件仅列出彩灯声响显示、扫描显示译码、调分信号与调时信号等模块名称,建议对照原课件图片补充本页要点说明。
; 交通信号的控制系统clkresetCaCbC1Z1C2Z2C3Z3主道通行T1定时器1支道通行T2定时器2公共停车T3定时器3控制器A方向信号B方向信号RaYaGaRbYbGb交通信号控制系统的结构图Z1、Z2、Z3为定时器的工作使能信号,启动定时器计数;
S3S2S1S0YNNYYNYNNNYYRa=Yb=Z3=1A禁止B停车C3=1Ga=Rb=Z1=1A通行B禁止Ya=Rb=Z3=1A停车B禁止Ra=Gb=Z2=1A禁止B通行C1=1C3=1C2=1Cb=1Ca=1交通信号控制系统的算法流程图
本页为交通信号控制系统的顶层原理图,源文件仅提取到标题,原理图以图片形式呈现,建议对照原课件图片补充本页要点说明。
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_jtISPORT(clk,reset:INSTD_LOGIC;ca,cb:INSTD_LOGIC;c1,c2,c3:INSTD_LOGIC;z1,z2,z3:OUTSTD_LOGIC;Ga,Ya,Ra:OUTSTD_LOGIC;Gb,Yb,Rb:OUTSTD_LOGIC);ENDcontrol_jt;ARCHITECTUREbehaveOFcontrol_jtISTYPEssIS(s0,s1,s2,s3);SIGNALstate:ss;BEGINPROCESS(clk)BEGINIFreset='1'THENstate<=s0;ELSIF(clk'EVENTANDclk='1')THENCASEstateIS交通信号控制系统控制器模块(control_jt)WHENs0=>IF(w1='1'andca='1')THENstate<=s1;ENDIF;WHENs1=>IFw2='1'THENstate<=s2;ENDIF;WHENs2=>IF(w3='1'andcb='1')THENstate<=s3;ENDIF;WHENs3=>IFw2='1'THENstate<=s0;ENDIF;ENDCASE;ENDIF;ENDPROCESS;z1<='1'WHENstate=s0ELSE'0';z3<='1'WHENstate=s1ORstate=s3ELSE'0';z2<='1'WHENstate=s2ELSE'0';Ga<='1'WHENstate=s0ELSE'0';Ya<='1'WHENstate=s1ELSE'0';Ra<='1'WHENstate=s2ORstate=s3ELSE'0';Gb<='1'WHENstate=s2ELSE'0';Yb<='1'WHENstate=s3ELSE'0';Rb<='1'WHENstate=s0ORstate=s1ELSE'0';ENDbehave;; 移位相加8位硬件乘法器硬件乘法器的乘法原理是通过逐项移位相加的方法来实现。下面通过具体的两个二进制数值的乘法运算过程即多次加法和移位来进行说明。例如两个3位二进制数分别为1101和1001进行乘法:1101被乘数:13(十进制)×1001乘数:9(十进制)11010000部分积000011011110101乘积:117(十进制)先观察乘数的每一位,从最低位开始,若最低位是1,则被乘数被复制到下面,否则复制为全0,复制下来的数值较前一个数值左移一位。最后,将复制的数值相加,它们的和就是乘积。两个n位二进制数相乘的结果最多可以有2n位的二进制数。
为了实现硬件乘法器,根据上面乘法的计算过程可以得出三点:①只对两个二进制数进行相加运算,并用寄存器不断地累加部分积;②将累加的部分积左移(复制的被乘数不移动);③乘数的对应位若为0时,对累加的部分积不产生影响。根据硬件乘法器的设计思想,画出8位二进制乘法器的ASM图。其中d为被乘数输入,b为乘数输入,ST为启动信号,A[15..0]为累加结果数据输出,输出Z为二进制乘法器结束指示,当Z输出信号有上跳脉冲时,A[15..0]输出端口为乘积。当ST为1时乘法器运算开始,累加寄存器A清零。在S1状态下,对乘数最低位b0进行检测,若为1,将被乘数加到A中的部分积上;如果b0为0,系统不操作,直接进入到S2状态。在S2状态中进行累加寄存器A和乘数b的右移一位,并且判断乘数的位数是否已运算结束。若乘法运算结束,在S3状态下输出乘积结果。八位二进制乘法器的ASM图n=0d[7..0]被乘数b[7..0]乘数n位数n← n-1b0A←A+dA右移STA[15..0]←0Z=1输出100011S0S1S2S3
移位相加8位硬件乘法器的VHDL描述:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmulti_lpmISGENERIC(WIDTHd:INTEGER:=8;--设置被乘数位数参数WIDTHb:INTEGER:=8);--设置乘数位数参数PORT(clk,clrn,st:INSTD_LOGIC;d:INSTD_LOGIC_VECTOR(WIDTHd-1DOWNTO0);--被乘数b:INSTD_LOGIC_VECTOR(WIDTHb-1DOWNTO0);--乘数A:OUTSTD_LOGIC_VECTOR(WIDTHd+WIDTHb-1DOWNTO0);--乘积z:OUTSTD_LOGIC);--运算结束指示ENDmulti_lpm;ARCHITECTUREoneOFmulti_lpmISTYPEssIS(s0,s1,s2,s3);--定义状态机SIGNALstate:ss:=s0;--定义状态变量SIGNALn:INTEGERRANGEWIDTHbDOWNTO0;--乘数位数SIGNALq:STD_LOGIC_VECTOR(WIDTHd+WIDTHbDOWNTO0);--累加寄存器SIGNALt:STD_LOGIC_VECTOR(WIDTHb-1DOWNTO0);--乘数BEGINPROCESS(clk,clrn)--此进程描述状态转移BEGINIFclrn='0'THENstate<=s0;ELSIF(clk'EVENTANDclk='1')THEN--用CASE语句和IF语句CASEstateIS--来实现状态转移WHENs0=>IFst='1'THENstate<=s1;ENDIF;WHENs1=>state<=s2;WHENs2=>IFn=0THENstate<=s3;ELSEstate<=s1;ENDIF;WHENs3=>state<=s0;WHENOTHERS=>state<=s0;ENDCASE;ENDIF;ENDPROCESS;PROCESS(clk)--此进程描述寄存器操作VARIABLEcont:STD_LOGIC_VECTOR(WIDTHdDOWNTO0);BEGINIF(clk'EVENTANDclk='1')THENCASEstateISWHENs0=>n<=WIDTHb;t<=b;z<='0';q<=(OTHERS=>'0');--定义初始值cont(WIDTHdDOWNTO0):='0'&d(WIDTHd-1DOWNTO0);--增加被乘数位数1位WHENs1=>n<=n-1;IFt(0)='1'THENq(WIDTHd+WIDTHbDOWNTOWIDTHb)<=q(WIDTHd+WIDTHbDOWNTOWIDTHb)+cont(WIDTHdDOWNTO0);ENDIF;WHENs2=>t(WIDTHb-2DOWNTO0)<=t(WIDTHb-1DOWNTO1);t(WIDTHb-1)<='0';q(WIDTHd+WIDTHb-1DOWNTO0)<=q(WIDTHd+WIDTHbDOWNTO1);q(WIDTHd+WIDTHb)<='0';WHENs3=>z<='1';q(WIDTHd+WIDTHbDOWNTO1)<=q(WIDTHd+WIDTHb-1DOWNTO0);A<=q(WIDTHd+WIDTHb-1DOWNTO0);--输出乘积ENDCASE;ENDIF;ENDPROCESS;ENDone;8位二进制乘法器的仿真波形此硬件乘法器采用参数化的VHDL描述,由两进程的状态机来实现,一个进程是描述状态转移,另一个进程是描述寄存器操作。累加寄存器q的位数为WIDTHd(被乘数位数)+WIDTHb(乘数位数)+1,其中q的高位段(WIDTHd+1)进行数的累加,然后向q的低位进行移位(右移),形成部分积。当计数器n减到0时,乘法过程结束。在寄存器操作进程中,由于使用的是时钟同步工作方式,其操作都是在下一个状态完成,因此在乘法结束进入S3状态下,需要对累加寄存器q进行左移一位,并将寄存器q中的乘积结果输入到乘积输出端A。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}