硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构

上传人:博****1 文档编号:570108903 上传时间:2024-08-02 格式:PPT 页数:85 大小:542KB
返回 下载 相关 举报
硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构_第1页
第1页 / 共85页
硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构_第2页
第2页 / 共85页
硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构_第3页
第3页 / 共85页
硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构_第4页
第4页 / 共85页
硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构》由会员分享,可在线阅读,更多相关《硬件描述语言与数字逻辑电路设计VHDL:第2章 VHDL语言程序的基本结构(85页珍藏版)》请在金锄头文库上搜索。

1、第第2 2章章VHDLVHDL语言程序的基本结构语言程序的基本结构VHDL21 本章重点是了解VHDL语言程序的基本结构,即由那几部份组成,每部份的功能是什么。 从第一章的例子可以看出一个完整的从第一章的例子可以看出一个完整的VHDLVHDL语言程语言程序应包括:序应包括: 实体(实体(ENTITYENTITY) 结构体(结构体(ARCHITECTUREARCHITECTURE)(构造体)(构造体) 配置(配置(CONFIGURRATIONCONFIGURRATION) 程序包(程序包(PACKAGEPACKAGE)( (包集合包集合) ) 库(库(LIBRARYLIBRARY)VHDL22V

2、HDL程序设计基本结构进程或其它并行结构VHDL23第第2 2章章 VHDLVHDL语言程序的基本结构语言程序的基本结构2.1 VHDL2.1 VHDL语言设计的基本单元及其构成语言设计的基本单元及其构成2.2 VHDL2.2 VHDL语言构造体的子结构描述语言构造体的子结构描述2.3 包集合、库及配置包集合、库及配置VHDL242.1 2.1 VHDLVHDL语言设计的基本单元及其构成语言设计的基本单元及其构成 VHDL语言设计的基本单元(Design Entity),就是VHDL语言的一个基本设计实体。简单的可以是一个与门(AND Gate),复杂点的可以是一个微处理器或一个系统。但是,不

3、管是简单的数字电路,还是复杂的数字电路,其基本构成是一致的。它们都由实体说明(Entity Declaration)和构造体(Architecture Body)两部分构成 。也就是说我们实际做的程序,并不象开始所列的那样必须包含5部分,通常右面结构才是基本的和必需的:VHDL25实体作为设计实体的组成部分,其功能是对这个设计实体作为设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述。实体是设计实体的表层设实体与外部电路进行接口描述。实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外

4、的一个通信界面。实体说明号或引脚,它是设计实体对外的一个通信界面。实体说明的结构如下:的结构如下: ENTITY ENTITY 实体名实体名 ISIS GENERIC( GENERIC(类属表类属表);); PORT( PORT(端口表端口表);); END END 实体名实体名; ;2.1.12.1.1实体说明实体说明VHDL261.1.类属参数说明类属参数说明 类属参量是一种端口界面常数,常以一种说明的类属参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。类属为所说形式放在实体或块结构体前的说明部分。类属为所说明的环境提供了一种明的环境提供了一种静态静态信息通道,即

5、说明用于设计信息通道,即说明用于设计实体和其外部环境通信的参数,传递静态信息。类属实体和其外部环境通信的参数,传递静态信息。类属在所定义的环境中的地位十分在所定义的环境中的地位十分接近常数(常数只能从接近常数(常数只能从设计实体地内部得到赋值,且不能再改变),设计实体地内部得到赋值,且不能再改变),但却能但却能从环境(如设计实体)外部动态地接受赋值,其行为从环境(如设计实体)外部动态地接受赋值,其行为又有点类似于端口又有点类似于端口PORTPORT。VHDL27 GENERICGENERIC(常数名:数据类型(常数名:数据类型 := := 设定值;设定值; 常数名:数据类型常数名:数据类型 :

6、= := 设定值);设定值); 例:例:GENERICGENERIC(m m:TIME := 1nsTIME := 1ns);); q = q = tmptmp AFTER m AFTER m;类属说明地一般书写格式如下:类属说明地一般书写格式如下:VHDL28例例2.1 n2.1 n输入端的与门:输入端的与门:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandnISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);b:OUTSTD_LOGIC);ENDandn;ARCHITECTUR

7、EbehavOFandnISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:=1;FORiINaLENGTH-1DOWNTO0LOOPIFa(i)=0THENint:=0;ENDIF;ENDLOOP;b=int;ENDPROCESS;ENDbehav;VHDL292.PORT2.PORT端口说明端口说明 端口说明是对基本设计实体(单元)与外部接口的描端口说明是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称,数据类型和输入、述,也可以说是对外部引脚信号的名称,数据类型和输入、输出方向的描述。端口为环境与块之间进行输出方向的描述。

8、端口为环境与块之间进行动态动态通信提供通通信提供通道。端口说明的一般书写格式如下:道。端口说明的一般书写格式如下: PORT( PORT( 端口名,端口名,端口名,端口名, :方向:方向 数据类型;数据类型; 端口名,端口名,端口名,端口名, :方向:方向 数据类型);数据类型);VHDL2101).1).端口名的命名规则端口名的命名规则: : 通常用一个或几个英文字母,或者用英文字母加数字命名通常用一个或几个英文字母,或者用英文字母加数字命名。2).2).端口方向:端口方向: IEEEIEEE标准包定义了常用端口模式:标准包定义了常用端口模式:P13.P13.表表2-12-1。 方向定义 含

