VHDL的数据类型(学习笔记2)

2024-08-23 22:52

本文主要是介绍VHDL的数据类型(学习笔记2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VHDL语言学习笔记(二):数据类型

VHDL语言是一种强数据类型语言,它对运算关系和赋值关系中各种操作数据类型有严格要求:
VHDL要求设计实体中的每一个常量、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,只有相同数据类型的量才能相互传递和作用。


文章目录

  • VHDL语言学习笔记(二):数据类型
  • 1、标准的数据类型
    • 1.1,实数(REAL)
    • 1.2,整数(INTEGER)
    • 1.3,位(BIT)
    • 1.4,位矢量(BIT_VECTOR)
    • 1.5,布尔量(BOOLEAN)
    • 1.6,字符(CHARACTER)
    • 1.7,字符串(STRING)
    • 1.8,时间(TIME)
    • 1.9,错误等级(SEVERITY LEVEL)
    • 1.10,大于等于零的整数(NATURAL,自然数)、正整数(POSITIVE)
    • 关于标准的数据类型说明
  • 2、标准逻辑位数据类型
    • 2.1 标准逻辑位数据类型(STD_LOGIC)
    • 2.2 标准逻辑矢量数据类型
  • 3、用户自定义数据类型
    • 3.1 枚举类型
    • 3.2 整数类型和实数类型
    • 3.3 数组类型


1、标准的数据类型

在VHDL语言中,不需要定义就可以直接在程序中引用的数据类型称为标准的数据类型。


标准的数据类型

提示:VHDL预定义的数据类型均包含在VHDL标准程序包STANDARD中。

1.1,实数(REAL)

在VHDL语言中,实数类型类似于数学上的实数,也可以称之为浮点数类型。
实数类型通常只在VHDL程序仿真过程中使用。

1.2,整数(INTEGER)

整数类型的数包括正整数、负整数和零。在VHDL语言中整数类型和数学中的整数类型的定义类似。
整数在硬件电路设计中通常是用一系列二进制位值来表示的,但是整数不能看做位矢量,也不能按位进行访问,也就是说整数不能用进行逻辑操作。
当需要对整数进行位操作时,可以用转换函数,将整数转换为位矢量。

1.3,位(BIT)

在数字系统中,一个信号的值通常用一个位来表示。位与整数中的1和0不同,‘1’和‘0’仅仅表示一个位的两个取值。由于位不能表示高阻、不定态,因此在可综合的程序中很少使用。
位数据不同于布尔数据,但是可以通过转换函数进行转换。

1.4,位矢量(BIT_VECTOR)

位矢量是基于BIT数据类型的数组,是93版拓展的数据类型,它是用双引号括起来的拓展数字序列。示例如下,

B"101011001011"  --12位二进制位串
X"CDBF06"        --24位十六进制位串
O"47631"         --15位八进制位串
X""              --空位串

位矢量最前面的B、X、O分别表示二进制、十六进制和八进制,通常二进制位串前的B可以不写。用位矢量数据表示总线状态最方便、也最容易理解,因此在VHDL程序中经常使用。

1.5,布尔量(BOOLEAN)

布尔量是一个二值枚举数据类型。一个布尔量具有两种状态 – “TRUE”或“FALSE”,数据的初始值总为FALSE。
虽然布尔量跟位一样都是二值枚举量,但是它没有数值的含义,可以进行关系运算,不能进行算术运算。布尔量只用来比较或判断,不能用作运算操作数。

1.6,字符(CHARACTER)

在VHDL语言中,字符也是一种数据类型,所定义的字符量通常用单引号括起来,如’E’。一般情况下,VHDL编译器对大小写不敏感,但是对于字符量中的大、小写字符则认为其不一样。
与布尔量一样,字符也没有具体的数值含义,也不能进行算术运算。

1.7,字符串(STRING)

字符串使用双括号括起来的一个字符序列,也可以称为字符矢量或字符串数组。例如:“HELLO”。
字符串通常用于程序的提示和说明。

1.8,时间(TIME)

在VHDL中,时间是一个物理量数据,它的约束范围可以是整个整数范围。
完整的时间量数据应包含整数和单位两部分,而且整数和单位之间至少应保留一个空格的位置。
在程序包STANDARD中给出的时间的预定义,共有fs、ps、ns、μs、ms、sec、min、hr等7种。
时间类型一般常常用于仿真,而不用于逻辑综合。

1.9,错误等级(SEVERITY LEVEL)

在VHDL语言中,错误等级也被认为是一种数据类型,它可以用来表征系统的状态。错误等级各类型的具体定义为,
NOTE:当前设计中出现了一些应该给予注意的事件信息;
WARNING:设计暂时不会完全失败时让设计人员做些修改;
ERROR:需要修改引起错误工作情况的模块或者整个都不工作的设计;
FAILURE:在设计中可能发生破坏性影响的情况下,允许设计人员修改设计。

1.10,大于等于零的整数(NATURAL,自然数)、正整数(POSITIVE)

在VHDL语言中,自然数和正整数都是整数的子集,NATURAL类数据只能取值0和0以上的正整数,POSITIVE只能为大于0的正整数。

关于标准的数据类型说明

以上10中数据类型是VHDL语言中的标准的数据类型,在编程时可以直接引用。
由于VHDL语言术语强类型语言,在仿真过程中,首先要检查赋值语句中的类型和区间,任何一个信号和变量的赋值均须在给定的约束区间中,也就是必须在有效的数值的范围内。


2、标准逻辑位数据类型

在IEEE库的程序包STD_LOGIC_1164中,定义了两种非常重要的数据类型:标准逻辑位(STD_LOGIC)和标准逻辑矢量(STD_LOGIC_VECTOR)数据类型。


2.1 标准逻辑位数据类型(STD_LOGIC)

标准逻辑位数据类型是BIT数据类型的拓展,其定义了9中逻辑值:“U”表示未初始化的,“X”表示强未知的,“0”表示强逻辑0,“1”表示强逻辑1,“Z”表示高阻态,“W”表示弱未知的,“L”表示弱逻辑0,“H”表示弱逻辑1,“-”表示忽略态,完整地概括了数字系统中所有可能的数据表现形式。其在IEEE库程序包STD_LOGIC_1164中的STD_LOGIC数据类别的定义语句结构如下,

TYPE STD_LOGIC IS ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') ;

注意:STD_LOGIC数据类型中的数据是用大写字母定义的,使用中不能用小写字母代替。

在程序使用该数据类型前,要添加一下语句:

LIBRARY IEEE:
USE IEEE STD_LOGIC_1164.ALL ;

程序包STD_LOGIC_1164中还定义了关于STD_LOGIC数据类型的逻辑运算符AND、NAND、OR、NOR、XOR和NOT的重载函数及多个转换函数,以用于不同数据类型间的相互转换。
对于综合器,高阻态和忽略态可用于三态的描述。但是对于综合而言,STD_LOGIC型数据能够在数字器件中实现的只有其中的4种逻辑值:X、0、1和Z。其他的5种逻辑状态不可综合只能用于VHDL仿真。

2.2 标准逻辑矢量数据类型

标准逻辑矢量数据类型的定义语句结构如下,

TYPE STD_LOGIC_VECTOR IS ARRAY (NATURAL RANGE<>) OF STD_LOGIC ;

其中,符号“<>”是下标范围待定符号。STD_LOGIC_VECTOR是定义了一个标准一维数组,数组中的每一个元素的数据类型都是以上定义的标准逻辑位数据类型。
标准逻辑矢量数据类型的数据对象赋值原则是:同位宽、同数据类型的矢量件才能进行赋值。


3、用户自定义数据类型

在VHDL语言中,用户可以根据自己需求来定义数据类型,具体定义语法结构为

TYPE 数据类型名 {,数据类型名} IS 数据类型定义 ;
TYPE 数据类型名 {,数据类型名} ;  --不完整用户定义数据类型书写方式

用户自定义数据类型的使用原则是,先定义,后使用。
用户可定义的数据类型种类有,
(1)枚举(Enumeration)类型;
(2)整数(Integer)类型;
(3)实数(Real)、浮点数(Floating)类型;
(4)数组(Array)类型;
(5)物理类型;
(6)记录(Recode)类型;
(7)文件(File)类型;
(8)存取(Access)类型;


3.1 枚举类型

枚举类型是一种可以用文字符号表示的用于特定操作所需要的值。
枚举类型数据的语法结构如下,

TYPE 数据类型名 IS (元素, 元素, ......) ;

定义语法结构示例,

TYPE week IS (MON, TUE, WED, THU, FRI, SAT, SUN ) ;

枚举类型如果需要用数值来定义,则必须使用单引号。
用户自定义的数据类型也是用顺序的,在枚举顺序列表中,最左边的值低于所有其他的值,右边的值大于其他所有的值,每一个值均大于其左边数值而低于其右边数据值。例如,

TYPE status IS (s0Wait, s1Run, s2Pause, s3Stop) ;SIGNAL s1, s2 : statuss0Wait = '00' ;s1Run  = '01' ;s2Pause = '10' ;s3Stop  = '11' ;

3.2 整数类型和实数类型

如果用户需要使用的整数或实数取值范围要在一定的范围内,那么用户可以自定义整数/实数类型,其书写方式如下,

TYPE 数据类型名 IS 数据类型定义约束范围 ;  --定义格式TYPE number IS integer range 0 to 9 ;  --自定义了一个范围从0到9的整数类型
TYPE fNum  IS range -1E4 to 1E4 ; --自定义了一个实数类型

3.3 数组类型

数组类型属于复合类型,是将相同类型的数据集合在一起所形成的一个新的数据类型。它可以是含有一个下标的一维数组,也可以是含有多个下标的二维或多维数组。

数组的定义语法结构如下

TYPE 数据类型名 IS ARRAY 数组范围 OF 原数据类型名。

根据语法结构中数组范围的不同,数组类型可以分为限定性数组类型和非限定性数组类型。限定性数组下标的取值范围(数组的上下界)在数组类型定义时就被确定了,非限定性数组不指明数组的上下界,而在定义对象的过程中进行指定。

  • 限定性数组的语法结构
TYPE 数据类型名 IS ARRAY (数组范围) OF 原数据类型名
--示例
TYPE word IS ARRAY (1 TO 8) OF BIT ;

数据类型名是新定义的限定性数组类型的名称,可以是任何标识符。
数组范围明确指出了数组元素的定义数量和排序方式,以整数来表示数组的下标。
数组类型指明了数组各元素的数据类型。

  • 非限定性数组的语法结构
TYPE 数据类型名 IS ARRAY (数组下标名 RANGE<>) OF 原数据类型名 ;
--示例
TYPE doubleword IS ARRAY (NATURAL RANGE<>) OF BIT ;

数据类型名是定义的非限定性数组类型的名称。
数组下标名是以整数类型设定的一个数组下标名称。
符号’<>'是下标范围待定符号,用到该数据类型时,再填入具体的数组范围。
数据类型指明了数组各元素的数据类型。

这篇关于VHDL的数据类型(学习笔记2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100724

相关文章

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个