1、第四章第四章 VHDL语言程序设计语言程序设计 VHDL语言的英文全名是语言的英文全名是Very High Speed Integrated Circuit Hardware Description Language 即超高速集成电路硬件描述语言。它是即超高速集成电路硬件描述语言。它是70年代和年代和80年代初,由美国国防部为他们的超高速集成电路年代初,由美国国防部为他们的超高速集成电路VHSIC计划提出的硬件描述语言,它支持硬件的设计划提出的硬件描述语言,它支持硬件的设计、综合、验证和测试。计、综合、验证和测试。1986年年3月,月,IEEE开始致开始致力于力于VHDL的标准化工作,讨论的标
2、准化工作,讨论VHDL语言标准。语言标准。IEEE于于1987年年12月公布了月公布了VHDL的标准版本(的标准版本(IEEE STD 1076/1987););1993年年VHDL重新修订,形成新重新修订,形成新的标准即的标准即IEEE STD 1076-1993)。什么是什么是VHDL语言?语言?从此以后,美国国防部实施新的技术标准,要求从此以后,美国国防部实施新的技术标准,要求电子系统开发商的合同文件一律采用电子系统开发商的合同文件一律采用VHDL文档。即文档。即第一个官方第一个官方VHDL标准得到推广、实施和普及。标准得到推广、实施和普及。VHDL语言描述能力极强,覆盖了逻辑设计的诸多
3、语言描述能力极强,覆盖了逻辑设计的诸多领域和层次,并支持众多的硬件模型。设计者的原始描领域和层次,并支持众多的硬件模型。设计者的原始描述是非常简练的硬件描述,经过述是非常简练的硬件描述,经过EDA工具综合处理,最工具综合处理,最终生成付诸生产的电路描述或版图参数描述的工艺文件。终生成付诸生产的电路描述或版图参数描述的工艺文件。VHDL有过两个标准:IEEE Std 1076-1987(called VHDL 1987)IEEE Std 1076-1993(called VHDL 1993)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21
4、a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y=a WHEN s=0 ELSE b ;END ARCHITECTURE one;实体结构体mux21a实体实体mux21a结构体结构体2选选1多路选择器的多路选择器的VHDL描述描述库程序包一、一、VHDLVHDL程序的基本结构程序的基本结构 一个相对完整的一个相对完整的VHDLVHDL程序程序(或称为设计实或称为设计实体体)具有如下图所示的比较固定的结构,即至具有如下图所示的比较固定的结构,即至少应
5、包括三个基本组成部分:少应包括三个基本组成部分:1 1、库、程序包使用说明;、库、程序包使用说明;2 2、实体说明;、实体说明;3 3、与实体对应的结构体说明;、与实体对应的结构体说明;库、程序包使用说明配置(CONFIGURATION)结构体(ARCHITECTURE)实体(ENTITY)PORT端口说明结构体说明GENERIC类属说明体实计设结构体功能描述VHDL语言再划分详细一些,通常包含五部分:语言再划分详细一些,通常包含五部分:1、库、库(Library):专门存放预编译程序包的地方专门存放预编译程序包的地方;2、包集合、包集合(Package):存放各个设计模块共享的存放各个设计模
6、块共享的数据类型、常数和子程序等数据类型、常数和子程序等;3、实体、实体(Entity):用于描述所设计的系统的外部用于描述所设计的系统的外部接口信号或引脚接口信号或引脚;4、构造体、构造体(Architecture):用于描述系统内部的用于描述系统内部的结构和行为;建立输入和输出之间的关系结构和行为;建立输入和输出之间的关系;5、配置、配置(Configuration):安装具体元件到实安装具体元件到实体体结构体对,可以被看作是设计的零件清单结构体对,可以被看作是设计的零件清单;二、实体语句结构二、实体语句结构1.1.实体说明单元的常用语句结构如下:实体说明单元的常用语句结构如下:ENTIT
7、Y ENTITY 实体名实体名 ISIS GENERIC(GENERIC(类属表类属表);PORT(PORT(端口表端口表);END ENTITY END ENTITY 实体名实体名;2 2类属类属(GENERIC)GENERIC)说明语句说明语句 类属类属(GENERIC)GENERIC)参量是一种端口界面常数,参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说常以一种说明的形式放在实体或块结构体前的说明部分,说明明部分,说明内部电路结构和规模内部电路结构和规模 。类属说明的一般书写格式如下:类属说明的一般书写格式如下:GENERIC(GENERIC(常数名:数据类型常数名:
8、数据类型:设定值:设定值 ;常数名:数据类型;常数名:数据类型:=:=设定值设定值);【例】【例】ENTITY MCK ISENTITY MCK IS GENERIC(GENERIC(WIDTHWIDTH:INTEGER:=16)INTEGER:=16);PORT(ADD_BUS PORT(ADD_BUS:OUT OUT STD_LOGIC_VECTOR(STD_LOGIC_VECTOR(WIDTHWIDTH-1 DOWNTO 0)-1 DOWNTO 0);.在这里,在这里,GENERICGENERIC语句对实体语句对实体MCKMCK的作为地址总的作为地址总线的端口线的端口ADD_BUSADD
9、_BUS的数据类型和宽度作了定义,的数据类型和宽度作了定义,即定义即定义ADD_BUSADD_BUS为一个为一个1616位的位矢量。位的位矢量。3 3PORTPORT端口说明端口说明 由由PORTPORT引导的端口说明语句是对于一个引导的端口说明语句是对于一个设计实体界面的说明。设计实体界面的说明。实体端口说明的一实体端口说明的一般书写格式如下:般书写格式如下:PORT(PORT(端口名:端口模式端口名:端口模式 数据类型;数据类型;端口名:端口模式端口名:端口模式 数据类型数据类型);端口名是赋予每个系统引脚的名称,一般用端口名是赋予每个系统引脚的名称,一般用几个英文字母组成几个英文字母组成
10、ENTITY ENTITY 实体名实体名 IS IS PORTPORT(端口名端口名:端口模式端口模式 数据类型名数据类型名;端口名端口名:端口模式端口模式 数据类型名数据类型名;端口名端口名:端口模式端口模式 数据类型名数据类型名;端口名端口名:端口模式端口模式 数据类型名数据类型名;端口名端口名:端口模式端口模式 数据类型名数据类型名);END END 实体名实体名;端口模式端口模式:IEEE 1076 IEEE 1076标准包中定义了四种常用的端标准包中定义了四种常用的端口模式,各端口模式的功能及符号分别见表口模式,各端口模式的功能及符号分别见表端端 口口 模模 式式端口模式说明端口模式
11、说明(以设计实体为主体以设计实体为主体)IN输入,只读模式,将变量或信号信息通过该端口输入,只读模式,将变量或信号信息通过该端口读入读入OUT输出,单向赋值模式,将信号通过该端口输出输出,单向赋值模式,将信号通过该端口输出BUFFER具有读功能的输出模式,可以读或写,只能有一具有读功能的输出模式,可以读或写,只能有一个驱动源个驱动源INOUT双向,可以通过该端口读入或写出信息双向,可以通过该端口读入或写出信息数据类型:数据类型:INOUTBUFFERINOUTSTD_LOGICSTD_LOGIC_VECTOR(7 DOWNTO 0 )INTEGERREALBITBIT_VECTOR(0 TO
12、7)【例】【例】PORT (n0,n1,select:IN BIT;q:OUT BIT;bus:OUT BIT_VECTOR(7 DOWNTO 0);本例中,本例中,n0,n1,select 是输入引脚,属于是输入引脚,属于BIT型,型,q是输出引脚,是输出引脚,BIT型,型,bus 是一组是一组8位二位二进制总线,属于进制总线,属于BIT_VECTOR LIBRARY IEEE;USE IEEE.STD_LOGIC.1164.ALL;ENTITY mm IS PORT(n0,n1,select:IN STD_LOGIC;Q :OUT STD_LOGIC;Bus :OUT STD_LOGIC_
13、VECTOR(7 DOWNTO 0);END mm;在此例中端口数据类型取自在此例中端口数据类型取自IEEE标准库(该库中有标准库(该库中有数据类型和函数的说明),其中数据类型和函数的说明),其中STD_LOGIC 取值为取值为“0”,“1”,“X”和和“Z”等等。因为使用了库所以在实体说明前要增加库说明语句。因为使用了库所以在实体说明前要增加库说明语句。【例】【例】2 2输入与门的实体描述。输入与门的实体描述。LIBRARY IEEE;USE IEEE.STD_LOGIC.1164.ALL;ENTITY AND2 IS GENERIC(RISEW:TIME:=1 ns;FALLW:TIME:
14、=1 ns);PORT(A1:IN STD_LOGIC;A0:IN STD_LOGIC;Z0:OUT STD_LOGIC);END ENTITY AND2;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY m60 ISPORT (clk:IN std_logic;clear:IN std_logic;qh:buffer std_logic_vector(3 downto 0);ql:buffer std_logic_vector(3 downto 0);END m60;【例】【例】EI
15、TITY 设计时注意点设计时注意点l实体名与文件名要一样实体名与文件名要一样l文件存放位置文件存放位置l取名要规范取名要规范 (实体名、端口信号名实体名、端口信号名)l合理确定设计所需的端口信号合理确定设计所需的端口信号三、三、ARCHITECTURE的基本结构的基本结构 构造体用于描述系统内部的结构和行为构造体用于描述系统内部的结构和行为 构造体是实体的一个重要部分,每一个实体构造体是实体的一个重要部分,每一个实体都有一个或一个以上的构造体。(都有一个或一个以上的构造体。(对于具有多个结构体的实体,必须用CONFIGURATION(配置)语句指明用于综合的结构体和用于仿真的结构体)一个完整的
16、结构体一般由两个基本层次组成:1、对数据类型、常数、信号、子程序和元件等元素的说明部分。2、描述实体逻辑行为的,以各种不同的描述风格表达的功能描述语句。进程语句块语句体结构明说体构结述能描功体构结元件例化语句子程序调用语句信号赋值语句常数说明数据类型说明信号说明例化元件说明子程序说明1.结构体的一般语句格式结构体的一般语句格式 结构体的语句格式如下:结构体的语句格式如下:ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 说明语句说明语句;BEGIN 功能描述语句功能描述语句;END ARCHITECTURE 结构体名结构体名;2结构体说明语句结构体说明语句 结构体中的说明语
17、句是对结构体的功结构体中的说明语句是对结构体的功能描述语句中将要用到的信号能描述语句中将要用到的信号(SIGNAL)、数数据类型据类型(TYPE)、常数常数(CONSTANT)、元件元件(COMPONENT)、函数函数(FUNCTION)和过程和过程(PROCEDURE)等加以说明的语句。等加以说明的语句。3功能描述语句结构功能描述语句结构 功能描述语句结构可以含有五种不同类功能描述语句结构可以含有五种不同类型的、以并行方式工作的语句结构,而在每型的、以并行方式工作的语句结构,而在每一语句结构的内部可能含有并行运行的逻辑一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。描
18、述语句或顺序运行的逻辑描述语句。各语句结构的基本组成和功能分别是:各语句结构的基本组成和功能分别是:(1)块语句是由一系列并行执行语句构成的块语句是由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组组合体,它的功能是将结构体中的并行语句组成一个或多个模块。成一个或多个模块。(2)进程语句定义顺序语句模块,用以将从进程语句定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其他外部获得的信号值,或内部的运算数据向其他的信号进行赋值。的信号进行赋值。(3)信号赋值语句将设计实体内的处理结果信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。向定义的信号或界面
19、端口进行赋值。(4)子程序调用语句用于调用一个已设计好子程序调用语句用于调用一个已设计好的子程序。的子程序。(5)元件例化语句对其他的设计实体作元件元件例化语句对其他的设计实体作元件调用说明,并将此元件的端口与其他的元件、调用说明,并将此元件的端口与其他的元件、信号或高层次实体的界面端口进行连接。信号或高层次实体的界面端口进行连接。【例】【例】ENTITY nax IS PORT(a,b :IN BIT;s :IN BIT;y :OUT BIT);END nax;ARCHITECTURE dataflow OF nax IS BEGIN yset,b=qb,c=q)U2:nand2 PORT MAP(a=reset,b=q,c=qb)END rsff1;ARCHITECTURE rsff2 OF rs ISBEGIN q=NOT(qb AND set);qb=NOT(q AND reset);END rsff2本次课程内容小结:本次课程内容小结:库、程序包库、程序包实体实体结构体结构体配置语句配置语句VHDLVHDL程序结构程序结构PORTPORT语句语句功能描述语句功能描述语句端口端口模式、数据类型、语法基本格式模式、数据类型、语法基本格式(;begin end begin end 等等)