当前课程知识点:EDA技术与应用 >  第四章 VHDL语言概述 >  4.8 运算操作符和属性 >  4.8.2 运算操作符和属性 教学视频

返回《EDA技术与应用》慕课在线视频课程列表

4.8.2 运算操作符和属性 教学视频在线视频

下一节:4.8.4 运算操作符和属性 讨论

返回《EDA技术与应用》慕课在线视频列表

4.8.2 运算操作符和属性 教学视频课程教案、知识点、字幕

同学们,大家好

这一讲我们来学习

VHDL的运算 操作符和属性

和数据类型、数据对象一样

运算操作符和属性也是VHDL语言的基础

通常编程语言的语法基础的学习

是比较枯燥的

但是,只有对这些语法基础

有了深刻的理解之后

才能写出高质量和高效率的代码

下面,我们先来了解VHDL中的运算操作符

VHDL语言提供了六种预定义的运算操作符

分别是赋值运算符、

逻辑运算符、

算术运算符、

关系运算符

移位运算符和并置运算符

下面我们来详细介绍每一种运算符

赋值运算符用来给信号、变量和常量赋值

赋值运算符包括三种形式

第一种形式用于对信号的赋值

第二种形式用于对变量和常量的赋值

也可以用于赋初始值

第三种形式用于给矢量中的某些位赋值

或者对某些位之外的其他位

常用others表示,来进行赋值

下面我们来看几个例子

首先,我们来定义几个变量和信号

第一条语句定义了信号 x

数据类型为STD_LOGIC类型

第二条语句定义了一个变量 y

数据类型是4位宽度的

STD_LOGIC_VECTOR类型

其中,最左边的位是最高位

第三条语句定义了信号w

数据类型是8位宽度的

STD_LOGIC_VECTOR类型

最右边的位是最高位

下面是几个赋值操作

第一条赋值语句

是把高电平‘1’赋值给信号x

第二条赋值语句

是把“0000”四位宽度的数据

赋值给变量 y

要注意对变量的赋值必须用 :=

而不能与信号的赋值混淆

另外还要注意赋值符两边表达式的

数据类型和宽度都要一致

否则赋值就会出错

第三条赋值语句是把8位宽度的数据

“10000000”赋值给信号w

其中,最低位为高电平‘1’

其它位均为低电平‘0’

注意,两位以上的数据要用双引号

而不能用单引号

上面的操作还可以用另一种形式来表达

把高电平‘1’赋值给信号w的最低位w0

而其他位均为低电平‘0’

这样的赋值操作

常用关键字OTHERS来实现

在表达上更加清晰和简洁

在这个例子中

对矢量的某些位

或某些位以外的其它位的赋值

就使用了第三种赋值符

也就是由等号和大于号构成的赋值符

逻辑运算符是用来执行逻辑运算操作的

逻辑运算符的操作数必须是BIT类型

STD_LOGIC类型

或STD_ULOGIC类型的数据

或者是这些数据类型的扩展

也就是BIT_VECTOR

STD_LOGIC_VECTOR

STD_ULOGIC_VECTOR等

在VHDL中逻辑运算符有以下几种

NOT是取反

AND是与

OR是或

NAND是与非运算

NOR是或非运算

XOR是异或运算

XNOR是同或运算

其中,同或运算符在VHDL87中没有定义

是在VHDL93中被引入

表中的这些运算符的优先级

由上之下是递减的

使用时要注意合理的运用括号

来完成所需要的逻辑运算次序

例如,第一条语句是a的非与b

运算结果赋值给y

第二条语句是a与b,然后取反

也就是a和b做与非运算后结果赋值给y

第三条语句和第二条语句功能一样

都是把a和b的与非运算结果赋值给y

算术运算符是用来执行算术运算操作的

操作数可以是

整数、有符号数、无符号数和实数

VHDL中有8种算术运算符

分别是加、减、乘、除

指数运算、取模、取余和取绝对值

关系运算符是用来对两个操作数进行比较

使用时运算符两边操作数的数据类型

必须相同

VHDL中有6种关系运算符

分别是等于、不等于、小于

大于、小于等于和大于等于

其中,小于等于运算符和对信号的赋值符

在书写形式上是完全相同的

在代码中要根据上下文的意义来加以区分

