VHDL,全称Very High Speed Integrated Circuit Hardware Description Language,是一种用于硬件描述的语言,它允许电子工程师用一种接近自然语言的方式描述数字系统,包括逻辑门、微处理器、存储器和其他复杂的数字系统。在本章中,我们将深入学习VHDL的基础知识。
2.1 VHDL程序结构
VHDL程序由几个核心部分组成,包括库、实体、结构体、配置、包集合等。库是VHDL程序的起点,它包含已编译的实体、结构体、包集合和配置,用于存放和管理设计组件。库声明(LIBRARY)引入所需的库,例如IEEE库,其中包含标准逻辑类型和操作符。程序包说明语句(USE)则用来引用库中的特定元素,如`ieee.std_logic_1164.ALL`包含了所有标准逻辑类型和操作。
2.1.1 VHDL程序基本结构
一个VHDL程序主要由实体(ENTITY)和结构体(ARCHITECTURE)两部分构成。实体描述了设计系统的外部接口,即输入和输出信号,而结构体则定义了系统的内部实现。例如,一个简单的2输入与门的VHDL描述:
```vhdl
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY and2 IS
PORT(a, b: IN STD_LOGIC;
y : OUT STD_LOGIC);
END and2;
ARCHITECTURE and2x OF and2 IS
BEGIN
y<=a AND b;
END and2x;
```
实体部分定义了输入端口`a`和`b`,以及输出端口`y`,它们都是`std_logic`类型的信号。结构体部分`and2x`实现了逻辑运算,并将结果赋值给`y`。
2.1.1.1 实体(ENTITY)
实体是VHDL中描述硬件接口的关键元素。实体声明包括实体名、类属参数(可选)和端口说明。端口说明定义了实体与外部环境交互的信号,包括输入、输出和双向端口。端口模式如`IN`(输入)、`OUT`(输出)、`BUFFER`(缓冲)和`INOUT`(双向),定义了信号的方向。例如,以下实体声明了4位加法器的端口:
```vhdl
ENTITY add4 IS
PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0);
cin: IN STD_LOGIC;
s: OUT STD_LOGIC_VECTOR(3 downto 0);
cout: OUT STD_LOGIC);
END add4;
```
在这个例子中,`a`和`b`是输入向量,`cin`是进位输入,`s`是输出向量,`cout`是进位输出。
类属参数(GENERIC)提供了一种方式来指定设计单元的非信号属性,例如延迟时间、功耗等。类属参数在实体声明中定义,并在结构体中使用。例如:
```vhdl
ENTITY and2 IS
GENERIC (rise,fall:time);
PORT(a, b: IN STD_LOGIC;
y : OUT STD_LOGIC);
END and2;
ARCHITECTURE and2x OF and2 IS
SIGNAL u: BIT;
BEGIN
u<=a AND b;
y<=u after(rise) when u=’1’ else u after(fall);
END and2x;
```
在这个例子中,`rise`和`fall`是延迟时间,它们在结构体中用于设置信号`y`的上升沿和下降沿延迟。
VHDL语言通过实体和结构体的组合,提供了一种强大且灵活的方式来描述硬件设计,无论是简单的逻辑门还是复杂的数字系统。理解这些基础知识是掌握VHDL的关键,也是进行数字系统设计的基础。