Menu Close

VHDL 设计文件的基本格式

VHDL语言作为IC设计或FPGA设计的硬件描述语言,在书写的时候按照一定的格式组织的。本节内容从整体介绍VHDL的文件的组织结构和书写格式,做到对VHDL语言描述电路有一个整体印象。VHDL的设计文件中的各部分的详细内容将会在后续章节中逐步展开介绍。

1. VHDL语言设计文件的整体架构

VHDL语言的设计文件(设计文件是指可综合成电路的文件)主要有如下几个部分组成:

  • 注释及文件头描述,
  • 库文件的声明(library …),
  • 库文件的引用(use …),
  • 实体(entity)的声明,
    • 参数(generic),
    • 输入、输出端口描述(in, out,inout declaration),
  • 构造体(architecture),
    • 元件的声明(component declaration),
    • 信号声明     (signal declaration),
    • 赋值与运算 (assignment and calculation),
    • 进程(process),
    • 过程(procedure)。

按照上面的组织结构举一个简单的例子:

例1: 利用VHDL语言设计 一个“与”逻辑电路

---------------------------------------------------------------------------------- header description
-- Company: 
-- Engineer: tim
-- 
-- Create Date: 2022/05/21 00:09:20
-- Design Name: 
-- Module Name: top_logic - Behavioral
-- Project Name: 
-- Target Devices: 
-- Tool Versions: 
-- Description: 
-- 
-- Dependencies: 
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
----------------------------------------------------------------------------------header description


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 top_logic is
generic(
AND_OR: integer:=0
);
    Port ( a : in STD_LOGIC;
           b : in STD_LOGIC;
           c : out STD_LOGIC
           );
end top_logic;

architecture Behavioral of top_logic is
--signal      declare area
--component   declare area
begin
  -- logic assignment area
  c<=a and b;  --concurrent assignment 并发赋值
  -- process area
  -- ...
  

end Behavioral;

2. 按照VHDL 文件组织方式分析

以例1为例,对VHDL文件组织结构进行分析,

(1)VHDL文件以 .VHD 为扩展名存储。存储的文件名一般与实体名一致,如本文件的文件名为 top_logic.VHD。

(2)文件的开始一般以注释语句作为文件头部分,文件头部分一般由于说明设计文件版权,版本,公司名称,工程师,设计时间等内容。如:

———————————————————————————-
— Company:
— Engineer: tim

— Create Date: 2022/05/21 00:09:20
— Design Name:
— Module Name: top_logic – Behavioral
— Project Name:
— Target Devices:
— Tool Versions:
— Description:

— Dependencies:

— Revision:
— Revision 0.01 – File Created
— Additional Comments:

———————————————————————————-

(3)正文部分

  • 声明(引用)将使用的库,如:

library IEEE;

声明(或引用)本设计使用 IEEE的库文件,IEEE库是IEEE为VHDL提供的标准库,其中STD_LOGIC_1164库中定义了std_logic ,std_logic_vector等逻辑及矢量类型以及该数据类型的操作函数,因此如果设计中要用到std_logic ,std_logic_vector等类型应声明 IEEE库。这样就指明了将要使用库的位置。

VHDL库的声明格式:以关键字library 后跟库的名称即可,以分号’;”结束。如:library IEEE;

注:VHDL语言以分号”;”结束一行的语句。

  • 打开(使用)将使用库中的内容,如:

use IEEE.STD_LOGIC_1164.ALL;

          利用关键字use使用库中的内容。从上面的语句可以看出在IEEE库中包含的库文件有许多,这里只使用STD_LOGIC_1164,并且由ALL标识使用STD_LOGIC_1164中的所有内容。可见在打开库文件时,库里的内容是可选的。选项内容以”.”隔离。使用了use语句后相当于将库文件的内容复制到文件的该位置。若 还有其它的库文件使用,继续打开并使用即可,如:

use IEEE.NUMERIC_STD.ALL;

library UNISIM;

use UNISIM.VComponents.all;

          在VHDL语言中,库的引用和打开库的内容部分是可选的,如果不使用任何库的内容,该部分可以不存在,如本来中如果只想实现2进制的与运算,可以不适用std_logic数据类型,而采用bit类型,此时可以不使用任何库,也可以完成相同的功能,程序修改如下:

 