移位运算符用来对操作数进行移位操作

移位操作的语法格式是

左操作数

然后是移位运算符

最后是右操作数

VHDL中常用的移位运算符有六种

分别为逻辑左移、逻辑右移

算术左移、算术右移、

循环逻辑左移和循环逻辑右移

下面我们来看各种移位运算符的功能

首先,假设给信号x赋值01001

逻辑左移是把x向左移2位

右边空出来的位置填0

所以y等于“00100”

逻辑右移是把x向右移2位

左边空出来的位置填0

所以y等于“00010”

算术左移是把x向左移两位

同时 复制最右端的位

在数据左移操作后

填充在右边空出的位置上

所以y等于“00111”

这就是算术左移

算术右移是把x向右移两位

同时 复制最左端的位

在数据右移操作后

填充在左边空出的位置上

所以y等于“00010”

这就是算术右移

循环逻辑左移是把x向左移两位

同时 从左端移出的位

依次填充到右边空出的位置上

所以y等于“00101”

这就是循环逻辑左移

循环逻辑右移是把x向右移两位

同时 从右端移出的位

依次填充到左边空出的位置上

所以y等于“01010”

这就是循环逻辑右移

另外,如果在移位操作中

右操作数是负值

则相当于相反方向的移位运算

并置运算符用于位的拼接

其操作数

可以是支持逻辑运算的任何数据类型

并置运算符主要有两种形式

一种是符号“&”

另一种是用逗号来完成并置运算

例如

我们可以用并置运算符构成的表达式

对信号y赋值

如果x是高电平‘1’

则y等于“11000”;

我们还可以用第二种并置连接的方式

把5个值连接起来赋值给信号y

同样可以使y等于“11000”

那么,这五个值之间是用逗号来分隔的

这就是并置运算符的功能

VHDL语言中的属性语句

可以从指定的对象中

获得我们需要的数据或信息

因此,可以使VHDL代码更灵活

一般来说

表示一个对象属性的书写格式为:

对象名’属性名

VHDL中常用的预定义属性主要有两类

数值类属性和信号类属性

数值类属性

通常用于返回指定对象的特定值

常用的数值类属性主要有以下几种

下限值属性LOW,返回数组的下限值

上限值属性HIGH,返回数组的上限值

左边界属性LEFT,返回数组的左边界

右边界属性RIGHT,返回数组的右边界

长度属性LENGTH,返回矢量的长度

位宽范围属性RANGE

返回矢量的位宽范围

位宽反序属性REVERSE_RANGE

是按相反次序返回矢量的位宽范围

例如,我们定义了一个信号d

数据类型是

STD_LOGIC_VECTOR(7 DOWNTO 0)

则d的下限值属性返回值为0

上限值属性返回值为7

左边界属性返回值为7

右边界属性返回值为0

数组长度属性返回值8

数组位宽范围属性返回值为7 DOWNTO 0

数组位宽反序属性返回值0 TO 7

信号类属性

用来得到信号的有关行为信息和功能信息

常用的信号类属性主要有以下几种

EVENT 事件属性

如果信号的值发生变化

则该属性返回值为布尔量true

否则返回false

STABLE属性

如果信号的值保持稳定,没有发生变化

则返回值为布尔量true

否则返回false

ACTIVE属性

如果信号的当前值为高电平‘1’

则该属性返回值为布尔量true

否则返回false

EVENT事件属性常用于判断时钟信号的边沿

在数字电路中

时钟信号分为上升沿和下降沿

一般来说

时序电路的状态变化

都发生在时钟的边沿时刻

在实际应用中

大多数时序电路

都把上升沿作为电路状态转换的同步信号

时钟上升沿的到来

表明有一个事件发生了

用属性描述为:clk'EVENT

上升沿到来以后

时钟信号的当前值为高电平‘1’

因此,时钟信号上升沿的描述为

我们可以写成:

clk'EVENT and clk='1’

当这个表达式返回布尔值true的时候

就说明时钟上升沿到来了

在VHDL中

还有另一种常用的

时钟上升沿的判断表达式:

RISING_EDGE(clk)这个函数

会根据时钟信号

clk的上升沿是否到来返回相应的布尔值

如果时钟上升沿到来

则该函数返回true 否则返回false

