在系统可编程技术
第 9讲
VHDL语言的基本结构
什么是 VHDL语言?
它是 20世纪 80年代初,由美国国防部为其超
高速集成电路 VHSIC计划提出的硬件描述语言,
它支持硬件的设计、综合、验证和测试。
IEEE于 1987年公布了 VHDL的标准版本( IEEE
STD 1076/1987),1993年重新公布了新的标准
( IEEE STD 1076- 1993)。
V HSIC (Very High Speed
Integrated Circuit)
Hardware
Description
Language
VHDL的优点
? VHDL描述能力比其它硬件描述语言更强,用于
设计复杂的、多层次的数字系统。支持设计库
和设计的重复使用;
? 具有相对独立性,设计者可以不管硬件结构及
最终设计实现的目标器件;
? 支持广泛,目前大多数 EDA软件都支持 VHDL语
言;
? 更方便地向 ASIC过渡;
? VHDL有良好的可读性,容易理解。
VHDL源文件基本格式




实体( Entity)
结构体 (Architecture)
配置( Configuration)
程序包( Package)
库 (Library)


LIBRARY 库名 ; --库
USE 库名,程序包名,; --程序包
ENTITY 实体名 IS --实体
PORT(…… );
END 实体名 ;
ARCHITECTURE 结构体名 OF 实体名 --结构体
( ……… )
END 结构体名 ;
VHDL源文件基本格式
例,4选 1数据选择器
LIBRARY IEEE; --库
USE IEEE.STD_LOGIC_1164.ALL; --程序包
ENTITY ex2 IS --实体
PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;
q:OUT STD_LOGIC);
END ex2;
ARCHITECTURE ex2_a OF ex2 IS --结构体
SIGNAL sel:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
sel<=b&a;
q<= i0 WHEN sel=“00” ELSE
i1 WHEN sel=“01” ELSE
i2 WHEN sel=“10” ELSE
i3 WHEN sel=“11” ELSE
?x?;
END ex2_a;
1、实 体
格式,
ENTITY 实体名 IS
[GENERIC ( 类属表 );]
[PORT ( 端口表 );]
END 实体名 ;
说明所设计的逻辑电路的输入输出信号及其特性
(输入、输出、双向)
ENTITY mux21a IS
PORT( a,b, IN BIT ;
s, IN BIT;
y, OUT BIT ) ;
END mux21a ;
实体
2选 1多路选择器的 VHDL实体描述
PORT( 端口)说明
PORT ( 端口名, 端口模式 数据类型 ;
{ 端口名, 端口模式 数据类型 } ) ;
? 端口名是设计者为实体的每一个对外通道所取的名字
? 端口模式是指这些通道上的数据流动方式
? 数据类型是指端口上流动的数据的表达格式或取值类型,
VHDL要求只有相同数据类型的端口信号和操作数才能相互作
用。
PORT说明语句是对一个设计实体界面的说明及对设计实
体与外部电路的接口通道的说明,其中包括对每一接口的输
入输出模式和数据类型的定义。其格式如下,
? IN 输入,信号只能自端口到实体
? OUT 输出,信号只能自实体到端口
? INOUT 双向,信号既可输入又可输出
? BUFFER 缓冲,信号自实体输出,又有
内部反馈
(Data that goes out of the entity
and is also fed-back internally)
Entity
端口模式,
VHDL中的端口,In Out Inout Buffer
Blk1
Blk3 Blk4
Blk5
Blk2 In
Inout
Out
Buffer
Entity
端口模式,
Out与 Buffer的区别
Entity test1 is
port(a,in std_logic;
b,c,out std_logic
);
end test1;
architecture a of test1 is
begin
b <= not(a);
c <= b;--Error
end a;
Entity test2 is
port(a,in std_logic;
b, buffer std_logic;
c,out std_logic
);
end test2;
architecture a of test2 is
begin
b <= not(a);
c <= b;
end a;
2、结构体
功能,
? 对数据类型, 常数, 信号, 子程序和元件等元素的说明
? 描述实体逻辑行为。
格式,
ARCHITECTURE 结构体名 OF 实体名 IS
[说明语句 ]
BEGIN
[功能描述语句 ]
END 结构体名 ;
ARCHITECTURE one OF mux21a IS
BEGIN
y <= a WHEN s = '0' ELSE
b ;
END one ;
结构体
2选 1多路选择器的 VHDL结构体描述
ENTITY mux21a IS
PORT( a,b, IN BIT ;
s, IN BIT;
y, OUT BIT ) ;
END mux21a ;
ARCHITECTURE one OF mux21a IS
BEGIN
y <= a WHEN s = '0' ELSE
b ;
END one ;
2选 1多路选择器的 VHDL描述
3,VHDL库
库( Library)是用于存放预先编译好的程
序包( Package),程序包中定义了数据集合体、
逻辑操作和元件等。主要是声明在设计或实体中
将用到的常数,数据类型,元件及子程序等。
库可以使设计者共享已经编译好的设计结果。
? IEEE库,IEEE标准库
使用需声明
? STD库,VHDL标准库
使用无需声明
? ASIC库,EDA厂商提供库
使用需声明
? WORK库:现行作业库,当前工作目录的所有设计
使用无需声明
? USER库:用户自定义库
使用需声明
?STD_LOGIC_1164 程序包
?STD_LOGIC_ARITH 程序包
?STD_LOGIC_UNSIGNED 程序包
VHDL库的种类
库的用法
USE语句的使用有两种常用格式,
USE 库名,程序包名,项目名 ;
USE 库名,程序包名,ALL ;
例,
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.STD_ULOGIC ;
USE IEEE.STD_LOGIC_1164.RISING_EDGE ;
USE IEEE.STD_LOGIC_1164.ALL;
格式,LIBRARY 库名;
USE 库名, 程序包名, All;
库说明的作用范围
从一个实体说明开始到其所属的结构体、配置为
止,当一个源程序中出现两个以上的实体时,必须重
复说明。
例,
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY example1 IS
(……)
END
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY example2 IS
(……)
END
请说明各语句的含义
Library IEEE
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY example IS
PORT(a,b,c,d,IN STD_LOGIC;
e, out STD_LOGIC);
End example;
ACHITECTURE abc OF example IS
Signal tmp, std_logic;
Begin
e<=(a and b ) or tmp;
Tmp<=c xor d;
End abc;
程序包声明
IEEE库声明
接口信号,
应声明
端口模式
数据类型
内部信号,
应声明
数据类型