第二章ⅤHDL硬件描述语言 2.1VHDL概述 211ⅤHDL的特点 VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,支持 从系统级到门级所有层次的设计,在使用ⅤHDL语言进行逻辑电路设计时,不需要考虑 特定电路制造工艺的影响,其设计覆盖所有的逻辑电路形式。其语法结构以严谨著称,适 合于复杂逻辑电路的设计。由于VHDL语言来源于C、 Fortran等计算机高级语言,在VHDL 语言中保留了部分高级语言的原语句,如语句、子程序和函数等,便于阅读和应用。具 体特点如下 1.支持从系统级到门级电路的描述,既支持自底向上( bottom-up)的设计也支持从 顶向下(top-down)的设计,同时也支持结构、行为和数据流三种形式的混合描 述 2.VHDL的设计单元的基本组成部分是实体( entity)和结构体( architecture),实 体包含设计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行 为,便于各模块之间数据传送。利用单元( componet)、块( block)、过程( procure) 和函数( function)等语句,用结构化层次化的描述方法,使复杂电路的设计更加 简便。采用包的概念,便于标准设计文档资料的保存和广泛使用。 3.VHDL语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据 类型,ⅤHDL的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向 量型。既支持预定义的数据类型,又支持自定义的数据类型,其定义的数据类型 具有明确的物理意义,VHDL是强类型语言。 4.数字系统有组合电路和时序电路,时序电路又分为同步和异步,电路的动作行为 有并行和串行动作,VHDL语言常用语句分为并行语句和顺序语句,完全能够描 述复杂的电路结构和行为状态 212ⅤHDL语言的基本结构 VHDL语言是数字电路的硬件描述语言,在语句结构上吸取了 Fortran和C等计算机 高级语言的语句,如IF语句、循环语句、函数和子程序等,只要具备高级语言的编程技 能和数字逻辑电路的设计基础,就可以在较短的时间内学会VHDL语言。但是VHDL毕 竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及 描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法 规定,会使初学者感到枯草无味,不得要领。较好的办法是选取几个具有代表性的ⅤHDL 程序实例,先介绍整体的程序结构,再逐步介绍程序中的语法概念。 个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电 路,或者是一个计数器,也可以是一个CPU。一般情况下,一个完整的ⅤHDL语言程序 至少要包含实体、结构体和程序包三个部分。实体给出电路单元的外部输入输出接口信号 和引脚信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结 构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等 例2-1-1用ⅤHDL语言描述一位全加器。一位全加器的输入信号是A,B,Ci,输出信 号是S和Co。全加器的真值表如表2-1-1所列 表2-1-1全加器的真值表 输入信号 输出信号 Ci 125
第二章 VHDL 硬件描述语言 2.1 VHDL概述 2.1.1 VHDL 的特点 VHDL 语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,支持 从系统级到门级所有层次的设计,在使用 VHDL 语言进行逻辑电路设计时,不需要考虑 特定电路制造工艺的影响,其设计覆盖所有的逻辑电路形式。其语法结构以严谨著称,适 合于复杂逻辑电路的设计。由于 VHDL 语言来源于 C、Fortran 等计算机高级语言,在 VHDL 语言中保留了部分高级语言的原语句,如 if 语句、子程序和函数等,便于阅读和应用。具 体特点如下: 1. 支持从系统级到门级电路的描述,既支持自底向上(bottom-up)的设计也支持从 顶向下(top-down)的设计,同时也支持结构、行为和数据流三种形式的混合描 述。 2. VHDL 的设计单元的基本组成部分是实体(entity)和结构体(architecture),实 体包含设计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行 为,便于各模块之间数据传送。利用单元(componet)、块(block)、过程(procure) 和函数(function)等语句,用结构化层次化的描述方法,使复杂电路的设计更加 简便。采用包的概念,便于标准设计文档资料的保存和广泛使用。 3. VHDL 语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据 类型,VHDL 的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向 量型。既支持预定义的数据类型,又支持自定义的数据类型,其定义的数据类型 具有明确的物理意义,VHDL 是强类型语言。 4. 数字系统有组合电路和时序电路,时序电路又分为同步和异步,电路的动作行为 有并行和串行动作,VHDL 语言常用语句分为并行语句和顺序语句,完全能够描 述复杂的电路结构和行为状态。 2.1.2 VHDL 语言的基本结构 VHDL 语言是数字电路的硬件描述语言,在语句结构上吸取了 Fortran 和 C 等计算机 高级语言的语句,如 IF 语句、循环语句、函数和子程序等,只要具备高级语言的编程技 能和数字逻辑电路的设计基础,就可以在较短的时间内学会 VHDL 语言。但是 VHDL 毕 竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及 描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法 规定,会使初学者感到枯草无味,不得要领。较好的办法是选取几个具有代表性的 VHDL 程序实例,先介绍整体的程序结构,再逐步介绍程序中的语法概念。 一个 VHDL 语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电 路,或者是一个计数器,也可以是一个 CPU。一般情况下,一个完整的 VHDL 语言程序 至少要包含实体、结构体和程序包三个部分。实体给出电路单元的外部输入输出接口信号 和引脚信息,结构体给出了电路单元的内部结构和信号的行为特点, 程序包定义在设计结 构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。 例 2-1-1 用 VHDL 语言描述一位全加器。一位全加器的输入信号是 A, B, Ci,输出信 号是 S 和 Co。全加器的真值表如表 2-1-1 所列。 表 2-1-1 全加器的真值表 输入信号 输出信号 A B Ci S Co 0 0 0 0 0 0 0 1 1 0 125
0 0100 一位全加器的逻辑表达式是 S=A⊕BCi CoFAB+ACi+BCi 位全加器的电路如图2-1-1所示 s Co CI a B 图2-1-1一位全加器电路图 全加器的ⅤHDL程序的文件名称是 fulladderⅤHD,其中ⅤHD是VHDL程序的文件 扩展名,程序如下 LIBRARY IEEE IEEE标准库 程序包{ USE IEEE STD LOGIC.164AL USE IEEE STD LOGIC ARITH.ALL USE IEEE STD LOGIC UNSIGNED.ALL ENTITY fulladder Is fulladder是实体名称 PORTO 实体 A, B, Ci: IN STD LOGIC, 定义输入输出信号 Co S OUT STD LOGIC END fulladder ARCHITECTURE addstr of fulladder is - addstr是结构体名 结构体 BEGIN S<=AⅩ OR B XOR Ci Co <=(AAND B)OR(AAND CI)OR (B AND Ci) END adds 从这个例子中可以看出,一段完整的ⅤHDL代码主要由以下几部分组成 第一部分是程序包,程序包是用ⅤHDL语言编写的共享文件,定义在设计结构体和 实体中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为 IEEE的程序包库中。 第二部分是程序的实体,定义电路单元的输入/输出引脚信号。程序的实体名称 fulladder是任意取的,但是必须与VHDL程序的文件名称相同。实体的标识符是 ENTITY 实体以 ENTITY开头,以END结束。其中,定义A、B、Ci是输入信号引脚,定义Co 和S是输出信号引脚 第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。结构体有三种描述
0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 一位全加器的逻辑表达式是: S=A⊕B⊕Ci Co=AB+ACi+BCi 一位全加器的电路如图 2-1-1 所示 图 2-1-1 一位全加器电路图 Ci A B S Co 全加器的 VHDL 程序的文件名称是 fulladder.VHD,其中 VHD 是 VHDL 程序的文件 扩展名,程序如下: LIBRARY IEEE; --IEEE 标准库 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fulladder IS -- fulladder 是实体名称 PORT( A, B, Ci : IN STD_LOGIC; --定义输入/输出信号 Co, S : OUT STD_LOGIC ); END fulladder; ARCHITECTURE addstr OF fulladder IS --addstr 是结构体名 BEGIN S <= A XOR B XOR Ci; Co <= (AAND B) OR (AAND Ci) OR (B AND Ci); 程序包 实体 结构体 END addstr; 从这个例子中可以看出,一段完整的 VHDL 代码主要由以下几部分组成: 第一部分是程序包,程序包是用 VHDL 语言编写的共享文件,定义在设计结构体和 实体中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为 IEEE 的程序包库中。 第二部分是程序的实体,定义电路单元的输入/输出引脚信号。程序的实体名称 fulladder 是任意取的,但是必须与 VHDL 程序的文件名称相同。实体的标识符是 ENTITY, 实体以 ENTITY 开头,以 END 结束。其中,定义 A、B、Ci 是输入信号引脚,定义 Co 和 S 是输出信号引脚。 第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。结构体有三种描述 126
方式,分别是行为( BEHAVIOR)描述、数据流( DATAFLOW)描述方式和结构( STRUCTURE) 描述方式,其中数据流( DATAFLOW)描述方式又称为寄存器(RIL)描述方式,例中 结构体的描述方式属于数据流描述方式。结构体以标识符 ARCHITECTURE开头,以END 结尾。结构体的名称 addstr是任意取的。 213ⅤHDL语言的实体( ENTITY)说明语句 实体是VHDL程序设计中最基本的组成部分,在实体中定义了该设计芯片中所需要 的输入输出信号引脚。端口信号名称表示芯片的输入输出信号的引脚名,这种端口信号 通常被称为外部信号,信号的输入输出状态被称为端口模式,在实体中还定义信号的数 据类型 实体说明语句的格式为: ENTITY实体名称IS PORT 端口信号名称1:输入输出状态数据类型; 端口信号名称2:输入输出状态数据类型; 端口信号名称N:输入输出状态数据类型 ); END实体名称; 例2-1-2一个同步十六进制加法计数器,带有计数控制、异步清零、和进位输出等功 能。计数器电路图如图2-1-2所示,电路有三个输入端和五个输出端,分别是时钟脉冲输 入端CLK,计数器状态控制端EN,异步清零控制端Rd,四位计数输出端Q,Ql,Q2,Q3 和一个进位输出端Co。当计数器输出0000~1110时,Co=0,只有当计数器输出111时, Co=1。电路的功能表如表2-1-2所示 Q0 Q1 Q2 Q3 CLK 图2-1-2同步十六进制加法计数器 表2-1-2同步十六进制加法计数器的功能表 控制端 CLK Rd工作状态 0异步清零 上升沿 计数 该设计的实体部分如下: ENTITY cntm16 IS PORT( EN. IN STD LOGIO 127
方式,分别是行为(BEHAVIOR)描述、数据流(DATAFLOW)描述方式和结构(STRUCTURE) 描述方式,其中数据流(DATAFLOW)描述方式又称为寄存器(RTL)描述方式,例中 结构体的描述方式属于数据流描述方式。结构体以标识符 ARCHITECTURE 开头,以 END 结尾。结构体的名称 addstr 是任意取的。 2.1.3 VHDL 语言的实体(ENTITY)说明语句 实体是 VHDL 程序设计中最基本的组成部分,在实体中定义了该设计芯片中所需要 的输入/输出信号引脚。端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号 通常被称为外部信号,信号的输入/输出状态被称为端口模式,在实体中还定义信号的数 据类型。 实体说明语句的格式为: ENTITY 实体名称 IS PORT( 端口信号名称 1:输入/输出状态 数据类型; 端口信号名称 2:输入/输出状态 数据类型; … 端口信号名称 N:输入/输出状态 数据类型 ); END 实体名称; 例 2-1-2 一个同步十六进制加法计数器,带有计数控制、异步清零、和进位输出等功 能。计数器电路图如图 2-1-2 所示,电路有三个输入端和五个输出端,分别是时钟脉冲输 入端 CLK,计数器状态控制端 EN,异步清零控制端 Rd,四位计数输出端 Q0, Q1, Q2, Q3 和一个进位输出端 Co。当计数器输出 0000~1110 时,Co=0,只有当计数器输出 1111 时, Co=1。电路的功能表如表 2-1-2 所示。 Q0 Q1 Q2 Q3 EN Co Rd CLK 图 2-1-2 同步十六进制加法计数器 表 2-1-2 同步十六进制加法计数器的功能表 控制端 CLK EN Rd 工作状态 × × 0 异步清零 上升沿 1 1 计数 × 0 1 保持 该设计的实体部分如下: ENTITY cntm16 IS PORT ( EN : IN STD_LOGIC; 127
Rd: IN STD LOGIC. CLK. IN STD LOGIC Co. OUT STD LOG Q: BUFFER STD LOGIC VECTOR(3 DOWNTO 0) END cntm16: 实体名称表示所设计电路的电路名称,必须与ⅤHDL文件名相同,实体名称是 “cntm16”,所存的ⅤHDL文件名必须是“ cntrl6VHD 2.端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信 号,端口信号名称可以表示一个信号,也可以表示一组信号(BUS),由数据类型定义, 如EN,Rd,CLK,Co分别表示计数允许信号,异步清零信号,时钟输入信号和进位 输出信号,Q是一组输出信号,用来表示四位同步二进制计数器的四位计数输出信号。 3.端口信号输入/输出状态有以下几种状态 信号进入电路单元。 OUT信号从电路单元输出。 INOUT信号是双向的,既可以进入电路单元也可以从电路单元输出 BUFFER信号从电路单元输出,同时在电路单元内部可以使用该输出信号。 端口数据类型(TYPE)定义端口信号的数据类型,在ⅤHDL中,常用的端口信号数 据类型如下: (1)位(BIT)型:表示一位信号的值,可以取值0和1’,放在单引号里面表示,如Ⅹ< (2)位向量( BIT VECTOR)型:表示一组位型信号值,在使用时必须标明位向量的宽 度(个数)和位向量的排列顺序,例如:Q: OUT BIT VECTOR(3 downto0),表 示Q3,Q2,Q1,Q0四个位型信号。位向量的信号值放在双引号里面表示,例如 Q<=“00 (3)标准逻辑位( STD LOGIO)型:IEEE标准的逻辑类型,它是BIT型数据类型的扩 展,可以取值U’,X,0°,'1,Z,W',L,'H,∵'等。 (4)标准逻辑位向量( STD LOGIC VECTOR)型:IEEE标准的逻辑向量,表示一组标 准逻辑位型信号值。 VHDL是与类型高度相关的语言,不允许将一种数据类型的信号赋予另一种数据类型 的信号。除了上述介绍的数据类型外,还有其他多种数据类型用于定义内部信号和变量, 请参见2-2节。 214VHDL语言的结构体( ARCHITECTURE) 结构体是ⅤHDL程序设计中的最主要组成部分,是描述设计单元的具体结构和功能 在程序中,结构体放在实体的后面。每一个结构体都有名称,结构体的名称是由设计者任 取的,结构体是以标识符 ARCHITECTURE开头,以END结尾。结构体可以有三种描述 方式,分别是行为( BEAVHER)描述方式、数据流( DATAFLOW)描述方式和结构 STRUCTUREI描述方式,其中数据流( DATAFLOW)描述方式又称为寄存器(RIL)描 述方式。不同的结构体采用不同的描述语句。 结构体的一般格式为 ARCHITECTURE结构体名OF实体名称IS 说明语句 BEGIN 电路描述语句 128
Rd : IN STD_LOGIC; CLK : IN STD_LOGIC; Co : OUT STD_LOGIC; Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END cntm16; 1. 实体名称表示所设计电路的电路名称,必须与 VHDL 文件名相同,实体名称是 “cntm16”,所存的 VHDL 文件名必须是 “cntm16.VHD”。 2. 端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信 号,端口信号名称可以表示一个信号,也可以表示一组信号(BUS),由数据类型定义, 如 EN,Rd,CLK,Co 分别表示计数允许信号,异步清零信号,时钟输入信号和进位 输出信号,Q 是一组输出信号,用来表示四位同步二进制计数器的四位计数输出信号。 3. 端口信号输入/输出状态有以下几种状态: IN 信号进入电路单元。 OUT 信号从电路单元输出。 INOUT 信号是双向的,既可以进入电路单元也可以从电路单元输出。 BUFFER 信号从电路单元输出,同时在电路单元内部可以使用该输出信号。 4. 端口数据类型(TYPE)定义端口信号的数据类型,在 VHDL 中,常用的端口信号数 据类型如下: (1) 位(BIT)型:表示一位信号的值,可以取值’0’和’1’,放在单引号里面表示,如 X < =‘1’,Y <=‘0’。 (2) 位向量(BIT_VECTOR)型:表示一组位型信号值,在使用时必须标明位向量的宽 度(个数)和位向量的排列顺序,例如:Q : OUT BIT_VECTOR(3 downto 0),表 示 Q3,Q2,Q1,Q0 四个位型信号。位向量的信号值放在双引号里面表示,例如 Q <= “0000”; (3) 标准逻辑位(STD_LOGIC)型:IEEE 标准的逻辑类型,它是 BIT 型数据类型的扩 展,可以取值’U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’等。 (4) 标准逻辑位向量(STD_LOGIC_VECTOR)型:IEEE 标准的逻辑向量,表示一组标 准逻辑位型信号值。 VHDL 是与类型高度相关的语言,不允许将一种数据类型的信号赋予另一种数据类型 的信号。除了上述介绍的数据类型外,还有其他多种数据类型用于定义内部信号和变量, 请参见 2-2 节。 2.1.4 VHDL 语言的结构体(ARCHITECTURE) 结构体是 VHDL 程序设计中的最主要组成部分,是描述设计单元的具体结构和功能, 在程序中,结构体放在实体的后面。每一个结构体都有名称,结构体的名称是由设计者任 取的,结构体是以标识符 ARCHITECTURE 开头,以 END 结尾。结构体可以有三种描述 方式,分别是行为(BEAVHER)描述方式、数据流(DATAFLOW)描述方式和结构 (STRUCTURE)描述方式,其中数据流(DATAFLOW)描述方式又称为寄存器(RTL)描 述方式。不同的结构体采用不同的描述语句。 结构体的一般格式为: ARCHITECTURE 结构体名 OF 实体名称 IS 说明语句 BEGIN 电路描述语句 128
END结构体名 结构体说明语句是对结构体中用到的数据对象的数据类型、元件和子程序等加以说 明。电路描述语句用并行语句来描述电路的各种功能,这些并行语句包括并行信号赋值语 句、条件赋值(WHEN-ELSE)语句、进程( PROCESS)语句、元件例化( COMPONET MAP 语句和子程序调用语句等 例2-1-2设计程序的结构体部分如下 ARCHITECTURE constr OF cntm16 IS BEGIN Co<=1WHEN(Q=”11NDEN=1)ELSE0,-.条件赋值语句 PROCESS (CLK, Rd) - PROCESS语句 BEGIN IF(Rd=O')THEN -IF语句 Q<=”0000 ELSIF (CLK EVENT AND CLK='1)THEN -CLK上升沿计数 IF(EN='1)then Q<=Q+1; END IF. END IF END PROCESS END constr. 结构体的名称是 countr,该结构体属于行为描述方式,采用多种描述语句,如进程 ( PROCRESS)语句,条件赋值语句( WHEN-ELSE),顺序语句(IF-ELSE)等,这些 语句的具体用法参见2-3节相关内容。 215程序包( PACKAGE)、库( LIBRARY)和USE语句 程序包定义了一组标准的数据类型说明、常量说明、元件说明、子程序说明和函数说 明等,它是一个用VHDL语言描写的一段程序,可以供其他设计单元调用。它如同C语 言中的*H文件一样,定义了一些数据类型说明和函数说明。在一个设计单元中,在实体 部分所定义的数据类型、常数和子程序在相应的结构体中是可以被使用的(可见的),但 是在一个实体的说明部分和结构体部分中定义的数据类型、常量及子程序却不能被其它设 计单元的实体和结构体使用(不可见)。程序包就是为了使一组类型说明、常量说明和子 程序说明对多个设计单元都可以使用而提供的一种结构。程序包分为两大类,即VHDL 预定义标准程序包和用户定义的程序包。VHDL设计中常用的标准程序包的名称和内容如 见表2-1-3所列。用户定义的程序包是设计者把预先设计好的电路单元设计定义在一个程 序包中,放在指定的库中,以供其它设计单元调用,如果在设计中要使用某个程序包中 内容时,可以用USE语句打开该程序包。有关程序包的设计方法参见2-45节的内容。 库( LIBRARY)是专门用于存放预先编译好的程序包的地方,它实际上对应一个文 件目录,程序包的文件就存放在此目录中。库名与目录名的对应关系可以在编译程序中指 定,库的说明总是放在设计单元的最前面。例如,对IEE标准库的调用格式为: LIBRARY IEEE: 表2-1-3IEEE两个标准库STD和IEE中的程序包 库名程序包名 定义的内容 STANDARD 定义ⅤHDL的数据类型,如BIT,BITⅤ ECTOR等 STD TEXTIO TEXT读写控制数据类型和子程序等 IEEE STD_LOGIC_1164 定义 STD LOG, STD LOGIC VECTOR等
END 结构体名; 结构体说明语句是对结构体中用到的数据对象的数据类型、元件和子程序等加以说 明。电路描述语句用并行语句来描述电路的各种功能,这些并行语句包括并行信号赋值语 句、条件赋值(WHEN-ELSE)语句、进程(PROCESS)语句、元件例化(COMPONET MAP) 语句和子程序调用语句等。 例 2-1-2 设计程序的结构体部分如下: ARCHITECTURE counstr OF cntm16 IS BEGIN Co <= ‘1’ WHEN (Q =”1111” AND EN =‘1’) ELSE ‘0’; --条件赋值语句 PROCESS (CLK, Rd) --PROCESS 语句 BEGIN IF (Rd=‘0’) THEN --IF 语句 Q <= ”0000”; ELSIF (CLK’ EVENT AND CLK=‘1’) THEN --CLK 上升沿计数 IF(EN=‘1’) then Q <= Q+1; END IF; END IF; END PROCESS; END counstr; 结构体的名称是 counstr,该结构体属于行为描述方式,采用多种描述语句,如进程 (PROCRESS)语句,条件赋值语句(WHEN-ELSE),顺序语句(IF-ELSE )等,这些 语句的具体用法参见 2-3 节相关内容。 2.1.5 程序包(PACKAGE)、库(LIBRARY)和 USE 语句 程序包定义了一组标准的数据类型说明、常量说明、元件说明、子程序说明和函数说 明等,它是一个用 VHDL 语言描写的一段程序,可以供其他设计单元调用。它如同 C 语 言中的*.H 文件一样,定义了一些数据类型说明和函数说明。在一个设计单元中,在实体 部分所定义的数据类型、常数和子程序在相应的结构体中是可以被使用的(可见的),但 是在一个实体的说明部分和结构体部分中定义的数据类型、常量及子程序却不能被其它设 计单元的实体和结构体使用(不可见)。程序包就是为了使一组类型说明、常量说明和子 程序说明对多个设计单元都可以使用而提供的一种结构。程序包分为两大类,即 VHDL 预定义标准程序包和用户定义的程序包。VHDL 设计中常用的标准程序包的名称和内容如 见表 2-1-3 所列。用户定义的程序包是设计者把预先设计好的电路单元设计定义在一个程 序包中,放在指定的库中,以供其它设计单元调用,如果在设计中要使用某个程序包中的 内容时,可以用 USE 语句打开该程序包。有关程序包的设计方法参见 2-4-5 节的内容。 库(LIBRARY)是专门用于存放预先编译好的程序包的地方,它实际上对应一个文 件目录,程序包的文件就存放在此目录中。库名与目录名的对应关系可以在编译程序中指 定,库的说明总是放在设计单元的最前面。例如,对 IEEE 标准库的调用格式为: LIBRARY IEEE; 表 2-1-3 IEEE 两个标准库 STD 和 IEEE 中的程序包 库名 程序包名 定义的内容 STD STANDARD TEXTIO 定义 VHDL 的数据类型,如 BIT,BIT_VECTOR 等 TEXT 读写控制数据类型和子程序等 IEEE STD_LOGIC_1164 定义 STD_LOG,STD_LOGIC_VECTOR 等 129