首页计算机计算机工程EDA技术及数字系统的应用 07 第七章_数字系统设计及实例.pptx

07 第七章_数字系统设计及实例.pptx

页数:47页文件大小:531.3 KB来源: EDA技术及数字系统的应用ppt课件

本课件讲授数字系统的设计方法,介绍系统基本结构与层次化模块化技术、自顶向下设计流程、算法流程图与ASM图的建立和相互转换、数据处理单元与控制单元的设计,并给出含1统计电路、串行数字锁、交通信号控制与移位相加乘法器等实例。

第七章数字系统设计及实例章节封面,标示本章涵盖数字系统结构、ASM图与典型设计实例等内容
第七章学习目标页,列出数字系统基本结构、层次模块化、自顶向下设计、ASM图与硬件乘法器等要求
现代数字系统设计目录页,列出设计方法、算法流程图与ASM图、数据处理单元、控制单元与设计实例
查看本课件的文字版(共 47 页,供检索与复制)

第1页:数字系统设计及实例章节封面

《EDA技术及数字系统的应用》第七章封面,主题为数字系统设计及实例。

第2页:数字系统设计学习目标

  • 了解数字系统的基本结构;
  • 理解系统的层次结构化和模块化技术;
  • 掌握数字系统的自顶向下的设计方法;
  • 掌握算法状态机图(ASM)的描述和设计;
  • 理解FPGA设计中的资源优化和速度优化;
  • 掌握移位相加硬件乘法器设计;
  • 掌握十字路口交通信号的控制系统的设计;
  • 掌握多功能函数信号发生器的设计。学习目标和要求

第3页:现代数字系统设计目录

  • 数字系统设计方法
  • 算法流程图及ASM图
  • 数据处理单元
  • 控制单元的设计
  • 数字系统设计实例现代数字系统设计
  • 数字系统设计概述

第4页:数字系统设计概述

数字系统设计概述数字系统是对信息进行采集、转换、传输、存储和加工处理的一组相互联系、相互作用的部件所组成的一个有机整体,一般是由若干数字电路和逻辑功能部件组成,并由一个控制部件统一指挥。数字系统和逻辑功能部件(数字单元电路)的区别是看有没有控制部件,凡是有控制部件,并且能按照一定程序进行操作的系统,均被看成是一个数字系统;没有控制部件又不能按照一定程序进行操作的系统只能看成是一个逻辑功能部件或子系统。

第5页:数字系统的基本结构

数字系统的基本结构

  • 数据处理单元是用来实现信息传送和加工处理的;
  • 控制单元是产生控制信号序列的。基本数字系统结构输出信息(数据)输出控制信号控制序列信号状态变量输入信息(数据)外部控制信号数据流控制流数据处理单元控制单元

第6页:数据处理单元与控制单元

数据处理单元和控制单元是一个数字系统中最基本的两部分,尽管各种数字系统可能具有完全不同的功能和形式,但是都可以用数据处理单元和控制单元所构成数字系统的基本结构来描述。控制单元产生的输出控制信号影响着其它系统控制单元的操作,使本系统与其它系统协调一致地工作。控制单元的外部控制信号也可能是其它系统的输出控制信号。数字系统中就是这样通过数据处理单元和控制单元之间的密切配合、协调工作,成为一个自动实现信息处理功能的有机整体。

第7页:数字系统设计的特点

数字系统设计的特点

  • 系统是分层次的系统是复杂研究对象的总称,是分层次的。系统是由若干互相依赖、相互作用完成特定功能的有机整体。控制系统呈现的是一种树状的结构,常见的层次结构分解形式为:
  • 功能垂直分解:系统的各层次之间是垂直联系,上一级的意志决定下一级的行为,下一级行为的效果影响着上一级的决策。
  • 功能水平分解:是将总体的目标分派给子系统来完成,是功能的分解、目标的分解。

第8页:系统的层次结构

系统的层次结构系统层次结构

  • 设计过程分为四个层次:性能级、功能级、结构级和物理级。
  • 将性能级的说明映射为功能级的设计过程称为系统设计;将功能级的描述转换为结构(逻辑)的过程称为逻辑设计;
  • 将逻辑结构转化为物理级(电路)上的实现称为物理设计。系统设计逻辑设计物理设计性能级功能级结构级物理级

