EDA硬件描述语言VHDL(二)

文章目录

    • 1、设计实体
    • 2、VHDL程序结构
    • 3、程序
    • 4、生成的模块
    • 5、仿真时序波形
    • 6、实体和端口模式
    • 7、结构体的一般语言格式
    • 8、功能描述语句结构
    • 9、VHDL语言所使用的库可分为两类:
    • 10、库和包
    • 11、库和程序包的调用方法
    • 12、USE语句的使用有两种常用格式:
    • 13、配置语句的一般格式如下:
    • 14、数制
    • 15、标识符
    • 16、关键词
    • 17、文件名
    • 18、常数定义
    • 19、变量(VARIABLE)
    • 20、信号定义格式

1、设计实体

一个完整的VHDL程序代码称为设计实体。
(1)库和程序包调用声明语句构成的模块
(2)描述电路信号端口和参数通道的实体模块
(3)具体描述电路功能的结构体模块

2、VHDL程序结构

EDA硬件描述语言VHDL(二)_第1张图片

3、程序

EDA硬件描述语言VHDL(二)_第2张图片

4、生成的模块

EDA硬件描述语言VHDL(二)_第3张图片

5、仿真时序波形

EDA硬件描述语言VHDL(二)_第4张图片

6、实体和端口模式

实体的功能是对设计实体与外部电路进行接口的描述。实体规定了设计单元的输入输出接口信号或引脚的形式及流动在上的数据的类型,以及相关的参数及参数通道。
实体说明单元的一般语句结构:

     ENTITY  实体名  IS
               [GENERIC ( 参数名:数据类型 );]
     [PORT ( 端口表:数据类型 );]   
  END  ENTITY 实体名;

(1)实体名
实体名最好根据相应电路的功能特性来确定(如:4位二进制计数器counter4b)。不能应用EDA软件工具库中已定义好的元件名作为实体名,不能用数字开头作为实体名。
(2) 端口语句和端口信号名
PORT()引导的端口说明语句是对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义。
(3)参数传递语句
参数传递语句GENERIC()负责构建一个影响电路规模或时序特性等参数的通道,同时也可以直接用GENERIC语句定义一些参数。
(4)端口模式
● OUT :输出端口。定义的通道为单向输出模式。
● IN :输入端口。定义的通道为单向只读模式。
● INOUT :双向端口。定义的通道确定为输入输出双向端口。
● BUFFER :缓冲端口。当需要输入数据时,只允许内部回读输出信号,即允许反馈。BUFFER回读的信号不是外部输入的,而是由内部产生、要向外输出的信号。

7、结构体的一般语言格式

		ARCHITECTURE  结构体名  OF 实体名  IS
		         [说明语句]
		BEGIN
		        [功能描述语句]
		END ARCHITECTURE 结构体名;

说明语句必须放在关键词ARCHITECTURE和BEGIN之间。 结构体中的说明语句是对结构体的功能描述语句中将要用到的信号、数据类型、常数、元件、函数和过程等加以说明。

8、功能描述语句结构

(1)生成语句、(2)块语句(3)进程语句(4)并行赋值语句(5)子程序调用语句(过程、函数)(6)元件例化语句

9、VHDL语言所使用的库可分为两类:

(1)资源库:用于存放常规元件、标准模块、预定义数据类型等,如:IEEE库。
(2)设计库:是一种符合VHDL标准的预定义库。如WORK库存放用户设计和定义的设计单元及程序包等。
● IEEE库、 ● STD库、 ● WORK库、 ● VITAL库

10、库和包

IEEE库中的标准程序包主要包括STD_LOGIC_1164,NUMERIC_BIT和NUMERIC_STD等程序包。此外,还有一些程序包虽非IEEE标准,但由于其已成事实上的工业标准,也都并入了IEEE库。这些程序包中,最常用的是Synopsys 公司的STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED程序包。
VHDL语言标准定义了两个标准程序包,即STANDARD和TEXTIO程序包,它们都被收入在STD库中。由于STD库符合VHDL语言标准,在应用中不必如IEEE库那样以显式表达出来
如: LIBRARY STD; --打开STD库 USE STD.STANDARD.ALL; --使用STD库中所有内容
WORK库用于存放用户设计和定义的一些设计单元和程序包。WORK库自动满足VHDL语言标准,在实际调用中,不必以显式预先说明。进行VHDL设计时,不允许在根目录下进行,而是必须在某路径上为此设定一个文件夹,此文件夹默认保存在WORK库中。
VHDL的时序仿真库,用于VHDL门级时序仿真。使用VITAL库,可以提高VHDL门级时序模拟的精度,因而只在VHDL仿真器中使用。目前,FPGA/CPLD设计开发过程中,一般并不需要VITAL库中的程序包,QuartusⅡ不需要VITAL库。
用户还可以自己定义一些库,用来存放设计中共用的一些程序包,这是设计人员自己建立的资源库,可以提高设计的灵活性。

