1.2 实体、构造体和配置
设计实体(Design Entity)是VHDL中最主要的硬件抽象部分,是硬件设计中表示输入输出及该部分所执行功能的部分。设计实体可以表示任何级别的电路,包括逻辑门电路、宏单元、芯片、电路板,甚至完整的系统或子系统。
在VHDL程序中,设计实体包含了实体(Entity)和构造体(Architecture)两部分。一个设计实体内有且仅有一个实体,描述设计实体的输入输出等信息;但一个设计实体中可以存在一个或者多个构造体,每一个构造体都是实体的具体实现。
设计实体按照块的层次结构来进行设计,每一个块描述整体设计的一部分。这种层次结构的顶层块是实体本身,可以用作外部元件被其他设计调用。而其他的块是内部块,由块语句(BLOCK)定义。
设计实体还可以由互联的元件进行描述。为了定义元件的结构和行为,实体的每一个元件都被绑定到一个低级别的设计实体上。设计实体可以不断地分解为元件,而这些元件又与其他的低层次实体绑定,这就形成了一个完整的设计实体的层次结构。这样的层次结构通常被称为设计层次(Design Hierarchy)。设计层次中互相的绑定关系需要在顶层实体中进行说明,也就是配置(Configuration)。
图1.2是VHDL程序的结构框图。
图1.2 VHDL程序的结构框图
1.2.1 实体
实体通常抽象地描述硬件的输入输出和所执行的功能。其语法结构如下。
类属语句定义实体工作的环境,定义一系列环境量值。端口语句定义了实体的输入输出端口,语法结构如下所示。其中,端口可以定义为以下4种模式:IN、OUT、INOUT和BUFFER。IN和OUT是单向引脚,分别表示输入和输出;INOUT是双向引脚;BUFFER是表示该引脚是可供电路内部使用的输出引脚。实体中的声明和实现还会定义一系列类型、子类型、常量等。
例1.1 8位计数器示例
计数器示例中,上述代码段定义了一个具有清零和加载功能的8位计数器实体counter。实体counter有4个输入和2个输出,分别是时钟端(clk)、清零端(clear)、加载端(load)、加载数据(data_in)、计数器输出(data_out)和计数器进位(co)。上述实体描述的8位计数器如图1.3所示。
图1.3 8位计数器示意图
1.2.2 构造体
构造体是对所描述电路的具体实现部分,是VHDL程序的重要组成部分,其语法结构如下。
声明部分主要是对类型、子类型、信号、常量的定义。描述部分则是对电路的行为描述;描述部分的顶层代码必须是并行语句,如:进程(Process)、When语句、Block语句等。顺序语句必须在进程(Process)、函数(Function)和过程(Procedure)中执行。
例1.2 全加器示例
全加器示例中,上述代码段定义了一个全加器实体adder和构造体f_adder。实体adder有3个输入和2个输出,分别是两个加数(a和b)、前一个进位(ci)、和(s)和输出进位(co)。构造体f_adder内的描述部分是对两个加数进行全加操作,将结果赋予s和co。上述实体和构造体描述的全加器如图1.4所示。
图1.4 全加器示意图
1.2.3 配置
配置是VHDL中将多个实体组合为一个完整的设计的代码段,是进行VHDL系统设计过程中非常重要的一部分。其语法结构如下。
VHDL程序中有默认配置,即使不编写配置,也可以进行综合。