第9页:电路层次化设计的Y图

电路层次化设计的Y图描述电路级系统级寄存器传输级逻辑门级行为域结构域物理域晶体管掩膜版门电路单元布局系统算法微处理器物理划分硬件模块芯片安排微分方程RTL级平面图逻辑级寄存器

第10页:行为域、结构域与物理域

电路的层次化、结构化设计过程可以用Y图来描述,图中三条轴表示三个互不相同的设计域:行为域、结构域和物理域。行为域描述一个特定的系统做些什么,要完成的功能;结构域描述实现某一功能的具体结构以及各个组成部件是怎样连接在一起的;物理域描述结构的物理实现,即怎样实际制造一个满足一定连接关系的结构和功能的芯片。每一个域都可以在不同的抽象层次上进行描述,离中心越远则抽象程度的描述越高。电路设计的总过程就是沿着每个轴向中心逼近的序列描述。从行为到结构、到物理实现的迭代,然后回到更低一级部件的行为。随着设计的进行,迭代的螺旋指向Y图的中心,得到最后的掩膜版设计。这些抽象描述中最高层次为系统级,最低层次为版图级或称物理级。

第11页:设计层次与描述方式对照

设计考虑结构描述行为描述设计层次系统功能方框图自然语言描述的性能、指标系统级时序、同步、测试微处理器、存储器、通用集成电路等组成的方框图算法芯片级(IC中也称系统级时序、同步、测试寄存器、ALU、计数器、MUX、ROM等数据流图、有限状态机、状态表、状态图寄存器级(IC中为宏单元)选择适当的基本门逻辑门、触发器布尔方程、卡诺图、Z变换逻辑门级电路性能,延时,噪声晶体管、R、L、C等电压、电流的微分方程电路级几何图形与工艺规则版图级电路设计的层次描述当前ASIC的设计可以说就是硬件的一种描述形式到另一种描述形式的转换过程。由寄存器传输级(RTL)的行为描述转换成下一级(逻辑门级)的结构描述(用逻辑门、触发器),称为逻辑综合;由结构域的描述转换成物理域的描述称为物理综合。这些综合技术是电子设计自动化中的关键技术。除了从系统级的自然语言行为描述到系统级或芯片级的结构描述的转换之外,其它各种描述形式的变换都有了自动综合工具或EDA工具。这些工具为电路设计者提供了很大的帮助,也改变了电子系统的设计方法。

第12页:结构决定系统的品质

  • 结构决定系统的品质在控制系统中,由于结构的不同,控制品质就会有很大的差异。一个结构合理的系统可望通过参数的调整获得最好的效果;一个不合理的系统结构即使精心调整,往往还是达不到预定的效果。
  • 系统的结构和功能是系统的两个方面
  • 结构是系统与要素、系统与系统的内在联系,是静止的。
  • 功能是系统与外部环境的外在联系,是动态的。

第13页:系统设计中的模块化技术

  • 系统设计中的模块化技术模块化技术就是将系统总的功能分解成若干个子功能,通过仔细定义和描述的子系统来实现相应的子功能。子系统又可以分解为若干模块或子模块,随着分解的进行,使抽象的功能定义和描述向具体的实现提供更多的细节,从而保证系统总体结构的正确。对系统分解时应从以下几方面考虑:
  • 如何将系统划分为一组相对独立又相互联系的模块;
  • 模块之间有哪些数据流和控制流信息;
  • 如何有规则地控制各模块交互作用。

第14页:提高模块的相对独立性

如果把系统中密切相关的组件或构件划分在不同的模块中,使其内部的凝聚度降低,模块之间联系程度提高。这对系统的理解、设计、实现、调试和修改都带来许多困难。因此为了设计一个易于理解和开发的系统结构,应该提高模块相对独立性。模块结构的相对独立性一方面是指模块内各元器件组成的部件或构件之间联系的紧密程度;另方面是指模块之间的联系程度。提高模块内部的紧密程度和降低模块之间的联系,是提高模块相对相对独立性的二个方面。

第15页:模块结构的描述方法

  • 模块结构框图:以框图的形式表示系统由哪些模块(或子系统)组成以及模块(或子系统)之间的相互关系,定义模块的输入输出信息和作用。
  • 模块功能说明:采用自然语言或专用语言,以算法形式描述模块的输入输出信号和模块的功能、作用及限制。描述系统模块结构的主要方法

第16页:数字系统设计方法

数字系统设计方法

  • 试凑设计法是用试探的方法把系统的功能分成若干个相对独立的功能模块,选择合适的功能部件拼接组合起来、构成一个完整的数字系统。主要是凭借设计者对逻辑设计的熟练、技巧和经验来确定系统结构方案,划分模块,选择器件,以电路结构图的形式拼接模块。
  • 自顶向下的设计方法采用系统层次结构,将系统的设计分成几个层次进行描述。性能级描述(算法)、功能级描述(结构框图)和电路级描述(电路图和硬件描述语言)。是一种由抽象的定义到具体的实现,由高层次到低层次的转换,逐步求精的设计方法。

第17页:方框图和定时图

方框图和定时图

  • 方框图可以详细描述数字系统的总体结构,并作为进一步设计的基础。不涉及过多的技术细节,它具有直观易懂;系统结构层次化和清晰度高;易于方案比较,以达到系统总体优化等优点。并且指出各子系统或模块之间数据流或控制流的信息通道和信息的传输方向。
  • 定时图(时序图)是用来定时地描述系统各模块之间、模块内部各功能部件之间以及部件内各门电路或触发器之间输入信号、输出信号和控制信号的对应时序关系及特征。

第18页:算法流程图

算法流程图算法流程图可以描述整个数字系统对信息的处理过程以及控制单元所提供的控制步骤。是描述数字系统功能和系统工作过程最常用方法之一。它与软件设计中的流程图十分相识。 ; 基本符号(a)工作块(b)判别块(c)条件块举例YN操作C操作A条件?操作BYN条件?某操作或相应输出

第19页:算法流程图的建立

算法流程图的建立流程图的建立也就是算法设计过程,它是把系统要实现的复杂运算或操作分解成一系列子运算或操作,并且确定执行这些运算或操作的顺序和规律,为逻辑设计提供依据。

  • 包含若干子运算或操作,实现数据或信息的存储、传输和处理;
  • 具有相应的控制序列,控制各子运算或操作的执行顺序和方向。算法流程图的内容:

第20页:含1统计电路设计

例试设计一个对串行输入信号含1的统计电路。输入序列XEND含1统计电路STZ统计个数含1的统计电路框图YNYNYN开始等待ST=1?X=1?n←n+1Z←0,n←0Z←Z+1n=15?END=1含1的统计电路算法流程图

第21页:发电机控制电路设计

例某单位有一台备用的柴油交流发电机,该机在市电停电时立即自动发电,在启动后三分钟内测量发电机的转速,如果转速没有达到规定值则报警。在进入正常发电状态时,需要不断测量转速和输出电压,以此调整供油量,保证发电机按规定要求输出交流电。如果转速或输出电压发生异常则报警,并且在三分钟内停机。试设计该发电机的控制电路。发电机控制电路算法流程图YYYYYNNNNN三分钟?停机开始市电停?三分钟?合格?发出启动信号测量转速调整油量报警报警转速电压合格

第22页:ASM图

ASM图ASM图是来描述控制器在不同的时间内应完成的一系列操作,反映了控制条件及控制器状态的转换。这描述方法类似于流程图的形式。 ; ASM图的基本符号01条件判断框(b)(a)状态名二进制码S3011R←0C=1状态框数据单元操作和控制器输出数据单元操作和控制器输出条件框算法流程图只是按照操作所规定的先后顺序排列的步骤描述,并未严格地规定完成各操作所需的时间及操作之间的时间关系。因此必须把算法流程图转换成ASM图(算法状态机图)。

第23页:ASM块

0110S1001F←F+1AS2010S3011BR←0S4100 ; ASM块每个ASM块必定包含一个状态框,可能还有几个同它相连接的判断框和条件框。每个ASM块表示一个时钟周期内系统所处的状态,在该状态下完成块内的若干操作。

第24页:算法流程图导出ASM图的原则

ASM图和算法流程图之间有一定的对应关系。算法流程图规定了系统应进行的操作及操作的顺序,ASM图规定了为完成这些操作及操作的顺序所需的时间和控制器发出的输出信号。算法流程图导出ASM图,主要是定义状态,其原则有三条:

  • 在算法起点定义一个初始状态;
  • 必须用状态来分开不能同时实现的操作;
  • 判断框中的条件如果受到前状态操作的影响,应在它们之间安排一个状态。
  • 由算法流程图导出ASM图

第25页:算法流程图导出ASM图举例

例S2S1S010STA←A+1E←1,F←1E←0001A4A3F←0A←0,F←0ASM图1110STA←0F←0A←A+1F←0E←1,F←1E←0001A4A3算法流程图开始

第26页:含1统计电路结构与ASM图

例含1统计电路的结构图ENDn=15Z统计个数CPX输入序列控制器ST启动CPACRCPB计数器A计数器B含1统计电路的ASM图010110S2S1S0STCR=0n=15END=1X=1CPA=S2·CPCPB=S2·X·CP

第27页:数据处理单元

数据处理单元 ; 数据处理单元的结构CTXZE寄存器组合电路输入数据X和输出数据Z表示通过数据处理单元的数据。控制信号T是控制器发出的命令信号,决定数据处理单元应完成什么操作。输出信号E是由控制信号T形成的,实现寄存器操作的功能选择。状态变量信号C是数据处理单元产生的信号,它反馈给控制器,决定下一个操作步骤。

第28页:数据处理单元的设计步骤

; 数据处理单元的设计步骤1.确定数据处理单元的逻辑框图算法流程图的形成过程就是数据处理单元结构的建立过程,据算法流程图和结构选择方案,画出数据处理单元的逻辑框图,并由此明确它与控制单元之间必须交换的信息以及这些信息之间的时间关系。2.列出数据处理单元的明细表提出对数据处理单元的全面要求,建立数据处理单元的技术规范——明细表,确定在每一控制信号作用下完成的一组操作。确定处理信息时,要完成哪些信息检验。确定输出信息是什么。根据算法可以建立数据处理单元的明细表,即操作明细表和状态表。操作明细表定义了数据处理单元,状态表定义了控制器。

第29页:器件选择

3.器件选择采用通用集成电路芯片设计数据处理单元时,应注意∶一是易于控制,即器件的控制方式、控制信号以及产生这些控制信号的逻辑应尽可能简单,以简化控制单元的设计;二是力求模块数少,以减少电路体积、功耗,降低成本。选择具体的集成电路器件由设计者的经验和技巧所决定。除了常用的各种SSI、MSI或LSI数字集成电路外,有时还有配置多种辅助电路,如脉冲电路;还会遇到A/D和D/A转换器、集成运算放大器、锁相环以及其它辅助器件。例设计八位串行数字密码锁的数据处理单元。锁串行接收输入数码,当数码的位数和位值与开锁密码相同时,锁被打开,否则锁不开。

第30页:串行数字锁结构图

串行数字锁结构图MBRESETTRYREADXiADDP比较器M比较器B计数器A8-1选择器控制器数据处理单元

  • 计数器A∶记录输入数据的次数;
  • 位值比较器B∶比较输入数据的值(P),若与对应位开锁密码的值(Di)相同,则比较器B=1,否则B=0;
  • 位数比较器M∶比较输入数据的次数和设置的参考数,若相同则M=1,否则M=0;
  • 数据选择器8–1MUX∶八选一数据选择器输入端(D0–D7)设置为开锁密码。

第31页:八位串行数字锁的ASM图

T3010101010101T4T2T1T0A←0TRYREADTRYREADBMA←A+1八位串行数字锁的ASM图T0初始状态T1接收数据状态T2开锁状态T3错误状态T4锁被打开设置位数ADDD0D7MBP=1四位比较器7485P0~3Q0~3Q0~3计数器74161A0A1A28-1MUX74151

第32页:控制单元的设计

控制单元的设计

  • 控制方式:集中控制、分散控制和集散控制。
  • 控制器结构时钟信号CP控制信号T输出信号Z状态变量C(来自处理器)外部控制信号存贮器组合逻辑电路控制器模型结构

第33页:控制单元与同步时序电路

系统的控制单元本质上就是同步时序电路,因此同步时序电路的设计方法完全适用于控制单元的硬件设计,两者的差别主要表现在两方面;一方面,同步时序电路的设计是依据状态转换图(表),而控制单元的设计是根据算法流程图和ASM图及其他描述形式;另一方面,控制单元的设计是在反复优化算法结构,并且已经完成数据处理单元设计后进行的,一般不需要再状态化简。 ; 控制单元的实现方法根据系统设计要求,建立描述控制器工作过程的算法流程图和ASM图。明确系统的工作状态、判别分支、状态输出和条件输出。然后由硬件描述语言编写(状态机)的程序来设计控制器。

第34页:控制单元VHDL描述(一)

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;

第35页:控制单元VHDL描述(二)

例根据八位串行数字锁的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;

第36页:竞赛抢答器电路

本页为竞赛抢答器电路实例页,源文件仅提取到标题,电路结构以图片形式呈现,建议对照原课件图片补充本页要点说明。

第37页:数字钟

本页为数字钟设计实例页,源文件仅列出彩灯声响显示、扫描显示译码、调分信号与调时信号等模块名称,建议对照原课件图片补充本页要点说明。

第38页:交通信号控制系统结构图

; 交通信号的控制系统clkresetCaCbC1Z1C2Z2C3Z3主道通行T1定时器1支道通行T2定时器2公共停车T3定时器3控制器A方向信号B方向信号RaYaGaRbYbGb交通信号控制系统的结构图Z1、Z2、Z3为定时器的工作使能信号,启动定时器计数;

第39页:交通信号控制算法流程图

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交通信号控制系统的算法流程图

第40页:交通信号控制系统原理图

本页为交通信号控制系统的顶层原理图,源文件仅提取到标题,原理图以图片形式呈现,建议对照原课件图片补充本页要点说明。

第41页:交通信号控制器VHDL描述

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;

第42页:移位相加8位硬件乘法器

; 移位相加8位硬件乘法器硬件乘法器的乘法原理是通过逐项移位相加的方法来实现。下面通过具体的两个二进制数值的乘法运算过程即多次加法和移位来进行说明。例如两个3位二进制数分别为1101和1001进行乘法:1101被乘数:13(十进制)×1001乘数:9(十进制)11010000部分积000011011110101乘积:117(十进制)先观察乘数的每一位,从最低位开始,若最低位是1,则被乘数被复制到下面,否则复制为全0,复制下来的数值较前一个数值左移一位。最后,将复制的数值相加,它们的和就是乘积。两个n位二进制数相乘的结果最多可以有2n位的二进制数。

第43页:硬件乘法器的设计思想

为了实现硬件乘法器,根据上面乘法的计算过程可以得出三点:①只对两个二进制数进行相加运算,并用寄存器不断地累加部分积;②将累加的部分积左移(复制的被乘数不移动);③乘数的对应位若为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

第44页:移位相加乘法器VHDL描述

移位相加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);--乘数BEGIN

第45页:状态转移进程描述

PROCESS(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;

第46页:寄存器操作进程描述

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;

第47页:8位乘法器仿真波形

8位二进制乘法器的仿真波形此硬件乘法器采用参数化的VHDL描述,由两进程的状态机来实现,一个进程是描述状态转移,另一个进程是描述寄存器操作。累加寄存器q的位数为WIDTHd(被乘数位数)+WIDTHb(乘数位数)+1,其中q的高位段(WIDTHd+1)进行数的累加,然后向q的低位进行移位(右移),形成部分积。当计数器n减到0时,乘法过程结束。在寄存器操作进程中,由于使用的是时钟同步工作方式,其操作都是在下一个状态完成,因此在乘法结束进入S3状态下,需要对累加寄存器q进行左移一位,并将寄存器q中的乘积结果输入到乘积输出端A。

顶部目录