2.2 VHDL程序示例

本节,我们将通过介绍三态门电路的VHDL设计实例,完整地展现应用VHDL进行程序设计的过程,使读者能迅速把握VHDL的基本结构和整体特点。

在数字电路中,普通的TTL门或CMOS门只有两个状态,即逻辑输出0和逻辑输出1,这两个状态都是低阻输出。对于三态门来说,它不但具有逻辑0和逻辑1两个状态,而且还具有高阻输出的第三态,此时的输出端相当于开路。在实际应用中,三态门常常用来构成数字电路中广泛使用的总线结构(如总线缓冲器等),它的基本原理是采用多个三态门来驱动地址或控制等总线。

在数字电路中,三态门电路是在普通门电路的基础上附加控制电路构成的。三态门电路的逻辑符号如图2-2所示,其真值表见表2-1。当控制端输入信号EN=1,则输入数据DIN直接送到DOUT端输出,否则输出端为高阻状态。

图2-2 三态门电路逻辑符号

表2-1 三态门电路真值表

根据三态门电路的真值表,我们可以写出它的VHDL程序设计,如例2-1所示,其对应的仿真波形如图2-3所示。

图2-3 三态门电路的仿真波形

【例2-1】三态门电路的VHDL设计程序。

通过仿真,上述VHDL代码将生成对应的RTL电路图,如图2-4所示。

图2-4 三态门的VHDL程序对应RTL电路

上例是一个完整的三态门电路的VHDL文件。从文件的描述层次上来看,三态门电路整体设计的VHDL描述使用了三个层次。

(1)库(LIBRARY)说明

库说明包含了描述器件的输入、输出端口数据类型(即端口信号的取值类型或范围)中将要用到的IEEE的标准库中的STD_LOGIC_1164程序包。作为所谓的强类型语言,明确地指定和严格地定义端口信号的取值类型是VHDL的重要特点。

(2)实体(ENTITY)说明

实体的电路意义相当于器件,在电路原理图上相当于元件符号。实体是一个完整的、独立的语言模块,它描述了三态门电路接口信息,定义了器件的端口引脚DIN、EN、DOUT的输入输出性质和数据类型。它利用PORT语句说明了三态门的外部引脚的工作方式,所以PORT所描述的就相当于电路器件的外部引脚IN对端口引脚DIN作了信号流向的方向说明,它规定了信号必须由外部通过端口引脚DIN流进所描述的器件内部;而OUT则规定了器件内部的信号需通过端口引脚DOUT向外输出。同时指明了端口DIN、EN和DOUT信号的数据类型是符合IEEE库中STD_LOGIC_1164程序包中的标准数据位STD_LOGIC中所定义的数据类型。

(3)结构体(ARCHITECTURE)说明

结构体描述了三态门内部的逻辑功能,在电路上相当于器件的内部电路结构。三态门电路的逻辑描述十分简洁,它并没有将电路内部逻辑门的连接方式表达出来,而是将它看成一个黑盒,以类似于计算机高级语言的表达方式描述了它的外部逻辑行为。符号“<=”是信号赋值符,是信号传递的意思,DOUT<=DIN表示将DIN获得的信号赋给DOUT输出端,这是一个单向过程。

从例2-1可以清晰地看出,一个完整的VHDL描述是以对一个功能元件的完整描述为基础的,因此元件是VHDL的特定概念,把握了元件的结构和功能的完整描述,就把握了VHDL的基本结构。

尽管元件本身具有层次性,即任一元件既可以是单一功能的简单元件,也可以是由许多元件组合而成的具有更复杂功能的元件,乃至一个电路系统;但从基本结构上看都能用IEEE标准库说明、实体和结构体这三个部分来描述这种元件。因此,在一个可综合的VHDL描述的最小和最基本的逻辑结构中,IEEE标准库说明、实体和结构体是最基本的和不可缺少的三个部分,其他的结构层次可根据需要选用;一个完整的VHDL描述,既可以作为一个独立的功能器件使用和保存,也能被其他的由VHDL描述的逻辑电路所调用,成为其中的一个功能部件。

综上所述,一个相对完整的VHDL程序都具有比较固定的结构。在下面的章节中,我们将分别对如图2-5所示的VHDL程序构成的各语句结构作详细的说明。

图2-5 VHDL设计基本结构