首页 > 其他分享 >FPGA学习--VHDL基本结构

FPGA学习--VHDL基本结构

时间:2022-10-05 21:24:59浏览次数:73  
标签:语句 END FPGA VHDL -- 实体 程序包 PROCESS 结构

一个完整的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   配置名;

标签:语句,END,FPGA,VHDL,--,实体,程序包,PROCESS,结构
From: https://www.cnblogs.com/amxiang/p/16756425.html

相关文章

  • 一、与用户交互及格式化输出
    目录一、与用户交互1、获取用户输入2、输出内部信息扩展:python2与python3中两个关键字的区别3、换行符二、格式化输出%s和%d%08d一、与用户交互当我们去银行的时候,我们......
  • 撸一个前后端分离项目
    ......
  • POJ - 2348 Euclid's Game
    Euclid'sGame博弈很经典的博弈了首先明确每个状态必然都对应着一个局面,先手必败\(or\)先手必胜如果当前局面对于先手来说是能够选择的,也就是\(b>=a*2\),对于一......
  • TypeScript中typeof的简单介绍
    简单介绍typeof我们都知道js提供了typeof,用来获取基本数据的类型。实际上,TS也提供了typeof操作符。可以在【类型上下文】中进行类型查询。只能够进行变量或者属性查......
  • Java在线聊天功能
    封装工具类封装工具类packageutils;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.net.URLEncoder;importorg.apache......
  • 分布式存储系统之Ceph集群存储池、PG 与 CRUSH
    前文我们了解了ceph集群状态获取常用命令以及通过cephdaemon、cephtell动态配置ceph组件、ceph.conf配置文件相关格式的说明等,回顾请参考https://www.cnblogs.com/qi......
  • HDFS读写流程
    HDFS读流程客户端通过FileSystem的get方法加载配置获得FileSystem对象。FileSystem向NameNode通过open方法请求读取文件。NameNode进行检查(文件是否存在,是否有相应权......
  • 私服
                      ......
  • vite构建打包产物
    构建打包产物build:{assetsInlineLimit:10240,//静态资源(不会包含js,css)不超过10kb转化为base64【不好含cssjs】outDir:"distdemo",//如果在一个服务器......
  • ping命令的多种玩法,以前竟然只用它来测试网速!
    作为开发人员,ping命令无疑是使用比较多的工具,我们经常在需要判断与服务器的连接是否连桶时需要使用ping命令来测试。【阅读全文】一般情况下使用ping命令来判断路由地址......