FPGA学习--VHDL基本结构
一个完整的VHDL程序,或者说设计实体,通常要求最低能为VHDL综合器所支持,并能作为一个独立的设计单元,即元件的形式而存在的VHDL程序。在VHDL程序中,通常包含
实体(ENTITY)、结构体(ARCHITECTURE)、配置(CONFIGURATION)、包集合(PACKAGE)和库(LIBRARY)
5个部分。其中实体和结构体这两个基本结构是必需的,他们可以构成最简单的VHDL程序。
1、 实体
实体说明是对这个设计实体与外部电路进行接口的描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体对外的一个通信界面。结构体用于描述此设计实体的逻辑结构和逻辑功能。
ENTITY or2 IS -------or2是实体名
PORT(a,b:INSTD_LOGIC; ------ PORT端口表
C:OUTSTD_LOGIC);
END ENTITY or2; -----ENTITY 实体名 IS”开始,语句“END ENTITY 实体名;”结束。
2、 结构体
结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。 结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。
需要注意的是:结构体是对实体功能的具体描述,因此它一定要跟在实体的后面 。
ARCHITECTURE 结构体名 OF 实体名 IS
[定义语句]
BEGIN
[功能描述语句]
END 结构体名;
结构体信号定义语句必须放在关键词ARCHITECTURE和BEGIN之间,用于对结构体内部将要使用的信号、常数、数据类型、元件、函数和过程加以说明。注意的是实体说明中定义的信号是外部信号,而结构体定义的信号为该结构体的内部信号,它只能用于这个结构体中。
ARCHITECTURE rtl OF muj IS --rtl:结构体名,muj实体名
SIGNAL s1:BIT --结构体信号定义语句
SIGNAL s2,s3:STD_LOGIC_VECTOR (0 TO 3);
…
BEGIN
… --功能描述语句
END rtl;
在VHDL程序设计中,结构体是由多个BLOCK块构成的,如果将结构体比做总电路原理图,那么,每个BLOCK块则相当于一张子原理图。
3、进程(PROCESS)
PROCESS结构是最能体现VHDL语言特色的语句。与BLOCK语句一样,利用PROCESS语句结构可以描述一个功能独立的电路。与BLOCK语句不同之处是,在系统仿真时,PROCESS结构中的语句是按顺序逐条向下执行的,而不像BLOCK语句那样并发执行。一个结构体中可以有多个并行运行的进程结构,每一个进程内部是由一系列顺序语句来构成的。
PROCESS语句的结构:
[进程标号] PROCESS [(敏感信号表)][IS]
[进程说明语句]
BEGIN
顺序描述语句
END PROCESS [进程标号];
单进程以PROCESS开始,以END PROCESS结束。
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY nor2_v2 IS
PORT(a,b:IN STD_LOGIC;
y:OUT STD_LOGIC);
END nor2_v2;
ARCHITECTURE behave OF nor2_v2IS
BEGIN
PROCESS (a,b)
VARIABLE comb :STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
comb := a & b; --&组合符号
CASE comb IS
WHEN "00"=> y <='1';
WHEN "01"=> y <='0';
WHEN "10"=> y <='0';
WHEN "11"=> y <='0';
WHEN OTHERS => y <='X'; --‘X’不定
END CASE;
END PROCESS;
END behave;
4、子程序(SUBPROGRAM)
子程序被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。子程序内部的值不能保持,子程序返回后才能被再次调用并初始化。
子程序有两种类型:过程(PROCEDURE)和函数(FUNCTION)。
1.过程(PROCEDURE)
过程语句的书写格式为:
PROCEDURE 过程名(参数表)IS
[说明部分]
BEGIN
过程语句部分
ENDPROCEDURE 过程名;
2.函数
FUNCTION 函数名 (参数表) RETURN 数据类型 IS
[说明部分];
BEGIN
顺序语句;
RETURN [返回变量名];
END RETURN 函数名;
5、程序包
程序包也叫包集合,主要用来存放各个设计都能共享的数据类型、子程序说明、属性说明和元件说明等部分。设计者使用时只要用USE子句进行说明即可。
程序包由两部分组成:程序包首和程序包体。
程序包的一般书写格式如下:
PACKAGE 程序包名 IS
END [PACKAGE] 程序包名; --程序包首
PACKAGE BODY 程序包名 IS
┇ --程序包体
END [ PACKAGE BODY ] [程序包名];
6、默认配置
默认配置语句的基本格式为:
CONFIGURATION 配置名 OF 实体名 IS
FOR 选配结构体名
END FOR
END 配置名;