运算操作符

是构成VHDL语言中各种表达式的基本元素

在VHDL语言中

提供了丰富的运算操作符供我们使用

在学习中 要了解各种运算操作符的功能

同时还要注意操作数的数据类型

必须与运算操作符所要求的数据类型一致

属性的应用

可以使VHDL代码更加简洁和易于理解

对常用的属性及其使用要非常熟悉

好,本讲到这里就结束了

同学们,再见

EDA技术与应用课程列表:

第一章 EDA技术概述

-1.1 EDA技术概述

--1.1.1 EDA技术概述 导学

--1.1.2 EDA技术概述 教学视频

--1.1.3 EDA技术概述 单元测验

--1.1.4 EDA技术概述 讨论

第二章 可编程逻辑器件概述

-2.1 可编程逻辑器件(PLD)概述

--2.1.1 可编程逻辑器件 导学

--2.1.2 可编程逻辑器件概述 教学视频

--2.1.3 可编程逻辑器件概述 单元测验

--2.1.4 可编程逻辑器件概述 讨论

-2.2 CPLD的结构和原理

--2.2.1 CPLD结构和原理 导学

--2.2.2 CPLD的结构和原理 教学视频

--2.2.3 CPLD的结构和原理 单元测验

--2.2.4 CPLD的结构和原理 讨论

-2.3 FPGA的结构和原理

--2.3.1 FPGA的结构和原理 导学

--2.3.2 FPGA的结构和原理 教学视频

--2.3.3 FPGA的结构和原理 单元测验

--2.3.4 FPGA的结构和原理 讨论

-2.4 FPGA和CPLD的选用

--2.4.1 FPGA和CPLD的选用 导学

--2.4.2 FPGA和CPLD的选用 教学视频

--2.4.3 FPGA和CPLD的选用 单元测验

--2.4.4 FPGA和CPLD的选用 讨论

-2.5 FPGA与CPLD的编程和配置

--2.5.1 FPGA与CPLD的编程与配置 导学

--2.5.2 FPGA与CPLD的编程与配置 教学视频

--2.5.3 FPGA与CPLD的编程与配置 单元测验

--2.5.4 FPGA与CPLD的编程与配置 讨论

第三章 EDA开发平台——QuartusII应用

-3.1 QuartusII概述

--3.1.1 Quartus Ⅱ概述 导学

--3.1.2 Quartus Ⅱ概述 教学视频

--3.1.3 Quartus Ⅱ概述 单元测验

--3.1.4 Quartus Ⅱ概述 讨论

-3.2 新建工程

--3.2.1 新建工程 导学

--3.2.2 新建工程 教学视频

--3.2.3 新建工程 单元测验

-3.3 设计输入

--3.3.1 设计输入 导学

--3.3.2 设计输入 教学视频

--3.3.3 设计输入 单元测验

--3.3.4 设计输入 讨论

-3.4 设计编译

--3.4.1 设计编译 导学

--3.4.2 设计编译 教学视频

--3.4.3 设计编译 单元测验

--3.4.4 设计编译 讨论

-3.5 仿真验证

--3.5.1 仿真验证 导学

--3.5.2 仿真验证 教学视频

--3.5.3 仿真验证 单元测验

--3.5.4 仿真验证 讨论

-3.6 器件编程

--3.6.1 器件编程 导学

--3.6.2 器件编程1 教学视频

--3.6.3 器件编程2 教学视频

--3.6.4 器件编程 单元测验

--3.6.5 器件编程 讨论

-3.7层次化设计

--3.7.1 层次化设计 导学

--3.7.2 层次化设计 教学视频

--3.7.3 层次化设计 单元测验

--3.7.4 层次化设计 讨论

-3.8 宏功能模块的使用

--3.8.1 宏功能模块的使用 导学

--3.8.2 宏功能模块的使用 教学视频

--3.8.3 宏功能模块的使用 单元测验

--3.8.4 宏功能模块的使用 讨论

第四章 VHDL语言概述

-4.1 VHDL语言概述

--4.1.1 VHDL概述 导学

--4.1.2 VHDL语言概述 教学视频

--4.1.3 VHDL语言概述 单元测验

--4.1.4 VHDL概述 讨论

-4.2 VHDL代码的结构

