VHDL硬件描述语言(三)——基本数据对象和数据类型

2025-11-16 09:17:11

VHDL是一种强类型的语言,它不允许不同数据类型之间的相互赋值。如果想在不同数据类型之间进行赋值则需要调用函数来完成。

在VHDL语言里,基本数据对象有三种:常量,变量以及信号。

常量常量就是常数,它的数值不能更改。它必须初始化。它的一般定义格式如下:

代码语言:javascript复制CONSTANT 常量名:数据类型 := 表达式; --表达式是用来初始化常量的变量变量的格式如下:

代码语言:javascript复制VARIABLE 变量名:数据类型 [:= 初值]; --初值可以不赋。变量赋值的时候使用“:=”来赋值。变量的值可以更改。对于变量的赋值是没有延迟的。

变量只能在子程序和进程中使用,主要是用来简化运算。变量的定义和信号非常相似,但是二者在程序中出现的位置是大大不同的。

代码语言:javascript复制ARCHITECTURE ... OF ... IS

SIGNAL 信号1:数据类型;

--信号声明在这里,在ARCHITECTURE的BEGIN之前

BEGIN

PROCESS(...)

VARIABLE 变量1:数据类型;

--变量声明在这里,在PROCESS的BEGIN之前。

BEGIN

END PROCESS;

END;变量是一个抽象的值,它不对应任何实际的电路连线,它的赋值是立即生效的。

信号信号的定义格式如下:

代码语言:javascript复制SIGNAL 信号名:数据类型 [:= 初值]; --初值可以不赋。初值仅在仿真的时候有用,在综合的时候会被忽略对于信号而言,我们认为它对应于一个实际物理部分。它的赋值不是立即生效的,而是有延迟的。下面是定义一个信号的例子。

代码语言:javascript复制SIGNAL a : BIT_VECTOR(0 TO 2);信号a是位矢量类型,它具有3个元素,而且它的最高位是0,最低位是2。如果希望2是最高位,0是最低位。那么如下。

代码语言:javascript复制SIGNAL a : BIT_VECTOR(2 DOWNTO 0); 关键字TO表示从左到右是升序排列,而DOWNTO是从左向右降序排列。

信号与端口的不同信号是用来描述电路内部的节点,而端口是描述电路外部的节点;信号没有方向,可以是输入,也可以是输出,但是端口是有方向的。可也将信号看作“实体内部不限定数据流动方向的端口”。除此之外,端口和信号并无其他区别。

信号的赋值代码语言:javascript复制信号<=值; 信号的赋值不是立即生效的,他有一个延时。这点和变量是不同的。变量的赋值是立即生效的。

标准数据类型整数(INTEGER)与数学意义上的一致。它可以作为对信号总线状态的一种抽象;在使用整数类型的时候,必须给定整数范围,使用关键字RANGE...TO...限定整数的取值范围,综合器将根据所限定的范围来决定二进制的位数。例如:

代码语言:javascript复制SIGNAL num : INTEGER RANGE 0 TO 15; --定义整数类型的信号,并且限定范围是0——15.位(BIT)用来表示一个信号的状态,它有两种取值‘0’和‘1’。在实际应用中,位可以用来描述总线的值。

位矢量(BIT_VECTOR),它是一组位的集合。位矢量是用双引号括起来的一组位数据。每一位都可以取‘0’和‘1’。通常用于表示总线状态。例如:“110011000”。

布尔量(BOOLEAN),它是二值枚举。包括两种状态:“TRUE”和“FALES”。

时间(TIME),完整的时间类型数据应该包含整数和单位两个部分,整数和单位之间至少应留出一个空格,例如:50 ns.时间类型经常用在仿真中以及指定延时。

IEEE库数据类型上面这些数据类型都是定义在STD中的,这是VHDL语言的标准。一般在VHDL语言设计中,我们还经常使用IEEE标准委员会制定的IEEE库的STD_LOGIC_1164程序包中的STD_LOGIC类型和STD_LOGIC_VECTOR类型。

STD_LOGIC类型具有9种状态, 如下所示。

其中只有0,1,-,Z是可以被综合器综合的,其他的都只能仿真,不能被综合。

通常,我们在VHDL程序设计的时候,都是使用STD_LOGIC和STD_LOGIC_VECTOR类型。而不经常使用BIT和BIT_VECTOR类型。

用户自定义数据类型用户自定义数据类型的格式如下:

代码语言:javascript复制TYPE 数据类型名 IS 数据类型;常用的有数组类型,整数类型,枚举类型,时间类型。

定义一个数组名为num的STD_LOGIC类型的数组,定义如下:

代码语言:javascript复制TYPE num IS ARRAY(0 TO 3) OF STD_LOGIC;数据类型之间的转换VHDL是一门强数据类型语言。它的数据类型之间的转换有两种方式。

强制类型转换这种方式和C语言的非常类似,例如可以如下:

代码语言:javascript复制VARIABLE a:INTEGER;

VARIABLE b:REAL;

a:=INTEGER(y);函数转换法

Copyright © 2022 世界杯预选赛欧洲区_世界杯在哪个国家举行 - kd896.com All Rights Reserved.