前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VHDL硬件描述语言(三)——基本数据对象和数据类型

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

作者头像
zy010101
发布2019-05-25 19:49:19
2.6K0
发布2019-05-25 19:49:19
举报
文章被收录于专栏:程序员程序员

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);

函数转换法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常量
  • 变量
  • 信号
    • 信号与端口的不同
      • 信号的赋值
      • 标准数据类型
      • IEEE库数据类型
      • 用户自定义数据类型
      • 数据类型之间的转换
        • 强制类型转换
          • 函数转换法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档