9、义 IN输入 OUT输出(结构体内部不能再使用) INOUT双向 BUFFER输出(结构体内部可再使用) LINKAGE不指定方向,无论哪一个方向都可连接。VHDL211 “OUT”OUT”和和“BUFFERBUFFER都可以定义输出端口,但是它们之间是有区别都可以定义输出端口,但是它们之间是有区别的。的。在图在图 (a)(a)中,锁存器的输出端口被说明为中,锁存器的输出端口被说明为OUT”OUT”,而在图,而在图(b)(b)中,锁存器的输出被说明为中,锁存器的输出被说明为BUFFER”BUFFER”。 当一个构造体用当一个构造体用“BUFFER”BUFFER”说明输出端口时,与其连接的另说明

10、输出端口时,与其连接的另一个构造体的端口也要用一个构造体的端口也要用“BUFFER”BUFFER”说明。对于说明。对于OUT”OUT”则没有这则没有这样的要求。样的要求。VHDL2123).3).数据类型数据类型 在在VHDLVHDL语言中有语言中有1010种数据类型,但是在逻辑电路设计种数据类型,但是在逻辑电路设计中只用到两种:中只用到两种:BITBIT和和BIT_VECTORBIT_VECTOR。STD_LOGICSTD_LOGIC和和STD_LOGIC_VECTORSTD_LOGIC_VECTOR是是IEEEIEEE程序包定义的数据类型。程序包定义的数据类型。 当端口被说明为当端口被说明

11、为BITBIT数据类型时,该端口的信号取值数据类型时,该端口的信号取值只可能是只可能是“1”1”或或“0”0”。注意,这里的。注意,这里的“1”1”和和“0”0”是指是指逻辑值。所以逻辑值。所以BITBIT数据类型是位逻辑数据类型,其取值只数据类型是位逻辑数据类型,其取值只能是两个逻辑值能是两个逻辑值(“1”(“1”和和“0”)0”)中的一个。中的一个。 VHDL213 当端口被说明为当端口被说明为BIT_VECTORBIT_VECTOR数据类型时,该端口的取数据类型时,该端口的取值可能是一组二进制位的值。例如,某一数据总线输出端值可能是一组二进制位的值。例如,某一数据总线输出端口,具有口,具