--4.2.1 VHDL代码的结构 导学

--4.2.2 VHDL代码的结构 教学视频

--4.2.3 VHDL代码的结构 单元测验

--4.2.4 VHDL代码的结构 讨论

-4.3 库和库声明

--4.3.1 库和库声明 导学

--4.3.2 库和库声明 教学视频

--4.3.3 库和库声明 单元测验

--4.3.4库和库声明 讨论

-4.4 实体说明

--4.4.1 实体说明 导学

--4.4.2 实体说明 教学视频

--4.4.3 实体说明 单元测验

--4.4.4 实体说明 讨论

-4.5 结构体

--4.5.1 结构体 导学

--4.5.2 结构体 教学视频

--4.5.3 结构体 单元测验

--4.5.3 结构体 讨论

-4.6 VHDL预定义数据类型

--4.6.1 VHDL预定义数据类型 导学

--4.6.2 VHDL预定义数据类型 教学视频

--4.6.3 VHDL预定义数据类型 单元测验

--4.6.4 VHDL预定义数据类型 讨论

-4.7 常量、变量和信号

--4.7.1 常量、变量和信号 导学

--4.7.2 常量、变量和信号 教学视频

--4.7.3 常量、变量和信号 单元测验

--4.7.4 常量、变量和信号 讨论

-4.8 运算操作符和属性

--4.8.1 运算操作符和属性 导学

--4.8.2 运算操作符和属性 教学视频

--4.8.3 运算操作符和属性 单元测验

--4.8.4 运算操作符和属性 讨论

-4.9 IF语句和WAIT语句

--4.9.1 IF语句和WAIT语句 导学

--4.9.2 IF语句和WAIT语句 教学视频

--4.9.3 IF语句和WAIT语句 单元测验

--4.9.4 IF语句和WAIT语句 讨论

-4.10 CASE语句

--4.10.1 CASE语句 导学

--4.10.2 CASE语句 教学视频

--4.10.3 CASE语句 单元测验

--4.10.4 CASE语句 讨论

-4.11 LOOP循环语句

--4.11.1 LOOP循环语句 导学

--4.11.2 LOOP循环语句 教学视频

--4.11.3 LOOP循环语句 单元测验

--4.11.4 LOOP循环语句 讨论

-4.12 进程

--4.12.1 进程 导学

--4.12.2 进程 教学视频

--4.12.3 进程 单元测验

--4.12.4 进程 讨论

-4.13 条件信号赋值语句

--4.13.1 条件信号赋值语句 导学

--4.13.2 条件信号赋值语句 教学视频

--4.13.3 条件信号赋值语句 单元测验

-4.14 选择信号赋值语句

--4.14.1 选择信号赋值语句 导学

--4.14.2 选择信号赋值语句 教学视频

--4.14.3 选择信号赋值语句 单元测验

-4.15 元件例化语句

--4.15.1 元件例化语句 导学

--4.15.2 元件例化语句 教学视频

--4.15.3 元件例化语句 单元测验

--4.15.4 元件例化语句 讨论

-4.16 VHDL模块化设计

--4.16.1 VHDL模块化设计

--4.16.2 VHDL模块化设计 教学视频

--4.16.3 VHDL模块化设计 单元测验

--4.16.4 VHDL模块化设计 讨论

第五章 设计方法概述

-5.1 设计方法概述

--5.1.1 设计方法概述 导学

--5.1.2 设计方法概述 教学视频

--5.1.3 设计方法概述 单元测验

--5.1.4 设计方法概述 讨论

-5.2 EDA综合设计案例(1)— 数字钟的设计

--5.2.1 EDA综合设计案例1 导学

--5.2.2 EDA综合设计设计案例1— 数字钟的设计 教学视频

--5.2.3 EDA综合设计案例1 单元测验

--5.2.4 EDA综合设计案例1 讨论

-5.3 EDA综合设计案例(2)—16×16点阵控制器设计

--5.3.1 EDA综合设计案例2 导学

--5.3.2 EDA综合设计案例2—16×16点阵控制器设计 教学视频

--5.3.3 EDA综合设计案例2 单元测验

--5.3.4 EDA综合设计案例2 讨论

思政教育

-国产EDA技术如何突破?

4.8.2 运算操作符和属性 教学视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。