已阅读5页,还剩106页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字电路与逻辑设计,一、基于VHDL的组合逻辑分析,数字电路与逻辑设计,5-3-3基于VHDL的组合逻辑设计,libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitysswrisport(d:instd_logic_vector(3downto0);y:outstd_logic);endsswr;,实例1某数字电路的VHDL程序代码如下,请分析其逻辑功能,architecturebehaveofsswrisbeginy=0andd=5andd10elseZ;endbehave;,libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityFBIisport(a,b,ci:instd_logic;y,cout:outstd_logic);endFBI;,实例2某数字电路的VHDL程序代码如下,请分析其逻辑功能,architecturebh2ofFBIisbeginy=axorbxorci;cout=(aandb)or(aandci)or(bandci);endbh2;,architecturebh1offull_bit_adderisbeginy=(nota)and(notb)andci)or(nota)and(b)and(notci)or(a)and(notb)and(notci)or(a)and(b)and(ci);cout=(bandci)or(aandci)or(aandb);endbh1;,architecturebh2offull_bit_adderisbeginy=axorbxorci;cout=(aandb)or(aandci)or(bandci);endbh2;configurationcon1offull_bit_adderisforbh2endfor;endcon1;,二、VHDL硬件描述语言基础,数字电路与逻辑设计,5-3-3基于VHDL的组合逻辑设计,VHDL硬件描述语言,VHDL概述VHDL数据类型与数据对象VHDL命令语句,一、VHDL概述,VHDL是超高速集成电路硬件描述语言(VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage)的英文缩写。,语法和风格:(1)类似与现代高级编程语言,如C语言。(2)VHDL描述的是硬件,它包含许多硬件特有的结构。,硬件描述语言HDL:美国Iverson,1962VHDL硬件描述语言:20世纪80年代初,美国国防部VHSIC计划目的:方便电子设计文档的交流和成果的再利用,一、VHDL概述,VHDL发展历史,1983年提出了硬件描述语言的标准化问题。1985年,第1版VHDL完成;1987年,国际电气与电子工程师协会(IEEE)将VHDL语言作为硬件描述语言的工业标准(IEEE1076);1988年,美国国防部规定所有官方的ASIC设计都必须以VHDL作为设计描述语言,此后VHDL逐渐成为工业界标准。1993年,IEEE在87版本的基础上进行了若干修订,增修为IEEE1164标准;1999年,IEEE又将数字模拟混合VHDL的版本作为工业标准,即IEEE1076.3;,一、VHDL概述,VHDL与电路图设计电路的方式不同:和电路图设计方式相比:(1)易于修改;(2)设计能力更强;(3)VHDL语言很方便:独立于器件设计;相同的程序代码可以用于不同厂家生产的器件。,一、VHDL概述,VHDL语言的程序结构LIBRARY(USE)-库PACKAGE-程序包集合ENTITY-实体ARCHITECTURE-结构体CONFIGURATION-配置语句,一、VHDL概述,一、VHDL概述,include“stdio.h”;include“math.h”;intmain(void)inta,b,c;a=8;b=9;c=a+b;returnc;,Librarystd;Usestd.standard.all;Entityand2isPort(a,b:inbit;c:outbit);Endand2;Architecturea1ofand2isBeginc=aandb;Enda1;,VHDL程序,C程序,Library(库)是用于存放预先编译好的Package(程序包)。Package(程序包)中定义了基本的常数,数据类型,元件及子程序等。作用:声明在实体和结构体定义中将用到的数据类型、元件或子程序等。声明格式:Library库名;Use库名.PACKAGE名.All;,一、VHDL概述,(1)Library和Package部分,作用:ENTITY(实体)用于定义电路的外观,即I/O端口的类型和数量。定义格式:Entity实体名isPort(a:inbit;b:inbit;c:outbit);End实体名;,(2)ENTITY定义区,一、VHDL概述,端口名,数据类型,端口模式,端口模式(MODE)有以下几种类型:IN;OUT;INOUT;BUFFER端口模式可用下图说明:(黑框代表一个设计或模块)INOUTBUFFERINOUT,一、VHDL概述,(3)ARCHITECTURE定义区,实体的实现。即说明电路执行什么动作或实现功能。定义格式:Architecture结构体名of实体名is声明语句;(内部信号、变量、常数,元件,子程序声明)Begin并行描述语句;End结构体名;,一、VHDL概述,(4)CONFIGURATION部分一个完整VHDL电路设计必须有一个实体和对应的结构体,即实体和结构体对构成一个完整的VHDL设计。一个实体可对应一个结构体或多个结构体,即一个实体可以有不同的描述方式。作用:当实体有多个结构体时,系统默认实体选用最后一个结构体,利用CONFIGURATION语句可以任意选择采用哪一个结构体。,一、VHDL概述,定义格式:Configuration配置名of实体名isfor选用的结构体名endfor;endconfiguration配置名;,一、VHDL概述,标识符的定义原则:(1)标识符由字母、数字和下划线组成,a7_;(2)标识符不区分大小写,ab和AB是一样的;(3)第一个字符必须是字母,即a666;(4)不允许有两个连续的下划线,a_b错误;(5)末尾不能是下划线,mname_错误;(6)标识符不能和关键字相同,如Entity,is等。,一、VHDL概述,设计范例:2输入与门,电路真值表,一、VHDL概述,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;Entityand2isPort(a:inbit;b:inbit;c:outbit);Endand2;-实体定义结束。,双减号-为VHDL程序的注释符,类似C语言中的/注释符。,一、VHDL概述,ArchitectureNaofand2isBeginc=0whena=0andb=0else0whena=1andb=0else0whena=0andb=1else1;-符号=为信号直接赋值符。EndNa;-结构体NaArchitectureNbofand2isBeginc=aandb;-and为逻辑与操作EndNb;-结构体Nb,一、VHDL概述,Configurations1ofand2isfornaendfor;endconfigurations1;-结构体配置结束。,一、VHDL概述,二、VHDL数据类型与数据对象,在VHDL程序中,我们经常会遇到这样的语句:Port(X:instd_logic);SignalA:std_logic;VariableB:std_logic_vector(7downto0);ConstantC:integer;,数据对象类型,数据类型,数据对象名,VHDL语言中的基本数据类型,逻辑类型,数值类型,布尔代数(Boolean),位(Bit),标准逻辑(Std_Logic),整数(Integer),实数(Real),二、VHDL数据类型与数据对象,逻辑数据类型,(1)布尔代数(Boolean)型;标识关键字:BOOLEAN,取值空间:FALSE,TRUE;(2)位(Bit);标识关键字:BIT,取值空间:0,1示例:Port(A:inbit);SignalB:bit;,二、VHDL数据类型与数据对象,标识关键字:Std_Logic;取值空间:X,-ForcingUnknown0,-Forcing01,-Forcing1Z,-HignImpedanceW,-WeakUnknownL,-Weak0H,-Weak1U,-Undefined-,-DontCare;,二、VHDL数据类型与数据对象,标准逻辑类型(9值逻辑)对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型,(3)标准逻辑(Std_logic);,逻辑序列,位序列(Bit_Vector),标准逻辑序列(Std_Logic_Vector),二、VHDL数据类型与数据对象,Port(A:inStd_Logic_Vector(7downto0);Port(B:inBit_Vector(0to3);SignalC:Std_Logic_Vector(3downto0);,序列范围的声明方式:To,Downto,序列的声明,二、VHDL数据类型与数据对象,多位宽度的逻辑变量用序列表示。,序列的含义:声明一个多位宽度的逻辑变量,逻辑变量的最高位与声明时的最左序号对应,以此类推,定义并命名一个多位逻辑变量。,序列的分解与合成Port(A:INStd_Logic_Vector(3downto0);B:INStd_Logic_Vector(1downto0);SignalC:Std_Logic_Vector(0to1);SignalD:Std_Logic_Vector(0to3);将A逻辑变量的中间两路信号与C相连C=A(2downto1);将A的最高一路、B的全部位和常量1与D相连D=大于或等于注:其中=操作符也用于表示信号的赋值操作。,SignalS:state;,二、VHDL数据类型与数据对象,(2)数组类型Type数组名称isArrary(范围)of数据类型;例子:TypeByteisArrary(7downto0)ofBit;Signalsdo:Byte;,二、VHDL数据类型与数据对象,数据类型的转换在VHDL语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就需要类型转换函数将其中的一种类型数据转换为另一中数据类型后,再进行信号的传递。,二、VHDL数据类型与数据对象,例如:SignalY:Std_logic_vector(7downto0);SignalX:Integerrange0to255;Y=CONV_STD_LOGIC_VECTOR(X,8);,二、VHDL数据类型与数据对象,CONV_INTEGER将数据类型UNSIGNED,SIGNED转换为INTEGER类型.CONV_UNSIGNED将数据类型INTEGER,SIGNED转换为UNSIGNED类型.CONV_SIGNED将数据类型INTEGER,UNSIGNED转换为SIGNED类型.CONV_STD_LOGIC_VECTOR将数据类型INTEGER,UNSIGNED,SIGNED,STD_LOGIC转换为STD_LOGIC_VECTOR类型.,二、VHDL数据类型与数据对象,数据对象,常量,信号,变量,(DataObjects),二、VHDL数据类型与数据对象,数据对象,常量,信号,变量,(DataObjects),二、VHDL数据类型与数据对象,(1)常量定义格式:Constant常量名称:数据类型:=给定值;常量通常来来定义延迟和功耗等参数。注意!常数定义的同时进行赋初值。常数在程序包说明、实体说明、结构体描述、过程说明、函数调用中使用。,二、VHDL数据类型与数据对象,libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;-必需定义+entityexam1isport(ip:instd_logic_vector(3downto0);op:outstd_logic_vector(3downto0);endexam1;architecturem1ofexam1isconstantnum:integer:=6;beginop=ip+num;endm1;,二、VHDL数据类型与数据对象,(2)信号定义格式I.(端口)信号Port(端口信号名称:数据类型);例如:Port(A:instd_logic);II.内部信号Signal信号名称:数据类型:=初始值;例如:SignalB:std_logic;,二、VHDL数据类型与数据对象,“信号”数据对象的物理意义信号代表电路元件的端口和内部的物理连线,因此信号的赋值有一定的延迟时间.端口信号代表电路的输入/输出(在实体中说明);内部信号代表电路中间信号或中间连接线路,其在元件之间起互连作用(在结构体中说明和使用)。,信号赋值的语法格式为:信号名=表达式;例如:【SignalS1:Std_logic_vector(3Downto0);】S1=“0000”;,(3)变量定义格式Variable变量名称:数据类型:=初始值;变量只能用于进程之中,变量的赋值是立即生效的,常用于高层次抽象的算法描述当中。,二、VHDL数据类型与数据对象,“变量”数据对象,它用于对中间数据的临时存储,并不一定代表电路的某一组件。,注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。建议变量对象定义后再进行赋值。,变量为局部量。,仅限于进程(Process)或子程序中使用。,变量赋值的语法格式为:目标信号值:=表达式;如:VariableS1:Std_logic_vector(3Downto0);S1:=“0000”;,二、VHDL数据类型与数据对象,信号和变量的比较,(1)信号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。,(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。,(3)信号为全局量,而变量只在定义它的域中才可见。因此,变量不能在两个进程之间传递信息。,(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。,(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为“=”,变量赋值为“:=”。,数据对象属性,(1)数值类属性:(数组类型的数据对象)数值类属性有left,right,low,high,length。其中用符号隔开对象名及其属性。left表示数组的左边界;right表示数组的右边界;low表示数组的下边界;high表示数组的上边界;length表示数组的长度。,如:SignalA:std_logic_vector(7downto0);SignalB:std_logic_vector(0to3);则这两个信号的属性值分别为:Aleft=7;Aright=0;Alow=0;Ahigh=7;Alength=8;Bleft=0;Bright=3;Blow=0;Bhigh=3;Blength=4;,数据对象属性,(2)event属性:event属性,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。利用此属性可决定时钟信号的变化情况,即时钟是否发生。,数据对象属性,例如:时钟边沿表示:signalclk:instd_logic;则clkeventandclk=1表示时钟的上升沿。即时钟变化了,且其值为1。clkeventandclk=0表示时钟的下降沿。即时钟变化了,且其值为0。此外,还可利用两个函数来表示时钟的边沿。rising_edge(clk)表示时钟的上升沿falling_edge(clk)表示时钟的下降沿,数据对象属性,三、VHDL命令语句,并列语句,顺序语句,VHDL命令语句,并列语句,并列语句一般处于进程(PROCESS)的外部。所有并列语句都是并行执行的,即与它们出现的先后次序无关。并列语句有三个特点:a.所有语句的执行是并行的;b.每条语句的执行和其所在的位置无关;c.并列语句的输出仅仅依赖于输入,没有其它的限制条件。,并列语句,(1)直接赋值语句:=赋值运算符(2)条件赋值语句:When-Else(3)选择赋值语句:With-Select-When(4)Process(进程)语句(5)Block(块)语句(6)函数调用语句(后面章节讲)(7)Component(元件)例化语句(8)For-Generate语句,直接赋值语句,直接赋值语句的格式:Signal_name0);结果信号A的每一位的值都为0。B0);信号对象的位数很多时,采用others来赋值很方便。,直接赋值语句,直接赋值语句的格式:Signal_name=expression;如:SignalA,B:std_logic_vector(7downto0);A=”00000000”;B=”10000000”;,When-Else条件赋值语句,语法格式为:Signal_name=expression1Whenlogic_expression1Elseexpression2Whenlogic_expression2Elseexpression3;例如:f=1when(x1=x2)else0;,Entityand2isPort(a:inbit;b:inbit;c:outbit);Endand2;ArchitectureNaofand2isBeginc=0whena=0andb=0else0whena=1andb=0else0whena=0andb=1else1;EndNa;,With-Select-When选择式赋值,WithexpressionSelectSignal_name=expression1Whenconstant_value1,expression2Whenconstant_value2,expression3Whenconstant_value3;,EntityexampleisPort(x,y:instd_logic;z:outstd_logic_vector(1downto0);Endexample;ArchitectureaofexampleISsignaltmp:std_logic_vector(1downto0);Begintmp=x,With-Select-When选择式赋值,顺序语句,(1)顺序语句每一条语句的执行都是顺序进行的。如同高级编程语言中的命令执行方式,一次一条命令,按书写顺序由上而下执行。(2)顺序语句只能出现在进程和子程序内部。(3)由于顺序语句的次序很重要,因此,顺序语句要与并行语句分割开,这可以通过Process语句来实现。Process语句出现在结构体中,它将其内部的语句进行封装。,顺序语句有三个特点:a.所有语句的执行是顺序进行的;b.每条语句的执行和其所在的位置有关;c.顺序语句的输出不仅依赖于输入,而且还受位置的影响。,顺序语句,(1)Process语句(2)If-Else语句(3)Case-When语句(4)Null语句(5)For-Loop语句(6)Waituntil语句(7)变量赋值语句(8)Procedure(过程)调用语句,并列语句语句的顺序不影响代码的含义。例如:Whenelse;WithSelect;顺序语句语句的顺序可能影响代码的含义。例如:ifelse;case语句;因此,为了在代码段中区分顺序语句,VHDL规定顺序语句一定要放在Process语句内部;,进程语句Process,Process语句格式Process-label:Process(Sensitivitylist)Variabledeclarations-变量声明BeginifstatementscasestatementsProcedure调用语句waituntilstatementvariableassignmentstatementsEndProcess;,entityabcisport(w0,w1,s:instd_logic;f:outstd_logic);endabc;architecturebhofabcisbeginproc1:process(w0,w1,s)beginf=w0;-语句Aifs=1thenf=w1;endif;-语句Bendprocess;endbh;,(1)一个结构体当中可以有多个Process语句,不同Process语句是同时起作用的并列语句。(2)Process内的语句却是按顺序“执行”(被编译器解释)的顺序语句。(3)多进程之间的信息通过信号对象来传递。,进程语句Process特点,进程语句Process的语义,敏感表每当任何信号的取值发生变化时,进程就会有效。只要进程有效:进程中的语句就会顺序执行。在进程内部所有语句执行完毕之前,进程内部的信号赋值对于进程外部都不可见。如果对相同信号进行了多次赋值,那么只有最后一次赋值在进程外部可见。,敏感表(Sensitivitylist)包括进程的一些信号,当敏感表中的某个信号变化时进程才被激活,进程内的顺序语句被执行。当进程结束时,进程内的输出信号值被更新,进程进入等待(睡眠)状态,直到敏感表中的某一信号发生变化,进程被再次激活。,进程语句Process的语义,Process模型-基本形式,Process()beginIf-elseEndprocess;Process()beginCase-whenEndprocess;,条件语句IF-ELSE,Ifexpression1Thenstatement1;statement;Elsestatement2;statement;Endif;,If-else语句,选择分支语句:从多个条件中选择一个满足条件的子句执行;如果条件都不满足则无操作;,条件的排列方式有两种基本形式:1.并列;2.嵌套(分层);,每个if-else语句都有明确的语句控制域:控制域以“if”开始,以“endif”结束。,Ifelse语句块常用样式,Ifthen子句1Endif;Ifthen子句1else子句2Endif;,Ifthen子句1elsif.then子句2elsif.then子句3Endif;,Ifthen子句1elsif.then子句2elsif.then子句3else子句4Endif;,嵌套if-else,if(clkeventandclk=1)thenif(up_down=0)thenif(q9)thenq=q+1;elseq=0000;endif;elsif(up_down=1)then_endif;endif;,ARCHITECTUREbehaviorOFmux4ISBEGINprocess(i0,i1,i2,i3,sel)beginif(sel=00)thenq=i0;elsif(sel=01)thenq=i1;elsif(sel=10)thenq=i2;elsif(sel=11)thenq子句2;whenothers=子句3;Endcase;,选择分支语句:根据选择信号的值从多个子句中选择一个子句执行;,ARCHITECTUREbehaviorOFmux4ISBEGINprocess(i0,i1,i2,i3,sel)begincaseseliswhen00=qqqqq端口信号;电路的内部电路节点=内部信号;逻辑关系=代码的含义;,代码的两种模型,并列模型,进程模型,组合电路,组合电路,时序电路,直接赋值语句,when-else,with-select,直接赋值语句,if-else,case-when,二、常用时序逻辑电路设计,(1)触发器设计(D、JK)(2)计数器设计(分频器)(3)移位寄存器设计(4)状态机设计:序列信号发生器及检测器,状态机示例序列信号发生器,序列信号:110,序列发生器,CLK,Z,ARCHITECTUREaOFmealyISTYPESTATE_TYPEIS(s0,s1,s2);SIGNALstate:STATE_TYPE;BEGIN,PROCESS(clk)BEGINIf(clkEVENTANDclk=1)thenCASEstateISWHENs0=zzzstateIFdin=1THENstateIFdin=1THENstateIFdin=0THENstatestate=s0;ENDCASE;Endif;ENDPROCESS;z=1when(state=s2anddin=0)else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心源性晕厥与脑源性晕厥临床规范化鉴别
- 社区老年人保健与护理案例
- 快速康复典型案例
- 急性阑尾切除术的护理查房
- 2026年智慧城市建设与城市治理现代化
- 当涂人工智能学校探索
- 计算机智能科学职业方向
- 义乌安全生产工作讲解
- 2026及未来5年中国四层缝口纸袋数据监测研究报告
- 2026年8月国际青年日主题班会 青春与梦想同行
- 项目廉政建设手册
- 食堂色标管理培训
- EPC现场管理培训课件
- GB/T 32741-2025肥料、土壤调理剂和有益物质分类
- 腓神经损伤的护理
- 2025年高中一年级地理下册期中检测试卷(含答案)
- 带班育人方略课件
- 船舶安全巡检规范
- 2025年中国复合材料钢筋数据监测报告
- 银行防盗抢安全培训课件
- 艾滋病防治条例培训课件
评论
0/150
提交评论