12、有8 8位的总线宽度。那么这样的总线端口的数据类型位的总线宽度。那么这样的总线端口的数据类型可以被说明成可以被说明成BIT_VECTORBIT_VECTOR。总线端口上的值由。总线端口上的值由8 8位二进制位位二进制位的值所确定。例如:的值所确定。例如: PORT(d0,d1,sel:IN BIT;PORT(d0,d1,sel:IN BIT; q:OUTq:OUT BIT; BIT; bus:OUTbus:OUT BIT_VECTOR(7 DOWNTO 0); BIT_VECTOR(7 DOWNTO 0); VHDL214 LIBRARY IEEE;LIBRARY IEEE; USE IEEE

13、.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mu IS ENTITY mu IS PORT(d0,d1,sel:IN STD_LOGIC; PORT(d0,d1,sel:IN STD_LOGIC; q:OUTq:OUT STD_LOGIC; STD_LOGIC; bus:OUTbus:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); STD_LOGIC_VECTOR(7 DOWNTO 0); END mu; END mu; 该例中该例中BITBIT类型用类型用 STD_LOGIC STD_LOGIC 说明,

14、而说明,而 bus bus 则用则用STD_LOGIC_VECTOR STD_LOGIC_VECTOR (7 DOWNTO 0) (7 DOWNTO 0) 说明。说明。VHDLVHDL中存在一个库,该库有一个包集合,专门对数据中存在一个库,该库有一个包集合,专门对数据类型作了说明,其作用像类型作了说明,其作用像C C语言中的语言中的 include include 文件一样。这样做主要为了文件一样。这样做主要为了标准和统一。在用标准和统一。在用 STD_LOGIC STD_LOGIC 和和STD_LOGIC_VECTOR STD_LOGIC_VECTOR 说明时,在实体说明说明时,在实体说明以

15、前必须增加开始的两个语句,以便在对以前必须增加开始的两个语句,以便在对VHDLVHDL语言程序编译时,从指定库语言程序编译时,从指定库的包集合中寻找数据类型的定义。的包集合中寻找数据类型的定义。 VHDL2152.1.2 2.1.2 构造体构造体 构造体是一个基本设计单元的实体,它具体地指明了构造体是一个基本设计单元的实体,它具体地指明了该基本设计单元的行为、元件及内部的连接关系,也就是该基本设计单元的行为、元件及内部的连接关系,也就是说它定义了设计单元具体的功能。它描述的是设计实体的说它定义了设计单元具体的功能。它描述的是设计实体的内部结构和实体端口间的逻辑关系。构造体一般由两大部内部结构和

16、实体端口间的逻辑关系。构造体一般由两大部分组成:分组成: (1)(1)对数据类型、常数、信号、子程序和元件等元素的对数据类型、常数、信号、子程序和元件等元素的说明部分。说明部分。 (2)(2)描述实体逻辑行为的,以各种不同的描述风格来表描述实体逻辑行为的,以各种不同的描述风格来表达的功能描述语句,包括各种形式的顺序描述语句和并行达的功能描述语句,包括各种形式的顺序描述语句和并行描述语句。描述语句。VHDL216 构造体是对实体功能的具体描述,因此它一定要跟在实体构造体是对实体功能的具体描述,因此它一定要跟在实体的后面。每个实体可以由多个构造体,每个构造体对应着实的后面。每个实体可以由多个构造体

17、,每个构造体对应着实体不同的结构和算法实现方案,其间的各个构造体的地位是体不同的结构和算法实现方案,其间的各个构造体的地位是同等的。但同一构造体不能为不同的实体所拥有,构造体不同等的。但同一构造体不能为不同的实体所拥有,构造体不能单独存在,它必须有一个界面说明,即实体。对于具有多能单独存在,它必须有一个界面说明,即实体。对于具有多个构造体的实体,必须要用个构造体的实体,必须要用CONFIGURATIONCONFIGURATION配置语句指明用于配置语句指明用于综合的构造体和用于仿真的构造体。即在综合后的可映射于综合的构造体和用于仿真的构造体。即在综合后的可映射于硬件电路的设计实体中,一个实体只

18、对应一个构造体。在电硬件电路的设计实体中,一个实体只对应一个构造体。在电路中,如果实体代表一个器件符号,则构造体描述了这个符路中,如果实体代表一个器件符号,则构造体描述了这个符号的内部行为。当把这个符号例化成一个实际的器件安装到号的内部行为。当把这个符号例化成一个实际的器件安装到电路上时,则需要配置语句为这个例化的器件指定一个构造电路上时,则需要配置语句为这个例化的器件指定一个构造体(即指定一种实现方案),或由编译器自动选一个构造体。体(即指定一种实现方案),或由编译器自动选一个构造体。 VHDL217构造体的具体结构描述如下:构造体的具体结构描述如下: ARCHITECTURE ARCHIT

19、ECTURE 构造体名构造体名 OF OF 实体名实体名 ISIS 定义语句定义语句 内部信号内部信号, ,常数常数, ,数据类型数据类型, ,函数等的定义函数等的定义; ; BEGIN BEGIN 并行处理语句并行处理语句; END END构造体名构造体名; ; 构造体名由设计者自己选择,但当一个实体具有多个构造体名由设计者自己选择,但当一个实体具有多个构造体时,构造体的取名不可相同。构造体时,构造体的取名不可相同。OFOF后面紧跟的实体名后面紧跟的实体名表明了该构造体所对应的是哪一个实体。表明了该构造体所对应的是哪一个实体。VHDL218功能描述语句结构功能描述语句结构 块语句(块语句(B

20、LOCK) 进程语进程语(PROCESS) 信号赋值语句信号赋值语句子程序调用语句子程序调用语句元件例化语句元件例化语句定义语句定义语句构造体的构成图:构造体的构成图:VHDL2191.1.定义语句:定义语句: 定定义义语语句句位位于于 ARCHITECTURE ARCHITECTURE 和和 BEGIN BEGIN 之之间间,用用于于对对构构造造体体内内部部所使用的信号、常数、数据类型、元件、过程和函数进行定义。例如:所使用的信号、常数、数据类型、元件、过程和函数进行定义。例如: ARCHITECTURE ARCHITECTURE behavbehav OF OF muxmux IS IS

21、SIGNAL SIGNAL nesl:BITnesl:BIT; ; BEGIN BEGIN END END behavbehav; ; 信号定义和端口说明的语句一样,应有信号名和数据类型的说明。信号定义和端口说明的语句一样,应有信号名和数据类型的说明。因它是内部连接用的信号,故没有也不需有方向的说明。因它是内部连接用的信号,故没有也不需有方向的说明。 VHDL2202.2.并行处理语句:并行处理语句: 并行处理语句处于语句 BEGIN 和 END 之间,这些语句具体地描述了构造体的行为及其连接关系。 在构造体中的语句都是可以并行执行的,也就是说,语句的执行不以书写的语句顺序执行。 VHDL22

22、12.2 VHDL2.2 VHDL语言构造体的子结构描述语言构造体的子结构描述 在在规规模模较较大大的的电电路路设设计计中中,全全部部电电路路都都用用唯唯一一的的一一个个模模块块来来描描述述是是非非常常不不方方便便的的。为为此此,电电路路设设计计者者总总希希望望将将整整个个电电路路分分成成若若干干个个相相对对比比较较独独立立的的模模块块来来进进行行电电路路的的描描述述。这这样样,一一个个构构造造体体可可以以用用几几个个子子结结构构,即即相相对对比比较较独独立立的的几几个个模模块块来来构构成成。VHDLVHDL语语言言可可以以有有以以下下3 3种种形形式式的的子子结结构构描描述述语语句:句: B

23、LOCKBLOCK语句结构语句结构; ; PROCESSPROCESS语句结构语句结构; ; SUBPROGRAMSSUBPROGRAMS结构。结构。VHDL2222.2.1 BLOCK2.2.1 BLOCK语句结构描述:语句结构描述: 1.1.语句结构语句结构 采用采用BLOCKBLOCK语句描述局部电路的书写格语句描述局部电路的书写格 式如下所示:式如下所示: 块结构名:块结构名: BLOCK BLOCK BEGIN BEGIN (并行语句)(并行语句) END BLOCK END BLOCK 块结构名块结构名; ; VHDL223例例2.42.4ENTITYmuxISPORT(dO,d1

24、,sel:INBITq:OUTBIT);ENDmux;ARCHITECTUREconnectOFmuxISSIGNALtmpl,tmp2,tmp3:BIT;BEGINcale:BLOCKBEGINtmpl=dOANDsel;tmp2=dlAND(NOTsel);tmp3=tmplORtmp2;q=tmp3;ENDBLOCKcale;ENDconnect;VHDL2242.BLOCK2.BLOCK块和子原理图的关系块和子原理图的关系 人们在用计算机电路辅助设计工具输入电原理图时,人们在用计算机电路辅助设计工具输入电原理图时,往往将一个大规模的电原理图分割成多张子原理图,进往往将一个大规模的电原理

25、图分割成多张子原理图,进行输入和存档。同样在行输入和存档。同样在VHDLVHDL语言中也不例外,电路的构语言中也不例外,电路的构造体对应整个电原理图,而构造体可以由多个造体对应整个电原理图,而构造体可以由多个BLOCKBLOCK块构块构成,每一个成,每一个BLOCKBLOCK块对应一张子原理图。这样电原理图的块对应一张子原理图。这样电原理图的分割关系和分割关系和VHDLVHDL语言程序中用语言程序中用BLOCKBLOCK分割构造体的关系是分割构造体的关系是一一对应的。一一对应的。VHDL225图图2 23 BLOCK3 BLOCK块和子原理图关系块和子原理图关系VHDL2263.BLOCK3.

26、BLOCK中语句的并发性中语句的并发性在对程序进行仿真时,在对程序进行仿真时,BLOCKBLOCK语句中所描述的各个语句是语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。在可以并行执行的,它和书写顺序无关。在VHDLVHDL语言中将这样语言中将这样可以并行执行的语句称为并发语句可以并行执行的语句称为并发语句(Concurrent Statement)(Concurrent Statement)。当然在构造体内直接书写的语句也是并发的。当然在构造体内直接书写的语句也是并发的。 4.4.卫式卫式BLOCKBLOCK卫式卫式BLOCKBLOCK语句的格式为:语句的格式为: BLOCK BL

27、OCK 卫式布尔表达式卫式布尔表达式 当卫式布尔表达式为真时当卫式布尔表达式为真时( (例中例中clkclk11为真时为真时) ),该,该BLOCKBLOCK语句被启动执行;当卫式表达式为假时,该语句被启动执行;当卫式表达式为假时,该BLOCKBLOCK语句语句将不被执行。将不被执行。VHDL227例例2-5 D2-5 D触发器,采用卫式块语句触发器,采用卫式块语句ENTITY latch IS PORT(d, clk:IN BIT; q, qb: OUT BIT);END latch;ARCHITECTURE latch_guard OF latch ISBEGIN G1: BLOCK(cl

28、k=1) BEGIN q = GUARDED d AFTER 5ns; qb = GUARDED NOT(d) AFTER 7ns; END BLOCK G1;END latch_guard;VHDL2282.2.22.2.2进程(进程(PROCESSPROCESS)语句结构描述)语句结构描述1.PROCESS1.PROCESS语句的结构语句的结构 进程名:PROCESS(敏感信号参数表) 进程说明部分 BEGIN 顺序描述语句顺序描述语句 END PROCESS 进程标号; 进程名不是必需的。 进程说明部分定义一些局部量,如,数据类型、常数、变量、属性、子程序等。不能定义信号和共享变量。不能

29、定义信号和共享变量。VHDL229顺序描述语句部分可分:顺序描述语句部分可分: 信信 号号 赋赋 值值 语语 句句 : 即 在 进 程 中 将 计 算 或 处 理 的 结 果 向 信 号 (SIGNAL) 赋值。 变变量量赋赋值值语语句句:即在进程中以变量(VARIABLE)的形 式存储计算的中间值。 进进程程启启动动语语句句:当PROCESS的敏感信号参数表中没 有列出任何敏感量时,启动只能通过 进程启动语句WAIT语句。VHDL230 子子程程序序调调用用语语句句:对已定义的过程和函数进行 调用,并参与计算。 顺顺序序描描述述语语句句:包括IF语句、CASE语句、 LOOP语句、NULL语

30、句等。 进程跳出语句进程跳出语句:包括NEXT语句、EXIT语句。VHDL231例例2-62-6 ENTITY mux IS PROT(d0, dl, sel: IN BIT; q: OUT BIT); END mux ARCHITECTURE connect OF mux IS BEGIN cale: PROCESS(dO, dl, sel) VARIABLE tmpl, tmp2, tmp3:BIT; BEGIN tmpl := dO AND sel; tmp2 := dl AND (NOT sel); tmp3 := tmpl OR tmp2; q output output outpu

31、t output = sl; END CASE; END IF; END PROCESS pl;END ARCHITECURE s_mode; VHDL235 进程的参数表中未列出敏感信号,所以进程的启动需靠WAlT语句。在此,信号clock即为该进程的敏感信号。每当出现一个时钟脉冲clock时,即进入WAIT语句以下的顺序语句执行进程中。VHDL2364.4.进程(进程(PROCESSPROCESS)的同步扫描)的同步扫描 一一个个结结构构体体可可有有多多个个进进程程(PROCESS)(PROCESS),它它们们是是并并行行运运行行的的,同同一一进进程程(PROCESS)(PROCESS)中

32、中的的逻逻辑辑描描述述语语句句是是顺顺序序运运行行的的。并并行行运运行行的的进进程程(PROCESS)(PROCESS)之之间间的的通通信信可可以以通通过过信信号号。即即各各 PROCESSPROCESS之之间间还还可可以以一一边边进进行行通通信信,一一边边并并行行地同步执行地同步执行。VHDL237ENTITY pros_com IS PORT(event_a:IN BIT); END pros_com;ARCHITECTURE catch_ball OF pros_com IS SIGNAL to_a, to_b:BIT := 0; BEGIN A:PROCESS(event_a, to_

33、a) BEGIN IF (event_aEVENT AND event_a = 1) OR (to_aEVENT AND to_a =1) THEN to_b = 1 AFTER 20 ns, 0 AFTER 30 ns; END IF; END PROCESS A;VHDL238B:PROCESS(to_b) BEGIN IF (to_bEVENT AND to_b =1) THEN to_ab)THENtmp:=a;ELSEtmp:=b;ENDIF;RETURNtmp;ENDmax;ENDbpac;VHDL246例 2-10在构造体的语句中直接调用函数。LIBRARYIEEE.NEWLIB

34、;USEIEEE.STD_LOGIC_1164.ALL;USENEWLIB.bpac.ALL;ENTITYpeakdetectISPORT(data:INSTD_LOGIC_VECTOR(5DOWNTO0);clk,set:INSTD-LOGIC;dataout:OUTSTD_LOGIC-VECTOR(5DOWNTO0);ENDpeakdetectARCHITECTURErtlOFpeakdetectISSIGNALpeak:STD_LOGIC-VECTOR(5DOWNTO0);BEGINdataout=peak;PROCESS(clk)BEGINIF(clkEVENTANDclk=1)THE

35、NIF(set=1)THENpeak=data;ELSEpeak= 1 THEN -local除digit 其结果 = 1。 result(i):= 1; local := local digit; -相减 ELSE result(i):= 0; END IF; digit:=digit/2; END LOOP RETURN result;END int_to_tw16;VHDL261FUNCTION add(a,b:IN twl6) RETURN twl6 IS VARIABLE result:INTEGER; BEGIN result:=vect_to_int(a) + vect_to_i

36、nt(b); RETURN int_to_twl6(result); END add; FUNCTION sub(a,b:IN twl6) RETURN twl6 IS VARIABLE result:INTEGER; BEGIN result:=vect_to_int(a) - vect_to_int(b); RETURN int_to_twl6(result); END sub; END math;VHDL262程序包首程序包首 程程序序包包首首的的说说明明部部分分可可收收集集多多个个不不同同的的VHDLVHDL设设计计所所需需的的公公共共信信息息,其其中中包包括括数数据据类类型型说说明明

37、、信信号号说说明明、子子程程序序说说明明及及元元件件说说明明等等。所所有有这这些些信信息息虽虽然然也也可可以以在在每每一一个个设设计计实实体体中中进进行行逐逐一一单单独独的的定定义义和和说说明明,但但如如果果将将这这些些经经常常用用到到的的、并并具具有有一一般般性性的的说说明明定定义义放放在在程程序序包包中中供供随随时时调调用,显然可以提高设计的效率和程序的可读性。用,显然可以提高设计的效率和程序的可读性。VHDL263例例PACKAGEpaclIS-程序包首开始程序包首开始TYPEbyteISRANGE0TO255;-定义数据类型定义数据类型byteSUBTYPEnibbleISbyteRA

38、NGE0TO15;-定义子类型定义子类型nibbleCONSTANTbyte_ff:byte:=255;-定义常数定义常数byte_ffSIGNALaddend:nibble;-定义信号定义信号addendCOMPONENTbyteadder-定义元件定义元件PORT(a,b:INbyte;c:OUTbyte;overflow:OUTBOOLEAN);-布尔型布尔型ENDCOMPONENT;FUNCTIONmy_function(a:INbyte)RETURNbyte;-定义函数定义函数ENDpacl;-程序包首结束程序包首结束这是一个程序包首,其程序包名是这是一个程序包首,其程序包名是pac

39、l,VHDL264 由由于于元元件件和和函函数数必必须须有有具具体体的的内内容容,所所以以将将这这些些内内容容安安排排在在程程序序包包体体中中。如如果果要要使使用用这这个个程程序序包包中中的的所所有有定定义,可利用义,可利用USEUSE语句访问此程序包。语句访问此程序包。 LIBRARY WORKLIBRARY WORK: USE WORKUSE WORKpaclpaclALLALL; ENTITY ENTITY ARCHITHCYUREARCHITHCYURE 由由于于WORKWORK库库是是默默认认打打开开的的,所所以以可可省省去去LIBRARY LIBRARY WORK WORK 语句,

40、只要加入相应语句,只要加入相应USEUSE语句即可。语句即可。 下下一一例例是是另另一一个个在在现现行行WORKWORK库库中中定定义义程程序序包包并并立立即即使使用的示例。用的示例。VHDL265n例:例:PACKAGEsevenISSUBTYPEsegmentsISBIT_VECTOR(0TO6);TYPEbcdISRANGE0TO9;ENDseven;USEWORKsevenALL;ENTITYdecoderISPORT(input:bcd;drive:OUTsegments);ENDdecoder;ARCHITECTUREsimpleOFdecoderISBEGINWITHinputS

41、ELECTdrive=B”1111110”WHEN0,B”0110000”WHEN1,B”1101101”WHEN2,B”1111001”WHEN3,B”0110011”WHEN4,B”1011011”WHEN5,B”1011111”WHEN6,B”1110000”WHEN7,B”1011011”WHEN8,B”1011111”WHEN9,ENDsimple;VHDL266 此此例例是是一一个个4 4位位BCDBCD数数向向7 7段段译译码码显显示示码码转转换换的的VHDLVHDL描描述述。此此例例在在程程序序包包sevenseven中中定定义义了了两两个个新新的的数数据据类类型型segmen

42、tssegments和和bcdbcd。在在7 7段段显显示示译译码码器器decoderdecoder的的实实体体描描述述中中使使用用了了这这两两个个数数据据类类型型。由由于于WORKWORK库库默默认认是是打打开开的的,程序中只加入了程序中只加入了USEUSE语句语句。VHDL267程序包体程序包体 程序包体将包括在程序包首中已定义的子程序的子程序体。程序包体说明部分的组成内容可以是USE语句(允许对其它程序包的调用)、子程序定义、子程序体、数据类型说明、子类型说明和常数说明等。对于没有子程序说明的程序包体可以省去。 如果仅仅是定义数据类型或定义数据对象等内容,程序包体是不必要的,程序包首可以

43、独立地被使用:但在程序包中若有子程序说明时,则必须有对应的子程序包体。这时,子程序体必须放在程序包体中。 程序包常用来封装属于多个设计单元分享的信息,程序包定义的信号、变量不能在设计实体之间共享。常用的预定义的程序包有:VHDL268 STD_LOGIC_1164STD_LOGIC_1164程序包:程序包: STD_LOGIC_1164STD_LOGIC_1164程程序序包包是是IEEEIEEE库库中中最最常常用用的的程程序序包包,是是IEEEIEEE的的标标准准程程序序包包。其其中中包包含含了了一一些些数数据据类类型型、子子类类型型和和函函数数的的定定义义,这这些些定定义义将将VHDLVHD

44、L扩扩展展为为一一个个能能描描述述多多值值逻逻辑辑( (即即除除具具有有“0”0”和和“1”1”以以外外还还有有其其它它的的逻逻辑辑量量,如如高高阻阻态态“Z”Z”、不不定定态态“X”X”等等) )的硬件描述语言,很好地满足了实际数字系统的设计需求。的硬件描述语言,很好地满足了实际数字系统的设计需求。 STD_LOGIC_ARITHSTD_LOGIC_ARITH程序包:程序包: STD_LOGIC_ARlTHSTD_LOGIC_ARlTH预预先先编编译译在在IEEEIEEE库库中中,是是SynopsysSynopsys公公司司的的程程序序包包。此此程程序序包包在在STD_LOGIC_1164S

45、TD_LOGIC_1164程程序序包包的的基基础础上上扩扩展展了了三三个个数数据据类类型型UNSIGNEDUNSIGNED、SIGNEDSIGNED和和SMALL_INTSMALL_INT,并并为为其其定定义义了了相相关关的的算术运算符和转换函数。算术运算符和转换函数。 程程序序包包STD_LOGIC_ARITHSTD_LOGIC_ARITH、STD_LOGIC_UNSIGNESTD_LOGIC_UNSIGNED D和和STD_LOGIC_SIGNEDSTD_LOGIC_SIGNED虽虽然然未未成成为为IEEEIEEE标标准准,但但已已经经成成为为事事实实上上的的工工业标准,绝大多数的业标准,

46、绝大多数的VHDLVHDL综合器和综合器和VHDLVHDL仿真器都支持它们。仿真器都支持它们。VHDL2692.3.32.3.3配置配置配置配置( (ConngurationConnguration) )语句描述层与层之间的连接关系以语句描述层与层之间的连接关系以及实体与结构之间的连接关系。通常在大而复杂的及实体与结构之间的连接关系。通常在大而复杂的VHDLVHDL工程工程设计中,设计者可以利用这种配置语句来选择不同的构造体,设计中,设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一个实体时,可以利使其与要设计的实体相对应。在仿真某一个实体时,可以利用配置来选择

47、不同的构造体,进行性能对比试验以得到性能用配置来选择不同的构造体,进行性能对比试验以得到性能最佳的构造体。配置语句的一般格式为:最佳的构造体。配置语句的一般格式为: CONFIGURATION CONFIGURATION 配置名配置名 OF OF 实体名实体名 ISIS 语句说明语句说明 END END 配置名配置名; ; VHDL270例:实体例:实体nand的结构体两种描述方法;结构体的结构体两种描述方法;结构体one和结构体和结构体twoLIBRARYIEEEE;USEIEEESTD_LOGIC_1164ALL;ENTITYnandISPORT(a:INSTD_LOGIC;-端口说明端口

48、说明b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYnand;-实体说明结束实体说明结束ARCHITECTUREoneOFnandIS-nand的第一个结构体的第一个结构体oneBEGINc=NOT(aANDb);ENDARCHITECTUREone;-结构体结构体one结束结束ARCHITECTUREtwoOFnandIS-nand的第二个结构体的第二个结构体twoBEGINcs,b=qf,c=q);-元件例化语句元件例化语句U2:nandPORTMAP(a=q,b=r,c=qf);-元件例化语句元件例化语句ENDrsf;-结构体结构体rsf结束结束VHDL27

49、3CONFIGURATIONselOFrs1IS-实实体体rs1的的配配置置名名叫叫selFORrsf-在实体在实体rs1的结构体的结构体rsf说明说明FORul,u2:nandnand-中的元件中的元件ul,u2,与非门,与非门USEENTITYWORK.nand(two);-使用使用WORK库中的实体名为库中的实体名为ENDFOR;-nand中的中的twoENDFOR;ENDsel;-配置结束配置结束这里假设与非门的设计实体己进入工作库这里假设与非门的设计实体己进入工作库WORK。VHDL274例:例:2-14计数器计数器LIBRARYSTD;USESTD.STD_LOGIC.ALL;EN

50、TITYcounterISPORT(load,clear,clk:INT_WLOGIC;-时钟时钟clk,清零,清零clear,置数,置数load.data_in:ININTEGER;-数据输入数据输入data_out:OUTINTEGER);-数据输出数据输出ENDcounter;ARCHITECTUREcount_255OFcounterISBEGINPROCESS(clk)-进程语句,敏感量进程语句,敏感量clkVARIABLEcount:INTEGER:=0;-进程说明,变量进程说明,变量count,整型,整型,BEGIN-赋值赋值0IFclear=1THEN-清零清零count:=0

51、;ELSIFload=1THEN-置数置数count:=data_in;ELSIF(clkEVENT)AND(clk=1)AND-计数计数(clkLAST_VALUE=0)THENVHDL275IF(count=255)THEN-计满后复计满后复0count:=0;ELSEcount:=count+1;-计数计数ENDIF;ENDIF;data_out=count;ENDPROCESS;ENDcount_255;ARCHITECTUREcount_64KOFcounterISBEGINPROCESS(clk)VARIABLEcount:INTEGER:=0;BEGINIF(clear=1)TH

52、NEcount:=0;ELSIFload=1THENcount:=data_in;ELSIF(clkEVENT)AND(clk=1)AND-clkEVENT表示表示clk有有-变化返回变化返回1。VHDL276(clkLAST_VALUE=0)THENIF(count=65535)THENcount:=0;ELSEcount:=count+1;ENDIF;ENDIF;data_out=count;ENDPROCESS;ENDcount_64K;-结构体结构体count_64K结束结束CONFIGURATIONsmall_countOFcounterISFORcount_255;-是结构体是结构

53、体count_255ENDFOR;ENDsmall_count;CONFIGURATIONbig_countOFcounterISFORcount_64K-是结构体是结构体count_64KENDFOR;ENDbig_count;VHDL277例例2-15.反相器和三输入与门电路描述。反相器和三输入与门电路描述。LIBRARYSTD;USESTD.STD_LOGIC.ALL;-使用使用STD库的两个程序包。库的两个程序包。USESTD.STD_TTL.ALL;ENTITYinvIS-实体实体inv的说明的说明PORT(a:INT_WLOGIC;-端口说明端口说明b:OUTT_WLOGIC);E

54、NDinv;-实体说明结束实体说明结束ARCHITECTUREbehaveOFinvIS-实体实体inv的结构体的结构体behaveBEGIN-结构体开始结构体开始B=NOT(a)AFTER5ns;-非门描述非门描述ENDbehave;-结构体结构体behave结束结束CONFIGURATIONinvconOFinvIS-实体实体inv的配置取名的配置取名invcomFORbehave-是是behaveENDFOR;ENDinvcon;USESTD.STD_LOGIC.ALL;-使用使用STD库的两个程序包。库的两个程序包。USESTD.STD_TTL.ALL; VHDL278ENTITYan

55、d3IS-实体实体and3的说明的说明PORT(al,a2,a3:INT_WLOGIC;-端口说明端口说明ol:OUTT_WLOGIC);ENDand3;ARCHITECTUREbehaveOFand3ISBEGINo1=alANDa2ANDa3AFTER5ns;-与门描述与门描述ENDbehave;CONFIGURATIONand3conOFand3IS-实体实体inv的配置取名的配置取名and3conFORbehave-是是behaveENDFOR;ENDand3con; VHDL279译码器译码器译码是编码的逆过程,即把二元序列还原成信息(编码译码是编码的逆过程,即把二元序列还原成信息(

56、编码对象),实现译码的电路叫译码器。对象),实现译码的电路叫译码器。译码器:二进制译码器译码器:二进制译码器二二十进制(十进制(BCDBCD)译码器)译码器显示译码器显示译码器 二进制译码器二进制译码器 把二进制代码的各种状态,翻译成对应信号的电路,叫把二进制代码的各种状态,翻译成对应信号的电路,叫二进制译码器,也叫做变量译码器(因为它把输入变量的取二进制译码器,也叫做变量译码器(因为它把输入变量的取值全翻译出来了)值全翻译出来了)。VHDL280二进制译码器二进制译码器VHDL281n例例2-16.构成译码器的程序构成译码器的程序LIBRARYSTDUSESTD.STD_LOGIC.ALL;

57、ENTITYdecodeISPORT(a,b,en:INT_WLOGIC;q0,q1,q2,q3:OUTT_WLOGIC);ENDdecode;ARCHITECTUREstructuralOFdecodeISCOMPONENTinvPORT(a:INT_WLOGIC;-调用元件说明,用调用元件说明,用invb:OUTT_WLOGIC);ENDCOMPONENT;COMPONENTand3-调用元件说明,用调用元件说明,用and3PORT(al,a2,a3:INT_WLOGIC;ol:OUTT_WLOGIC);ENDCOMPONENTSIGNALnota,notb:T_WLOGIC;-说明语句,

58、结构体要用信号说明语句,结构体要用信号nota,notbVHDL282BEGINIl:inv-元件例化语句元件例化语句PORTMAP(a,nota);I2:invPORTMAP(b,notb);A1:and3PORTMAP(nota,en,notb,q0);A2:and3PORTMAP(a,en,notb,q1);A3:and3PORTMAP(nota,en,b,q2);A4:and3PORTMAP(a,en,b,q3);ENDstructural;VHDL283例例217.低层次配置的选择配置低层次配置的选择配置CONFIGURATIONdecode_llconOFdecodeIS-实体实体

59、decde的配置取名的配置取名decode_llconFORstructural-是结构体是结构体structuralFORI1:invUSECONFIGURATIONWORK.invcon;-I1是是inv,用工作库,用工作库ENDFOR;-中的配置中的配置invconFORI2:invUSECONFIGURATIORWORK.invcon;-I2是是inv,用工作库,用工作库ENDFOR;-中的配置中的配置invconFORALL:and3USECONFIGURATIONWORK.and3con;-其它是其它是and3,ENDFOR;-用工作库中的用工作库中的ENDstructural;配

60、置配置ENDdecode_llcon;-and3conVHDL284例例218.实体与构造体对应的配置实体与构造体对应的配置CONFIGURATIONdecode_eaconOFdecodeIS-实体实体decode的配置取名的配置取名decode_eaconFORstructural-是构造体是构造体structuralFORI1:invUSEENTITYWORK.inv(behave);-I1是是inv,用工作库中,用工作库中ENDFOR; -的实体的实体inv的结构体的结构体behaveFOROTHERS:invUSEENTITYWORK.inv(behave);-其它其它invENDFOR;FORA1:and3USEENTITYWORK.and3(behave);-A1是是and3,用库,用库ENDFOR;-中中的的实实体体and3的的结结构构体体behaveFOROTHERS:and3USEENTITYWORK.and3(behave);-其它其它and3ENDFOR;ENDstructural;ENDdecode_eacon;VHDL285

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号