一、文字规则

1.1 标识符

标识符主要用来为端口、信号、变量、子程序、常数和参数等命名。
其规则如下:

  • 有效的字符:包括26个大小写英文字母,数字包括0~9 以及下划线“_”
  • 任何标识符必须以英文字母开
  • 下划线“_”的前后必须有英文字母或数字
  • 标识符中的英语字母不分大小写
  • 标识符的命名不能与保留字相同

1.2 数字

(1)整数:整数都是十进制的数

5
678
0
156E2(=15600)
45_234_287 (=45234287)

(2)实数:实数也都是十进制的数,但必须带有小数点

1.335
88_670_551.453_909(=88670551.453909)
1.0
44.99E-2(=0.4499)

(3)以数值基数表示的数

用这种方式表示的数由五部分组成:基 # 整数 # [指数]

  • 第一部分:用十进制数标明数值进位的基数;
  • 第二部分:数值隔离符“#”;
  • 第三部分:表达的数值;
  • 第四部分:指数隔离符“#” ;
  • 第五部分:用十进制数表示的指数部分,若为0可省略不写。
10#170# (170)
16#FE# (254)
2#1111_1110# (254)
8#376# (254)
16#E#1 (224)

1.3 字符和字符串

(1) 字符是用单引号括起来的ASCⅡ码

一般情况下VHDL对字母的大小写不敏感,但对字符的大小写是敏感的,
例:‘A’ 和 ‘a’ 是不同的。

(2) 字符串是用双引号括起来的字符序列

在VHDL中字符串常用来作为说明文字出现。
例:“it is time out”, “ ERROR ”,“Both S and Q equal to 1”
注意:“a” 和 ‘a’是不同的

1.4 位串

位串是用双引号括起来的数字序列,数字序列前面加上一个基数说明符:

B 二进制基数符号,可以省略
0 八进制基数符号
X 十六进制基数符号(0~F)

采用位串的优点是为了增加源代码的可读性

B"1_1101_1110" -- 二进制数数组,位矢数组长度是9
O"15" -- 八进制数数组,位矢数组长度是6
X"AD0" -- 十六进制数数组,位矢数组长度是12
"101_010_101_010" -- 二进制数数组,位矢数组长度是12
"0AD0" -- 表达错误,缺X

1.5 结束标志与注释

  • 每个逻辑行以一个分号作为结束标志。
  • 注释语句用 "–"开始到本行结束的一段文字来进行一段的描述
  • 注释不是设计功能描述的一部分,所以不会被编译。

二、数据对象

VHDL是一种硬件描述语言,硬件电路的工作过程实际上是信号的传输和存储的过程,所以VHDL最基本的描述对象是信号。为了便于描述,还定义了另外三类数据对象:变量常量和文件。

2.1 常量(CONSTANT)

常量是指在设计实体中不会发生变化的值

常量定义的一般表述

constant 常量名:数据类型 := 表达式 ;

注:

  • 常量可以在程序包、实体说明、结构体和进程的说明区域进行说明
  • 常量一旦被赋值就不能再改变
  • 常量所赋的值应与其所定义的数据类型一致,否则出错

2.2 变量(VARIABLE)

变量主要用于对暂时数据进行存储,它不能将信息带出对它作出定义的当前单元。

定义变量的一般表述:

VARIABLE 变量名:数据类型 [:= 初始值];

变量赋值格式变量名 := 表达式;
例如:

a := “1010101” ; ------位矢量赋值
b := ‘0’ ; ------------位赋值
x := 100.0 ; ----------实数赋值

注:

  • 赋值语句右边的表达式必须是一个与目标变量具有相同数据类型的数值。
  • 变量是一个局部量,只能在进程和子程序中使用。
  • 变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时的行为。

2.3 信号(SIGNAL)

信号是描述硬件系统的基本数据对象,它是设计实体中并行语句模块间动态交换数据的段。在物理上信号对应着硬件设计中的一条连接线。

