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   配置名;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值