[工学]第3章 VHDL设计初步.ppt
第第3章章 VHDLVHDL设计初步设计初步 工学第3章 VHDL设计初步 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第3章章 VHDLVHDL设计初步设计初步 第第3章章VHDL设计初步设计初步第第3章章 VHDLVHDL设计初步设计初步 概述概述HDL:HardwareDescriptionLanguageVHSIC:VeryHighSpeedIntegratedCircuit硬件描述语言可以描述硬件电路的功能、信号连接关系及定时关系的语言第第3章章 VHDLVHDL设计初步设计初步 第第3章章 VHDLVHDL设计初步设计初步 第第3章章 VHDLVHDL设计初步设计初步 常用硬件描述语言简介常用硬件描述语言简介常用硬件描述语言有VHDL、Verilog和ABEL语言。VHDL起源于美国国防部的VHSIC,Verilog起源于集成电路的设计,ABEL则来源于逻辑器件的设计。第第3章章 VHDLVHDL设计初步设计初步 三者比较三者比较(1)逻辑描述层次:行为级、RTL级和门电路级。VHDL适合于行为级和RTL级的描述,最适合于描述电路的行为;Verilog和ABEL适用于RTL级和门电路级的描述,最适合描述门电路级。(2)设计要求:使用VHDL进行电子系统设计时可以不了解电路的内部结构,设计者所做的工作较少;使用Verilog和ABEL语言进行电子系统设计时需了解电路的详细结构,设计者需做大量的工作。(3)综合过程:VHDL语言源程序的综合通常要经过行为级RTL级门电路级的转化,几乎不能直接控制门电路的生成。Verilog语言和ABEL语言源程序的综合过程较为简单,经经过RTL级门电路级的转化,易于控制电路资源。(4)对综合器的要求:VHDL语言对综合器性能要求较高;Verilog和ABEL对综合器的性能要求较低。第第3章章 VHDLVHDL设计初步设计初步 VHDL语言和其它高级语言的区别语言和其它高级语言的区别(1)高级语言描述的是数字模型(算法)和控制动作,控制行为。而VHDL语言所描述的是硬件电路的功能:接口信号电路行为和功能电路与电路之间的连接关系(2)高级语言最终目的是实现希望的控制流而VHDL语言最终目的是要造成硬件电路。(3)VHDL语言的语句很多是并发语句。据此,尽管VHDL语言很多地方与高级语言相似,但它们之间却有较大差异。第第3章章 VHDLVHDL设计初步设计初步 VHDL的特点的特点与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。具有丰富的仿真语句和库函数,在设计早期可进行仿真。可利用EDA工具进行逻辑综合和优化,并自动转变成门级网表。对设计的描述具有相对独立性。描述与工艺无关。第第3章章 VHDLVHDL设计初步设计初步 VHDL入门入门第第3章章 VHDLVHDL设计初步设计初步 例:2选1选择器设计abmux21ys第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALLENTITYmux21ISPORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux21;ARCHITECTUREoneOFmux21ISBEGINy=aWHENs=0ELSEbWHENS=1;ENDone;IEEE库使用说明器件mux21的外部接口信号说明,PORT相当于器件的引脚,这一部分称为实体器件mux21的内部工作逻辑描述,即为实体描述的器件功能结构,称为结构体第第3章章 VHDLVHDL设计初步设计初步 例:锁存器设计LATCHDQENA第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLatchISPORT(D:INSTD_LOGIC;ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDlatch;ARCHITCTUREoneOFlatchISSIGNALsig_save:STD_LOGIC;BEGINPROCESS(D,ENA)BEGINIFENA=1THENsig_save=D;ENDIF;Q=sig_save;ENDPROCESS;ENDone;锁存器的实体,定义了此器件的输入输出引脚及其信号属性定义信号进程语句结构,描述逻辑的时序方式结构体第第3章章 VHDLVHDL设计初步设计初步 例:全加器设计1位半加器1位全加器H_ADDERacobsoH_ADDERacobsoH_ADDERacobsoF_ADDERaincoutbinsumcinainbinainacbu1u2u3sumcoutdef第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2ISPORT(A,B:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDor2;ARCHITECTUREfulOFor2ISBEGINc=aORb;ENDfu1;第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDh_adder;ARCHITECTUREfh1OFh_adderISBEGINso=aXORb;co=aANDb;ENDfh1;第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDf_adder;ARCHITECTUREfd1OFf_adderISBEGINCOMPONENTh_adderPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTor2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;BEGINu1:h_adderPORTMAP(ain,bin,d,e);u2:h_adderPORTMAP(e,b,f,sum);u3:or2PORTMAP(d,f,cout);ENDfd1;元件调用声明元件连接第第3章章 VHDLVHDL设计初步设计初步 3.1 组合电路的组合电路的VHDL描述描述abmux21ays3.1.12选1多路选择器及其VHDL描述1第第3章章 VHDLVHDL设计初步设计初步 ENTITYmux21ISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21;ARCHITECTUREoneOFmux21ISBEGINy=aWHENs=0ELSEb;ENDARCHITECTUREone;器件mux21的外部接口信号说明,PORT相当于器件的引脚,这一部分称为实体器件mux21的内部工作逻辑描述,即为实体描述的器件功能结构,称为结构体【例例3-1】第第3章章 VHDLVHDL设计初步设计初步 4.2VHDL语言的基本单元及其构成语言的基本单元及其构成一个完整的VHDL程序包括4个基本组成部分:库、程序包使用说明实体说明与实体对应的结构体说明配置语句说明第第3章章 VHDLVHDL设计初步设计初步 VHDL语言程序的基本结构语言程序的基本结构第第3章章 VHDLVHDL设计初步设计初步 4.2.1VHDL语言设计的基本单元及其构成语言设计的基本单元及其构成基本单元门微处理器系统基本单元构成实体说明:规定了设计单元的输入输出接口信号或引脚。结构体:定义了设计单元的具体构造和操作(行为)。第第3章章 VHDLVHDL设计初步设计初步 基本单元构成基本单元构成ENTITY名称IS接口信号说明END名称;ARCHITECTURE结构体名OF实体名ISBEGIN功能描述END结构体名;d0d1d2q&d0qseld1第第3章章 VHDLVHDL设计初步设计初步 一个基本设计单元的构成一个基本设计单元的构成二选一电路二选一电路实体说明ENTITYmux2ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux2;构造体ARCHITECTUREconnectOFmux2ISSIGNALtmp:BIT;实体:外部特性描述第第3章章 VHDLVHDL设计初步设计初步 一个基本设计单元的构成(续)一个基本设计单元的构成(续)二选一电路二选一电路BEGIN;PROCESS(d0,d1,sel);VARIABLEtmp1,tmp2,tmp3:BIT;BEGIN;tmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;tmp=tmp3;q=tmpAFTERm;ENDPROCESS;ENDconnect;构造体:内部特性描述,即功能描述第第3章章 VHDLVHDL设计初步设计初步 1、实体表达实体在电路描述中主要是说明该电路的输入输出关系。此外,实体还定义电路名称及结构体中所使用的参数等。实体描述的一般书写格式如下:ENTITY实体名IS类属参数说明;端口说明ENDENTITY实体名;第第3章章 VHDLVHDL设计初步设计初步 实体语句结构实体描述从“ENTITY实体名IS”开始,至“END实体名”结束。实际上,对VHDL语言而言,大写和小写都一视同仁,不加区分。这里这样规定仅仅是为了增加程序的可读性而已。建议将VHDL的标识符或基本语句关键词以大写方式表示,而由设计者添加的内容可以以小写方式来表示。第第3章章 VHDLVHDL设计初步设计初步 2、实体名、实体名电路的名称,可以大、小英文字母,但第一个字母一定要用英文字母。为使结构更突出,便于阅读,常用小写命名。不能用中文不能拿与EDA软件库中已定义好的元件名一样第第3章章 VHDLVHDL设计初步设计初步 类属参数说明(以后再讲)类属参数说明(以后再讲)必须放在端口说明之前,用于指定参数。GERERIC(常数名:数据类型:设定值);如上例中的GENERIC(m:TIME=1ns)。该语句指定了构造体内m的值为1ns。这样,语句q=tmpAFTERm;表示tmp经1ns延迟才送到q。在这个例子中,GENERIC利用类属参数为q建立一个延迟值。第第3章章 VHDLVHDL设计初步设计初步 3.端口说明端口说明是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称,数据类型和输入、输出方向的描述。其一般书写格式如下:PORT(端口名,端口名:端口模式 数据类型名;端口名,端口名:端口模式数据类型名);第第3章章 VHDLVHDL设计初步设计初步 端口名每个外部引脚的名称,通常用一个或几个英文字母或者用英文字母加数字命名。4、端口模式:表示信号传递方向。IN输入,只读模式OUT输出,单向赋值模式INOUT双向,可以读或写BUFFER具有读功能的输出模式,可以读或写,只能有一个驱动源5、数据类型在VHDL语言中有10种数据类型,但在逻辑电路设计中只用到两种:BIT和BITVECTOR。第第3章章 VHDLVHDL设计初步设计初步 Out与与Buffer的区别的区别Entitytest1isport(a:instd_logic;b,c:outstd_logic);endtest1;architectureaoftest1isbeginb=not(a);c=b;-Errorenda;Entitytest2isport(a:instd_logic;b:bufferstd_logic;c:outstd_logic);endtest2;architectureaoftest2isbeginb=not(a);c=b;enda;第第3章章 VHDLVHDL设计初步设计初步 练习练习 编写包含以下内容的实体代码编写包含以下内容的实体代码编写包含以下内容的实体代码编写包含以下内容的实体代码 端口端口端口端口 D D 为为为为1212位输入总线位输入总线位输入总线位输入总线 端口端口端口端口 OE OE 和和和和 CLK CLK 都是都是都是都是1 1位输入位输入位输入位输入 端口端口端口端口 AD AD 为为为为 12 12位双向总线位双向总线位双向总线位双向总线 端口端口端口端口 A A为为为为1212位输出总线位输出总线位输出总线位输出总线 端口端口端口端口 INT INT 是是是是1 1位输出位输出位输出位输出 端口端口端口端口 AS AS 是一位输出同时被用作内部反馈是一位输出同时被用作内部反馈是一位输出同时被用作内部反馈是一位输出同时被用作内部反馈my_designd11:0oeclkad11:0a11:0intas第第3章章 VHDLVHDL设计初步设计初步 练习答案练习答案 LIBRARY ieee;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_1164.ALL;ENTITY my_design IS PORT(ENTITY my_design IS PORT(d:d:IN IN std_logic_vector(11 DOWNTO 0);std_logic_vector(11 DOWNTO 0);oe,clk:oe,clk:IN IN std_logic;std_logic;ad:ad:INOUT INOUT std_logic_vector(11 DOWNTO 0);std_logic_vector(11 DOWNTO 0);a:a:OUT OUT std_logic_vector(11 DOWNTO 0);std_logic_vector(11 DOWNTO 0);int:int:OUT OUT std_logic;std_logic;as:as:BUFFER std_logic);BUFFER std_logic);END my_design;END my_design;my_designd11:0oeclkad11:0a11:0intas第第3章章 VHDLVHDL设计初步设计初步 6、结构体表达结构体表达结构体:描述设计实体的结构或行为,即描述一个实体的功能,把设计实体的输入和输出之间的联系建立起来。ARCHITECTURE 结构体名 OF 实体名 IS定义语句内部信号,常数,数据类型,函数等的定义;BEGIN并行处理语句;END ARCHITECTURE 结构体名;第第3章章 VHDLVHDL设计初步设计初步 (1)结构体的一般语句格式结构体的一般语句格式 ARCHITECTURE 结构体名 OF 实体名 IS定义语句内部信号,常数,数据类型,函数等的定义;BEGIN功能描述语句;END ARCHITECTURE结构体名;结构体名结构体名:英文字母、数字、结构体的名称可以由设计者自由命名。但是在大多数的文献和资料中,通常把构造体的名称命名为behavioral(行为),dataflow(数据流)、rtl(寄存器传输)或者structural(结构)当一个实体具有多个结构体时,结构体的取名不可相重。第第3章章 VHDLVHDL设计初步设计初步 (2)结构体说明语句结构体说明语句位置在ARCHITECTURE和BEGIN之间。对用于构造体内部所使用的信号、常数、数据类型和函数等进行定义例:SIGNALcont:STDLOGICVECTOR(3DOWNTO0);SIGNALco_1:STDLOGIC;CONSTANTm:TIME:=2ns;TYPESTATEIS(INIT,DAD,ADC,SRF,FRF);第第3章章 VHDLVHDL设计初步设计初步 (3)功能描述语句功能描述语句位置:处于语句BEGIN和END之间所有的并行处理语句都可以写在这里面。并行处理语言在仿真时是并发工作的,和前后次序无关,从而描述了构造体内部逻辑电路的并发功能。有5种语句结构块语句(BLOCK)进程语句(PROCESS)信号赋值语句子程序调用语句元件例化语句都是并行语句内部可能包含顺序第第3章章 VHDLVHDL设计初步设计初步 VHDL语言基本单元构成语言基本单元构成ENTITY实体名ISGENERIC(常数名:数据类型:设定值);PORT(端口名,端口名:端口模式数据类型名;端口名,端口名:端口模式数据类型名);END实体名;ARCHITECTURE结构体名OF实体名IS定义语句内部信号,常数,数据类型,函数等的定义;BEGIN功能描述语句;ENDARCHITECTURE结构体名;第第3章章 VHDLVHDL设计初步设计初步 举例举例ENTITYmux2ISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux2;ARCHITECTUREconnectOFmux2ISSIGNALtmp1,tmp2,tmp3:BIT;BEGIN;tmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;qtmp3;ENDconnect;并发执行并发执行第第3章章 VHDLVHDL设计初步设计初步 7、赋值符号和数据比较符号、赋值符号和数据比较符号在语句中,符号“=”表示传送(或代入)的意思,即将逻辑运算结果送q输出。代入语句只要代入符号右边信号有变化就启动一次。“=”是数据比较符号,没有赋值或数据传输的含义。第第3章章 VHDLVHDL设计初步设计初步 8、WHEN_ELSE条件信号赋值语句条件信号赋值语句目的信号量=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSEELSE表达式n;第第3章章 VHDLVHDL设计初步设计初步 是一种并行赋值语句。每一“赋值”条件是按书写的先后关系逐项测定的。y=aWHENs=0ELSEb;第第3章章 VHDLVHDL设计初步设计初步 例:用条件信号代入语句设计四选例:用条件信号代入语句设计四选 一电路一电路ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel=b&a;q=i0WHENsel=00ELSEi1WHENsel=01“ELSEi2WHENsel=10ELSEi3WHENsel=11ELSE X;ENDrtl;第第3章章 VHDLVHDL设计初步设计初步 小测验小测验基本单元必须包含哪两部分?各有什么作用?端口说明中的方向有哪几种,其中BUFFER和OUT有何区别?BUFFER和INOUT有何区别?第第3章章 VHDLVHDL设计初步设计初步 9、关键字10、标识符11、规范的程序书写格式12、文件取名和存盘文件后缀名必须为.vhd程序的文件名与该程序的模块名(实体名)一致VHDL程序必须存入某文件夹中(要求非中文文件夹名),不要存在根目录内或桌面上。第第3章章 VHDLVHDL设计初步设计初步 3.1.2 2选选1多路选择器及其多路选择器及其VHDL描述描述2&aysbLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux2ISPORT(a,b,s:INSTD_LOIC;y:OUTSTD_LOGIC);ENDmux2;ARCHITECTUREconnectOFmux2ISSIGNALe,d:STD_LOIC;BEGIN;e=aANDs;d=bAND(NOTs);y=eORd;ENDconnect;ed第第3章章 VHDLVHDL设计初步设计初步 1、逻辑运算符、逻辑运算符VHDL共有七种基本逻辑操作符AND与OR或NAND与非NOR或非XOR异或XNOR同或NOT取反逻辑操作符所要求的操作数的数据类型有三种:BIT、BOOLEAN和STD_LOGIC第第3章章 VHDLVHDL设计初步设计初步 2、标准逻辑位数据类型、标准逻辑位数据类型STD_LOGICBIT数据类型有两种值:0、1STD_LOGIC取值有9种:U、X、0、1、Z、W、L、H、-初始值 不定 高阻 弱信号不定 弱信号0 弱信号1 不可能情况STD_LOGIC型数据可综合的只有X(或-)、0、1和z,其他类型只能用于仿真第第3章章 VHDLVHDL设计初步设计初步 3、设计库和标准程序包、设计库和标准程序包(1)IEEE库(2)STD库(3)WORK库(4)VITAL库(5)用户定义库库的用法:LIBRARY库名包的使用:USE库名程序包名项目名;USE库名程序包名ALL;常用的预定义的程序包有4种。STD_LOGIC_1164程序包STD_LOGIC_ARITH程序包STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包STANDARD和TEXTIO程序包LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL第第3章章 VHDLVHDL设计初步设计初步 4、信号定义和数据对象、信号定义和数据对象在VHDL中,凡是可以赋予一个值的对象就称为数据对象。数据对象有三类:信号(SIGNAL)、变量(VARIABLE)和常量(CONSTANT)信号是电子电路内部硬件连接的抽象。信号通常在构造体、包集合和实体中说明。信号说明语句格式为:SIGNAL信号名:数据类型约束条件=表达式;例如:SIGNALsys_clk:BIT=0;SIGNALground:BIT=0;第第3章章 VHDLVHDL设计初步设计初步 3.1.3 2选选1多路选择器及其多路选择器及其VHDL描述描述3LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21aISPORT(a,b,s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYmux21a;第第3章章 VHDLVHDL设计初步设计初步 ARCHITECTURErtlOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs=0THENy=a;ELSEy=b;ENDIF;ENDPROCESS;ENDARCHITECTUREtrl;第第3章章 VHDLVHDL设计初步设计初步 1、条件语句、条件语句IF条件THEN顺序处理语句ENDIF;IF条件THEN顺序处理语句;ELSE顺序处理语句;ENDIF;IF条件THEN顺序处理语句;ELSIF条件THEN顺序处理语句;ELSIF条件THEN顺序处理语句;ELSE顺序处理语句;ENDIF;第第3章章 VHDLVHDL设计初步设计初步 2、进程语句和顺序语句、进程语句和顺序语句Process语句的一般书写结构、组织形式为:进程名:PROCESS敏感信号表变量说明语句:BEGIN顺序描述语句ENDPROCESS进程名;第第3章章 VHDLVHDL设计初步设计初步 进程语句进程语句通常要求将进程中所有的输入信号都放在敏感信号表中。PROCESS的执行依赖于敏感信号的变化。当某一敏感信号从10或从01,都将启动此进程语句。于是在PROCESS中的所有语句被执行一次,然后返回进程的起始端,进入等待状态,直到下一次的敏感信号变化。所有的顺序语句都必须放入进程语句中。进程语句是并行语句,在一个结构体中可以包含任意个进程语句结构。第第3章章 VHDLVHDL设计初步设计初步 上讲主要内容上讲主要内容实体ENTITY结构体ARCHITECTURE数据类型:BIT、BIT_VECTORSTD_LOGIC、STD_LOGIC_VECTOR逻辑运算符:AND、OR、NAND、NOR、XOR、XNOR、NOT信号定义SIGNAL第第3章章 VHDLVHDL设计初步设计初步 VHDL语句语句条件语句IF-THEN-ELSE-ENDIF并行赋值语句=条件信号赋值语句WHEN-ELSE进程语句PROCESS第第3章章 VHDLVHDL设计初步设计初步 不同实现方法的比较不同实现方法的比较方法1:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALLENTITYmux21ISPORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux21;ARCHITECTUREoneOFmux21ISBEGINy=aWHENs=0ELSEbWHENS=1;ENDone;第第3章章 VHDLVHDL设计初步设计初步 方法3:ENTITYmux2ISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux2;构造体ARCHITECTUREconnectOFmux2ISSIGNALtmp:BIT;BEGIN;PROCESS(d0,d1,sel);BEGIN;IFsel=0THENq=d0;ELSEq=d1;ENDIF;ENDPROCESS;ENDconnect;进程的敏感信号表顺序执行方法2:ENTITYmux2ISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux2;ARCHITECTUREconnectOFmux2ISSIGNALtmp1,tmp2,tmp3:BIT;BEGIN;tmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;qtmp3;ENDconnect;第第3章章 VHDLVHDL设计初步设计初步 第第3章章 VHDLVHDL设计初步设计初步 设计要求设计要求设计一个能进行拔河游戏的电路。电路使用15个(或9个)发光二极管表示拔河的“电子绳”,开机后只有中间一个发亮,此即拔河的中心点。游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。由裁判下达比赛开始命令后,甲乙双方才能输入信号,否则,输入信号无效。用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分。第第3章章 VHDLVHDL设计初步设计初步 写出实体定义第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYgameISPORT(reset:INSTD_LOGIC;reset1:INSTD_LOGIC;begin:OUTSTD_LOGIC;in12:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC_VECTOR(15DOWNTO1);ms:OUTSTD_LOGIC_VECTOR(1DOWNTO0);a,b,c,d,e,f,g:OUTSTD_LOGIC);ENDgame;第第3章章 VHDLVHDL设计初步设计初步 3.1.4 半加器及其半加器及其VHDL的描述的描述第第3章章 VHDLVHDL设计初步设计初步 【例【例3-4】半加器的布尔函数描述方法】半加器的布尔函数描述方法LIBRARYIEEE;USEIEEE。STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderISBEGINso=aXORb;co=aANDb;ENDARCHITECTUREfh1;第第3章章 VHDLVHDL设计初步设计初步 【例【例3-5】半加器的真值表描述方法】半加器的真值表描述方法LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderISSIGNALabc:STD_LOGIC_VECTOR(1DOWNTO0);BEGINabcso=0;coso=1;coso=1;coso=0;coNULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREfh1;第第3章章 VHDLVHDL设计初步设计初步 1、CASE语句语句CASE语句用来描述总线或编码、译码的行为,从许多不同语句的序列中选择其中之一执行之。CASE表达式ISWHEN条件表达式=顺序处理语句;ENDCASE;上述CASE语句中的条件表达式可以有如下4种不同的表示形式:WHEN值=顺序处理语句;WHEN值|值|值|值=顺序处理语句;WHEN值TO值=顺序处理语句;WHENOTHERS=顺序处理语句;第第3章章 VHDLVHDL设计初步设计初步 例:例:2选选1电路的电路的CASE语句表述语句表述Entitycase_muxisport(a,b,sel:inbit;c:outbit);Endcase_mux;Architecturertlofcase_muxisBeginp1:process(sel,a,b)begincaseseliswhen0=cc=b;endcase;endprocess;Endrtl;第第3章章 VHDLVHDL设计初步设计初步 CASE语句使用注意事项语句使用注意事项(1)WHEN中的选择值或标识符所代表的值必须在CASE的的取值范围内,且数据类型要一致。(2)所有的选择值必须覆盖CASE语句中表达式的所有取值,否则必须加WHENOTHERS语句。(3)CASE语句中的选择值只能出现一次,不允许有相同选择的条件语句出现。(4)CASE语句执行中必须选中,且只能选中所列条件语句中的一条。第第3章章 VHDLVHDL设计初步设计初步 2、标准逻辑矢量数据类型、标准逻辑矢量数据类型STD_LOGIC_VECTOR可以表达电路中并列的多通道端口或节点,或者总线BUS。在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽。B:OUTSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALA:STD_LOGIC_VECTOR(1TO4);二进制矢量必须加双引号。B=“01100010”;B(4DOWNTO1)=“1101”;B(7DOWNTO4)=A;第第3章章 VHDLVHDL设计初步设计初步 3、并置操作符、并置操作符&并置运算符可用于位的连接,形成位矢量并置运算符可用两位矢量的连接构成更大的位矢量位的连接,可以用并置符连接法,也可用集合体连接法第第3章章 VHDLVHDL设计初步设计初步 使用实例使用实例SIGNALa,b,c:STDLOGIC;SIGNALe:STD_LOGIC_VECTOR(2DOWNTO0);e=a&b&c;e=a;是错误的e=0&0&a;是正确的第第3章章 VHDLVHDL设计初步设计初步&ena(3)Y(0)Y(4)Y(1)Y(2)Y(3)Y(7)Y(6)Y(5)a(0)a(1)a(2)b(1)b(2)b(3)b(0)Tmp_b=b AND(en&en&en&en)Y=a&tmp_b;第第3章章 VHDLVHDL设计初步设计初步 位的连接也可使用集合体的方法,即将并置符换成逗号就可以了,例如:tmp_b=(en,en,en,en);但是,这种方法不适用于位矢量之间的连接。如下的描述方法是错误的:a=(a,tmp_b);集合体也能指定位的脚标,例如上一个语句可表示为:tmp_ben,2=en,1=en,0=en);或tmp_ben);在指定位的脚标时,也可以用“OTHERS”来说明:tmp_ben);要注意,在集合体中“OTHERS”只能放在最后。假若b位矢量的脚标b(2)的选择信号为“0”,其它位的选择信号均为en。那么此时表达式可写为:tmp_b0,OTHERS=en);第第3章章 VHDLVHDL设计初步设计初步 3.1.5 1位二进制全加器及其位二进制全加器及其VHDL描述描述1位全加器可以由两个半加器和一个或门连接而成。H_ADDERacobsoH_ADDERacobsoainbinainacbu1u2u3sumcoutdef第第3章章 VHDLVHDL设计初步设计初步 例:全加器设计1位半加器1位全加器H_ADDERacobsoH_ADDERacobsoH_ADDERacobsoF_ADDERaincoutbinsumcinainbinainacbu1u2u3sumcoutdef第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2ISPORT(A,B:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDor2;ARCHITECTUREfulOFor2ISBEGINc=aORb;ENDfu1;【例例3-6】或门描述或门描述第第3章章 VHDLVHDL设计初步设计初步 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDh_adder;ARCHITECTUREfh1OFh_adderISBEGINso=aXORb;consel,b=d1,c=ab);第第3章章 VHDLVHDL设计初步设计初步 例:用COMPONENT语句描述二选一电路t1t2t3u0u1u2u3第第3章章 VHDLVHDL设计初步设计初步 libraryieee;useieee.std_logic_1164.all;entitymux21isport(d0,d1,sel:instd_logic;q:outstd_logic);endmux21;architecturertlofmux21iscomponentmyand2port(a,b:instd_logic;c:outstd_logic);endcomponent;componentmyor2port(a,b:instd_logic;c:outstd_logic);endcomponent;componentmynotport(a:instd_logic;c:outstd_logic);endcomponent;signalt1,t2,t3:std_logic;beginu0:myand2portmap(d0,sel,t1);u1:mynotportmap(sel,t2);u2:myand2portmap(d1,t2,t3);u3:myor2portmap(t1,t3,q);endrtl;第第3章章 VHDLVHDL设计初步设计初步 练习:用元件例化语句设计如下框图电路,设C1、C2为已设计好的元件第第3章章 VHDLVHDL设计初步设计初步 构造体的信号说明位置在什么地方?以下说明哪个是正确的?构造体的信号说明位置在什么地方?以下说明哪个是正确的?ARCHITECTUREconnectOFmux2ISSIGNALtmp1,tmp2,tmp3:BIT;BEGINtmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;qtmp3;ENDconnect;ARCHITECTUREconnectOFmux2ISBEGINSIGNALtmp1,tmp2,tmp3:BIT;tmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;q