11、库和程序包的调用方法

LIBRARY 库名;
USE 库名.程序包名.ALL;
例: LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;

12、USE语句的使用有两种常用格式:

        USE 库名.程序包名.项目名 ; 
        USE 库名.程序包名.ALL ;
		例:LIBRARY IEEE ;
		  USE IEEE.STD_LOGIC_1164.STD_ULOGIC ;
		  USE IEEE.STD_LOGIC_1164.RISING_EDGE ; 

13、配置语句的一般格式如下:

CONFIGURATION 配置名 OF 实体名 IS
   for 为实体选配的结构体名 
   end for;
 END 配置名; 

14、数制

数制基数表示的文字:用这种方式表示的数由五个部分组成。
SIGNAL d1,d2,d3,d4,d5, : INTEGER RANGE 0 TO 255;
d1 <= 10#170# ; – (十进制表示,等于 170)
d2 <= 16#FE# ; – (十六进制表示,等于 254)
d3 <= 2#1111_1110#; – (二进制表示,等于 254)
d4 <= 8#376# ; – (八进制表示,等于 254)
d5 <= 16#A#E3 ; – (十六进制表示,等于16#A000#)

15、标识符

标识符是设计者在VHDL程序中自定义的,用于标识不同名称的词语。标识符不分大小写。
规则:
有效的字符:包括26个大小写英文字母,数字包括0~9 以及下划线“”。
任何标识符必须以英文字母开头。
必须是单一下划线“
”,且其前后都必须有英文字母或数字。
标识符中的英语字母不分大小写。

16、关键词

关键词是VHDL中预定义的有特殊含义的英文词语。用户不能用关键词命名自用的对象。(ENTITY、ARCHITECTURE、END、OUT、IN、AND和OR都是关键词)关键词不区分大小写

17、文件名

(1)编辑好的VHDL程序,保存文件时,文件后缀扩展名必须是“.vhd”
(2)考虑到EDA软件的限制性和调用的方便,程序的文件名与实体名一致(如:mux41a.vhd)。VHDL文件取名大小写不敏感。
(3)VHDL程序必须存入某文件夹中(非中文文件夹名),不能存在根目录内或桌面上。

18、常数定义

一般表述: CONSTANT 常数名:数据类型 := 表达式 ;
CONSTANT FBT : std_logic_vector := “010110” ;
CONSTANT datain : integer := 15;

19、变量(VARIABLE)

●变量是一个局部量,只能在进程和子程序中使用。
● 变量的赋值是立即发生的,不存在任何延时。
● 主要作用是在进程中作为临时的数据存储单元。
● 变量的初始值用于仿真,但综合时被忽略。

VARIABLE 变量名 : 数据类型 := 初始值 ; (初始值不是必须的)

   例:  VARIABLE a : integer range 0 to 15;
         --变量a定义为整数,取值范围是0到15

            VARIABLE d : std_logic :=‘1’;
         --变量d定义为标准逻辑位数据类型,初始值是1

20、信号定义格式

SIGNAL 信号名: 数据类型 := 初始值 ;(初始值不是必须的)
信号具有全局性,信号的使用和定义范围是实体、结构体和程序包。在进程和子程序的顺序语句中不允许定义信号。(但允许赋值)
进程中只能将信号列入敏感表,而不能将变量列入敏感表。
除了没有方向说明以外,信号与实体的端口概念是一致的。在实体中定义的端口,在其结构体中可以看成信号,并加以使用。

信号赋值:                              
           目标信号名<=表达式  AFTER 时间量;
(1)表达式可以是一个运算表达式,也可以是数据对象。
(2)数据信息的传入可以设置延时量。不设置时,也有δ延时。
SIAGNAL a,b,c,y,z: integer;
     ……
     PROCESS (a,b,c)
     Begin
     y <= a+b;
     z <= c-a;
     y <= b;
     END PROCESS;

你可能感兴趣的:(EDA硬件描述语言VHDL,vhdl)