有关库文件的详细内容,将在VHDL库文件一章中详细讲解。

  • 实体声明

实体是设计文件的入口,实体由两个主要部分组成:1)由关键字generic引导的参数部分声明,2)由port引导的输入、输出端口描述。如:

entity top_logic is
generic(
AND_OR: integer:=0
);
    Port ( a : in STD_LOGIC;
           b : in STD_LOGIC;
           c : out STD_LOGIC
           );
end top_logic;

实体由关键字entity 引导,entity后跟实体名(如 top_logic),并由关键字is指示后面将是实体的具体内容。最后由end 实体名结束。

    • 参数部分

参数部分,也有部分作者翻译成泛型。该部分主要提供预编译的机制,使设计的实体部分及其行为可配置,参数部分是可选的,如果不需要使用参数,这部分内容可以不存在。如本例中的参数并没有使用,程序可以修改成成如下的代码,并不会影响程序的功能。

entity top_logic is
Port (

a : in bit;
b : in bit;
c : out bit
);
end top_logic;

由于bit类型是VHDL所支持的基本内置类型,因此使用bit类型并不需要其他库和库文件的支持。关于该部分的内容的使用机制将在后续章节中详细讲解。

    • 端口部分,端口部分是必不可少的。该部分内容主要描述芯片的输入、输出,是整个设计的入口。如本例中声明的a,b为输入(in),c为输出(out), 它们的数据类型为bit或std_logic。
  • 构造体(architecture)

构造体是IC设计的行为描述部分。实体部分描述的输入、输出端口之间的逻辑或时序关系将会构造体部分得到描述。构造体的格式如下:

architecture Behavioral of top_logic is
--signal      declaretion 
--component   declaretion 
begin
 
  c<=a and b;

end Behavioral;

由关键字architecture 引导,后跟构造体的名称,并指出该构造体是归属于哪个实体的。在VHDL的架构中一个实体可以有多个构造体,这部分内容将在VHDL配置部分内容介绍。如:Behavioral of top_logic is

构造体又分为两个部分,分别是元件声明部分和逻辑或行为描述部分,如图1所示。

%title插图%num

图1 构造体的组成

    • 元件或信号声明部分在构造体声明语句和begin之间,由于声明构造体内将使用的信号,或声明将要使用的库元件。在begin之后就是具体的逻辑行为描述部分。如 c<=a and b; 描述了端口c和端口a,b之间的”与”逻辑关系。
    • end后面跟构造体名结束构造的描述,主要最后的分号不能省略。

3. VHDL 与 Verilog设计文件对比

VHDL 与 Verilog设计文件对比见表1,

Verilog VHDL
注释 // 或  /* …*/
没有具体指定,可以用include实现类似的作用 Library …

Use      …

….

设计入口 module name_of_module Entity name_of_entity  is

 

 

  #(

参数部分(可选)

);

 

Generic (

 

参数部分(可选)

);

 

(

端口描述

);

 

(

端口描述

);

 

End nameof_entity;

 

参数部分 #(

 

parameter WIDTH=32,

….

 

parameter DEPTH=1024

 

);

 

 

Generic (

 

WIDTH: integer:=32 ;

….

DEPTH : integer:=1024

 

 

);

端口部分  

没有关键字引导,用括号”(…)”标注该部分内容。

 

 

用port关键字引导

 

 

(

input    a,    // use “,”

input    b,

output c

 

)

 

port ( a : in bit;

b : in bit;

c : out bit

);

 

输入:  input

输出:output

双向:inout

 

 

输入:in

输出:out

双向:inout

缓冲: buffer

构造体 端口描述部分之后,就是变量声明区和逻辑行为描述区。 由architecture引导构造体:如

architecture Behavioral of top_logic is

变量声明区:wire,reg, function,task等

 

变量声明区:signal, component, package, function等

 

行为描述区:

连续赋值语句;

always 过程

 

行为描述区:

并发赋值语句;

Process 过程

 

endmodule End  name-of-architecture ;

 

标识符、关键字大小写 区分大小写:如
Begin与begin表示不同的含义,begin是关键字,而Begin不是关键字
不区分大小写:如

Port与port的含义相同

 

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

发表回复

相关链接