当前课程知识点:EDA技术与应用 > 第四章 VHDL语言概述 > 4.10 CASE语句 > 4.10.2 CASE语句 教学视频
同学们,大家好
这一讲,我们来学习另外一种顺序语句
CASE语句
我们已经知道
IF语句和WAIT语句
是按条件来控制后续操作的语句
CASE语句是另一种条件控制语句
设计者经常会遇到
根据某个表达式的取值
来决定进行某项操作的情况
CASE语句就能够很好的完成这个任务
CASE语句的语法结构如下
当执行CASE语句时
首先会计算多值表达式的值
然后根据WHEN条件句中
与之相同的选择值
来选择执行对应的顺序语句
也就是要看哪一条WHEN子句当中的选择值
和当前多值表达式的值相等
就会执行哪条语句里面的顺序语句
最后结束CASE语句
需要注意的是
各条件句中由等号和大于号
构成的“=>”符号不是操作符
它的含义相当于THEN
CASE语句在使用的时候应该注意以下几点
首先,CASE语句是一种顺序执行的语句
因此它必须放在进程、函数或过程内部使用
第二点,每一个WHEN条件句中的选择值
都必须在多值表达式的取值范围内
第三条,WHEN条件句中选择值
必须完全覆盖表达式的全部取值
因此
我们通常要在最后一条WHEN条件句中
用关键字OTHERS
来代表所有未列出的可能的情况
与之相配合的另一个常用的关键字是NULL
NULL表示没有操作发生
例如:WHEN OTHERS=>NULL
第四点,在CASE语句中
每一个选择值只能出现一次
不允许有相同选择值的条件句出现
最后一点
除了WHEN OTHERS条件句
必须放在最后一条语句以外
其它WHEN条件句的次序并不重要
它的执行过程更接近于并行的方式
下面我们通过
一个8段数码管显示译码器电路的设计
来体会一下CASE语句的应用
数码管是一种半导体显示器件
其基本单元是发光二极管
数码管按段数
可以分为7段数码管和8段数码管
它们的主要差别
在于8段数码管多了一个
用来显示小数点的发光二极管单元
按照各发光二极管的连接方式
数码管可以分为共阴和共阳两种类型
共阴数码管是指:
将所有发光二极管的阴极接在一起
形成公共阴极的这样一种数码管
在使用时
应将共阴数码管的公共阴极接到地端
当某一字段发光二极管的阳极为高电平时
该字段就会点亮
如果某一字段发光二极管的阳极为低电平
那么,这个字段就不亮
下面我们用CASE语句来设计一个
能够驱动一位共阴数码管
显示0到9的BCD码显示译码器
这个显示译码器有四位BCD码输入端
分别为A3、A2、A1和A0
输出端为:
a、b、c、d、e、f、g、dp共八个输出端
分别对应连接数码管的八个段码控制端
通过分析BCD码和共阴数码管显示的特点
可以得到该电路的真值表,如图所示
首先是库声明和程序包声明
然后是实体说明,定义实体名为seg8
端口A3、A2、A1和A0
是四个std_logic类型的输入端口
用于输入四位BCD码
端口a、b、c、d、e、f、g、dp
是八个std_logic类型的输出端口
结构体采用行为描述方式
进程process的敏感信号为
A3、A2、A1和A0
当输入信号状态发生变化时
进程就会启动
进程开始先定义了
两个std_logic_vector类型的变量
datain和temp
datain的宽度为3到0
用于存放四位BCD码输入
temp的宽度为7到0
用于存放译码器需要输出的段码
首先 用并值运算符
把A3、A2、A1、和A0
拼接成一个4位宽度的数组
赋值给变量代datain
进程主要由CASE语句构成
执行时先判断datain的值
根据当前电路输入的状态
来选择下面哪一条WHEN条件句被执行
各条WHEN条件子句
都是根据真值表中BCD码输入
与数码管相应字形段码之间的关系写出来的
当输入超出“0000”到“1001” 这个范围
也就是字形超出0到9这十个数字时
所有的八个段码输出全为高阻态‘Z’
此时数码管所有字段都熄灭
各条when子句执行后
所产生的段码临时存放在变量temp中
当CASE语句结束后
我们可以用对信号赋值的方式
把temp中的段码相应的位
输出到显示译码器的对应输出端
a、b、c、d、e、f、g和dp
此时必须要注意
对应的顺序和次序不要混淆!
这样就能使数码管
根据BCD码输入显示0-9这十个数字了
与IF语句相比
CASE语句的可读性比较好
并且没有像IF语句那样
逐项条件顺序比较的过程
其执行过程更类似并行方式
但是CASE语句还是属于顺序语句
因此只能在进程、函数或过程内部使用
在使用时
一定要注意
该语句的书写格式和一些注意事项
好,本讲到这里就结束了
同学们,再见
-1.1 EDA技术概述
--1.1.3 EDA技术概述 单元测验
-2.1 可编程逻辑器件(PLD)概述
--2.1.3 可编程逻辑器件概述 单元测验
-2.2 CPLD的结构和原理
--2.2.3 CPLD的结构和原理 单元测验
-2.3 FPGA的结构和原理
--2.3.3 FPGA的结构和原理 单元测验
-2.4 FPGA和CPLD的选用
--2.4.3 FPGA和CPLD的选用 单元测验
-2.5 FPGA与CPLD的编程和配置
--2.5.3 FPGA与CPLD的编程与配置 单元测验
-3.1 QuartusII概述
--3.1.3 Quartus Ⅱ概述 单元测验
-3.2 新建工程
--3.2.3 新建工程 单元测验
-3.3 设计输入
--3.3.3 设计输入 单元测验
-3.4 设计编译
--3.4.3 设计编译 单元测验
-3.5 仿真验证
--3.5.3 仿真验证 单元测验
-3.6 器件编程
--3.6.4 器件编程 单元测验
-3.7层次化设计
--3.7.3 层次化设计 单元测验
-3.8 宏功能模块的使用
--3.8.3 宏功能模块的使用 单元测验
-4.1 VHDL语言概述
--4.1.3 VHDL语言概述 单元测验
-4.2 VHDL代码的结构
--4.2.3 VHDL代码的结构 单元测验
-4.3 库和库声明
--4.3.3 库和库声明 单元测验
-4.4 实体说明
--4.4.3 实体说明 单元测验
-4.5 结构体
--4.5.3 结构体 单元测验
-4.6 VHDL预定义数据类型
--4.6.3 VHDL预定义数据类型 单元测验
-4.7 常量、变量和信号
--4.7.3 常量、变量和信号 单元测验
-4.8 运算操作符和属性
--4.8.3 运算操作符和属性 单元测验
-4.9 IF语句和WAIT语句
--4.9.3 IF语句和WAIT语句 单元测验
-4.10 CASE语句
--4.10.3 CASE语句 单元测验
-4.11 LOOP循环语句
--4.11.3 LOOP循环语句 单元测验
-4.12 进程
--4.12.3 进程 单元测验
-4.13 条件信号赋值语句
--4.13.3 条件信号赋值语句 单元测验
-4.14 选择信号赋值语句
--4.14.3 选择信号赋值语句 单元测验
-4.15 元件例化语句
--4.15.3 元件例化语句 单元测验
-4.16 VHDL模块化设计
--4.16.3 VHDL模块化设计 单元测验
-5.1 设计方法概述
--5.1.3 设计方法概述 单元测验
-5.2 EDA综合设计案例(1)— 数字钟的设计
--5.2.2 EDA综合设计设计案例1— 数字钟的设计 教学视频
--5.2.3 EDA综合设计案例1 单元测验
-5.3 EDA综合设计案例(2)—16×16点阵控制器设计
--5.3.2 EDA综合设计案例2—16×16点阵控制器设计 教学视频
--5.3.3 EDA综合设计案例2 单元测验