Menu Close

VHDL 构造体

构造体(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 一节中讲解
  • 子程序调用
    • 函数
    • 过程

功能描述部分在 beginEND  构造体名 之间,如下所示,

                    BEGIN

END  构造体名;

5. 设计实例

 利用上节讲解的实体与本节讲解的构造体内容,设计一位全加器。一位全加器的接口如图1所示。

 

  %title插图%num

图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含义相同。不过为了程序的可读性,已于维护的目的,建议一般标识符采用小写, 常量,逻辑运算符等采用大写表示。


 

 

 

 

 

Posted in FPGA, FPGA 教材教案, IC 教材教案, VHDL, VHDL, 开发语言, 教材与教案, 文章, 编程语言, 资料区

发表回复

相关链接