信号与端口都描述了电路中实际存在的节点(Node),只是信号描述的是实体内部的节点,而端口则描述实体与外界的接口。在语法上,信号的声明与端口的声明很相似。

信号定义语句格式:

SIGNAL 信号名: 数据类型 [:= 初始值] ;

信号赋值采用如下格式: 信号名 <= 表达式;
例如:

x <= 9;
y <= x;`

注:

  • 同一信号不能在两个进程中赋值。
  • 在同一进程中,可以允许多次对同一信号赋值。即在同一进程中存在多个同名的信号被赋值。但是因为信号的赋值是有延时的,其结果只是最后的赋值语句被启动

2.4 信号与变量赋值语句功能的比较

变量VARIABLE

  1. 基本用法:在进程中作为局部数据存储单元使用
  2. 适用范围:只能在所定义的进程中使用
  3. 行为特性:
    • 赋值是没有延迟的
    • 在进程中是立即赋值

信号SIGNAL

  1. 基本用法:在电路中作为信号连线使用
  2. 适用范围:在整个结构体内的任何地方都能适用
  3. 行为特性:
    • 赋值具有一定的延迟
    • 在进程中,只在进程的的最后才对信号赋值

三、数据类型

对于VHDL的每一个数据对象来说,都要指定其数据类型,因此,VHDL需要提供用来指定对象的数据类型。
VHDL的强类型特性,使得VHDL在进行硬件描述时具有很高的灵活性。
VHDL的强类型特性主要体现在以下几个方面:

  • 每一对象只能具有一个数据类型且只能具有那个数据类型的值。
  • 对某对象进行操作的类型必须与该对象的类型相匹配。
  • 不同类型之间的数据不能直接带入,即使数据类型相同,而位长不同也不能进行带入。
    VHDL中的数据类型可分为五大类:
  1. 标量类型:是最基本的数据类型,通常用于描述一个单值数据对象。标量类型包括:实数类型、整数类型、枚举类型和时间类型。
  2. 复合类型:由细小的数据类型复合而成,如可由标量类型复合而成。复合类型主要有数组型和记录型。
  3. 子类型:是上述基本类型的子集,是对已有的数据类型加以限制。
  4. 文件类型:不同类型的数据和数据名组织在一起形成新的数据对象。
  5. 存取类型:为数据对象提供存取方式。

上述五大类数据类型又可分成在现成程序包中可以随时获得的预定义数据类型用户自定义数据类型两类。

3.1 预定义数据类型

预定义数据类型是VHDL中最常用、最基本的数据类型,这些数据类型都已在VHDL的标准程序包Standard和std_logic_1164及其它的标准程序包中作了定义,可在设计中随时调用。

3.1.1VHDL的预定义数据类型

  1. 整数(INTEGER)数据类型:正整数、负整数和零。可以使用预定义的运算操作符,但不能按位访问,也不能进行逻辑操作。
  2. 实数(REAL)数据类型:类似于数学中的实数,或称为浮点数,通常情况下实数类型仅能用于VHDL的仿真,综合器一般不支持实数。
  3. 位(BIT)数据类型:属于枚举型,取值只能是‘1’和‘0’。
  4. 位矢量(BIT_VECTOR)数据类型:是BIT的数组,使用位矢量必须注明位宽。
  5. 布尔(BOOLEAN)数据类型:属于枚举型,取值为false和true。
  6. 字符(CHARACTER)数据类型:字符类型通常用单引号引起来。
  7. 字符串(STRING)数据类型:字符串必须用双引号标明。
  8. 时间(TIME)数据类型VHDL中唯一的预定义物理类型是时间。完整的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格
  9. 错误等级(severity level)错误等级类型数据用来表征系统的状态共有4种:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。
  10. 自然数(natural),正整数(positive)

3.1.2 IEEE预定义标准逻辑位与矢量

  1. 标准逻辑位STD_LOGIC数据类型
  2. 标准逻辑矢量(STD_LOGIC_VECTOR)数据类型。std_logic_vector是std_logic的数组形式。
    注:std_logic和std_logic_vector是ieee的预定义数据类型,使用时必须先打开ieee库。即:library ieee; use ieee.std_logic_1164.all;
    std_logic是一个9值的逻辑:
U 未初始化状态
X 不定态
0 逻辑0
1 逻辑1
Z 高阻态
W 弱不定态
L 弱0
H 弱1
- 无关态

3.2用户自定义数据类型

除标准的预定义数据类型外,VHDL还允许用户自行定义新的数据类型,由用户定义的数据类型可以有多种,如枚举类型、整数类型、实数类型、数组类型、记录类型和时间类型等

  1. TYPE语句用法:
TYPE 数据类型名 IS 数据类型定义 [OF 基本数据类型] ;

注:

  • 数据类型名由设计者自定;
  • 数据类型定义部分用来描述所定义元素的表达方式和表达内容;基本数据类型是指数据类型定义中所定义的基本数据类型,一般都是取已有的预定义数据类型。

数组类型:TYPE 数组名 IS ARRAY (数组范围) OF 数据类型 ;

type st1 is array (0 to 15) of std_logic;

枚举数据类型: TYPE 枚举名 IS (枚举内容)

如:在状态机描述中,使用枚举类型为每个状态命名,增加程序可读性。

type State_type is (Start,Step1,Step2,Final);
signal State : State_type;
  1. SUBTYPE语句用法:
    SUBTYPE是TYPE所定义的数据类型的一个子集,它满足原数据类型的所有约束条件,原数据类型称为基本数据类型
    SUBTYPE 格式如下:
SUBTYPE 子类型名 IS 基本数据类型 range 约束范围;

注:

  • 子类型名由设计者自定;
  • 基本数据类型必须是前面已有过type定义的类型。

例:

subtype dig is integer range 0 to 9;

四、运算符

VHDL中共有四类操作符:逻辑操作符、关系操作符、算术操作符和连接操作符

4.1 逻辑运算符:

操作符 功能 操作数类型
AND std_logic、 bit、 boolean
OR std_logic、 bit、 boolean
NOT 取反 std_logic、 bit、 boolean
NAND 与非 std_logic、 bit、 boolean
NOR 或非 std_logic、 bit、 boolean
XOR 异或 std_logic、 bit、 boolean
XNOR 同或 std_logic、 bit、 boolean

4.2 算术运算符

操作符 功能 操作数类型
+ 加法 整数
减法 整数
* 乘法 整数和实数
SLL等 移位 bit或布尔类型的一维数组

4.3 关系运算符:

操作符 功能 操作数类型
= 等于 任何数据类型
/= 不等于 任何数据类型
< 小于 integer、real、 bit、 std_logic等及其一维向量
<= 小于等于 integer、real、 bit、 std_logic等及其一维向量
> 大于 integer、real、 bit、 std_logic等及其一维向量
>= 大于等于 integer、real、 bit、 std_logic等及其一维向量

注:

  • 关系运算符运算的最后结果总是布尔类型
  • 关系运算符两边的数据类型必须相同,但是位的长度不一定相同。
  • 对位矢量数据进行比较时,比较从最左边的位开始,自左至右进行比较的

4.4 并置运算符(连接运算符)

并置运算符又称连接运算符,其符号为:&
功能是进行位的连接。

VHDL硬件描述语言(三)VHDL语言要素相关推荐

  1. VHDL硬件描述语言学习笔记(三)

    本文主要参考b站视频:[考研]EDA技术(vhdl技术),建议有时间的跟着听一下,从第8节开始,一直到31节都是讲VHDL,讲的很全面,赶时间的可以直接看我这个笔记. 文章目录 1.5 VHDL并发语 ...

  2. 硬件描述语言与c语言函数,计算机硬件描述语言(VHDL)与编程语言(C语言)的区别及关系,...

    计算机硬件描述语言(VHDL)与编程语言(C语言)的区别及关系,以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 计算机硬 ...

  3. VHDL硬件描述语言学习笔记(二)

    本文主要参考b站视频:[考研]EDA技术(vhdl技术),建议有时间的跟着听一下,从第8节开始,一直到31节都是讲VHDL,讲的很全面,赶时间的可以直接看我这个笔记. 文章目录 1.3 VHDL语言要 ...

  4. VHDL硬件描述语言(一)——基本结构

    VHDL硬件描述语言是一种用于电路设计的硬件语言.出现在在80年代的后期,最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种设计语言 .VHDL主要用于描述数字系统的结构,行为, ...

  5. VHDL硬件描述语言学习笔记(一)

    本文主要参考b站视频:[考研]EDA技术(vhdl技术),建议有时间的跟着听一下,从第8节开始,一直到31节都是讲VHDL,讲的很全面,赶时间的可以直接看我这个笔记. 文章目录 一.概述 1.1 什么 ...

  6. VHDL硬件描述语言(一)基本概念

    一.EDA技术概述 电子设计自动化(EDA)技术是新一代电子设计工程师及从事电子技术开发和研究人员的必备技能,也是电子技术类专业学生学习的重要内容. EDA以功能强大的计算机为工具,在EDA工具软件平 ...

  7. VHDL硬件描述语言(五)VHDL的顺序语句

    顺序语句和并行语句是VHDL中的两大基本描述语句系列. 一.前言 所谓顺序语句,是指在仿真意义上具有一定顺序性(或者说在逻辑上有先后之分),并不意味着这些语句对于的硬件结构也有相同的顺序性. 所有门电 ...

  8. VHDL硬件描述语言(二)VHDL程序的基本结构

    ​ 一.基本结构 实体说明(entity):描述所设计的系统的外部接口部分 结构体(architecture):描述系统内部的结构和行为 程序包(package):存放各设计模块都能共享的数据类型.常 ...

  9. VHDL硬件描述语言(二)——子程序

    在VHDL语言中,子程序包括函数和过程.一般被定义在程序包里面. 函数 函数在VHDL中可以用于求值,函数的特征是多个输入,一个输出.这和普通的软件程序设计语言没有什么区别.函数定义的形式如下: FU ...

最新文章

  1. ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
  2. cocos2dx JS 层(Layer)的生命周期
  3. 为了远程控制:teamview检测为商用、ZeroTier + 自带远程桌面、Ping其他电脑ping不通
  4. Tomcat7的安装与配置
  5. 国内唯一入选云厂商——阿里云入选 2021 Gartner APM 魔力象限
  6. 2009设计大餐 Adobe CS4 全集下载
  7. PHP扩展开发--实验成功
  8. 【LeetCode】剑指 Offer 26. 树的子结构
  9. JMeter——JMeter如何进行汉化
  10. css盒模型(附图解)
  11. 计算领域高质量科技期刊分级目录
  12. Oracle 创建索引
  13. 计算机硬件检测与数据恢复试题,计算机硬件检测维修与数据恢复赛项国赛赛题.doc...
  14. VMware Workstation pro无法在Windows上运行的解决方法
  15. 编译原理 --- 递归下降分析器
  16. 武汉大学.计算机学院.密码学,密码学教学课件-武汉大学计算机学院.ppt
  17. linux修改键盘按键
  18. 中国科学院大学计算机考研信息汇总
  19. 大数据专业就业岗位有哪些?
  20. 2019网络攻击趋势

热门文章

  1. ASP.NET Core学习之路03
  2. IFTTT的简单使用-转发安卓手机的短信到邮箱
  3. 子墨对酒《三国杀》里论模式(一)工厂模式
  4. matlab页面批量下载,[转载]matlab批量从NOAA网站下载验潮站数据
  5. 模拟手机虚拟数字键盘
  6. 标杆案例|中海数字化转型:以客户为中心,打造客户全域旅程数据平台
  7. tess4j验证码识别
  8. 织梦HTTP IMAGE下载类
  9. 康涅狄格大学计算机科学排名,学校排名|Rankings
  10. APP架构一般性分类