构造体(architecture)是实体所定义的电路设计的逻辑实现部分, 构造体描述了设计实体的内部结构与逻辑关系 。构造体由两大部分组成, (1)对数据类型 、常数 、信号、 子程序和元件等元素的声明部分。(2)逻辑行为描述部分,该部分描述了实体逻辑行为,有各种形式的顺序描述语句和并发描述语句。
1. 构造体格式
构造体的语句格式如下:
ARCHITECTURE 结构体名 OF 实体名 IS
[声明语句区]
BEGIN
<功能描述语句区>
END 构造体名;
格式说明: 在描述VHDL一些结构时,采用方括号[ ]括起来内容表示可选项,根据需要设定该部分内容,如果没有需求,这部分内容可以不存在。用尖括号<>括起来的部分表示需要设计者根据需要填写设计代码。
2. 构造体名
构造体由关键字architecture 引导, 后跟构造体名称并指出该构造体属于哪一个实体(entity)。由于构造体本身没有输入、输出接口,因此构造体一定要附着于某一个实体。如:
ARCHITECTURE arch_full_addition OF full_addition is —声明了构造体 arch_full_addition, 该构造体附着于实体 full_addition,构造体的名称使用是独立的,并不一定要和实体的名称有关联,只要符合VHDL的标识符的使用规则即可。但好的命名可以清晰知道该构造体的归属,如本例中构造体的名称arch_full_addition,见到该名称,可以轻易推断出该构造体对应的实体应为full_addition。
3. 声明语句区
声明语句区在构造体声明语句和BEGIN 之间,主要对在行为、逻辑描述中要用到的数据类型 、常数 、信号、 子程序和元件等元素预先声明,如
signal tmp: bit:=‘0′; – – 声明tmp为信号,且为bit类型,赋初值为’0’。
有关元件声明以及子程序的声明,将在相关章节中讲解。
4. 功能描述
功能描述部分主要作用是对实体部分描述的接口进行功能描述,该部分内容主要有如下几个部分:
- 并发赋值语句,并发赋值由 “<=” 符号实现,例如 c<=a and b ; 功能是将 a,b相与后赋值给 c。
- 元件调用 , 将在 VHDL层次化电路设计与实体例化一节中讲解
- 过程(process), 将在process 一节中讲解
- 子程序调用
- 函数
- 过程
功能描述部分在 begin与END 构造体名 之间,如下所示,
BEGIN
…
END 构造体名;
5. 设计实例
利用上节讲解的实体与本节讲解的构造体内容,设计一位全加器。一位全加器的接口如图1所示。
图1
根据图1的输入、输出接口,以及对应的逻辑方程,VHDL对应的一位全加器代码如下:
---------------------------------------------------------------------------------- -- Company: Fraser Innovation Inc -- Engineer: tim Zhuang -- -- Create Date: 2022/05/21 00:09:20 -- Design Name: -- Module Name: top_logic - Behavioral -- Project Name: full addition -- Target Devices: -- Tool Versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- --library IEEE; --use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx leaf cells in this code. --library UNISIM; --use UNISIM.VComponents.all; entity full_addition1 is generic( WIDTH_IN: integer:=1; WIDTH_OUT: integer:=1 ); port ( ci : in bit; a : in bit; b : in bit; sum : out bit_vector(WIDTH_IN-1 downto 0); co : out bit_vector(WIDTH_OUT-1 downto 0) ); end full_addition; ARCHITECTURE arch_fadd1 of full_addition1 is begin sum <= ci XOR a XOR b; co <= a AND b OR ( ci AND (a AND b)); end arch_fadd1
注:在VHDL中 XOR为异或运算符,AND为与运算符,OR为或运算符,NOT取反运算符。由于VHDL对标识符和关键字字母不区分大小写,因此程序中使用xor, and , or与使用 XOR,AND, OR含义相同。不过为了程序的可读性,已于维护的目的,建议一般标识符采用小写, 常量,逻辑运算符等采用大写表示。