本题链接:
https://hdlbits.01xz.net/wiki/Always_case
Verilog中的case语句几乎等同于多个if-elseif-else,它将一个表达式与其他表达式的列表进行比较。它的语法和功能于C中的switch语句 不 同 。
-
case语句以case开头,每个“case项”以冒号结尾而不是“ switch ”。
-
每个case项只能执行一条语句,这使得C中使用的“ break ”变得不必要。但这意味着,如果在一个case项中执行多个语句,则必须使用 begin ... end
-
允许重复(部分重叠)case项,此时使用第一个匹配的。然而C不允许重复的case项。
题目
如果有大量的cases,case语句比if语句更方便。在本练习中你需要创建一个当sel在0和5之间时选择相应的数据输入的6:1多路复用器。如果sel不在0和5之间则输出0。数据输入和输出均为4位宽。注意可能会导致的锁存(请参阅
always_if2
)
答案
答案
输出波形
输出波形
case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。
case 语句格式如下:
case 语句执行时,如果 condition1 为真,则执行 true_statement1 ; 如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。如果各个 condition 都不为真,则执行 default_statement 语句。
default 语句是可选的,且在一个 case 语句中不能有多个 default 语句。
条件选项可以有多个,不仅限于 condition1、condition2 等,而且这些条件选项不要求互斥。虽然这些条件选项是并发比较的,但执行效果是谁在前且条件为真谁被执行。
ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。case 语句支持嵌套使用。
参考资料:
4.6 Verilog 条件语句 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-case.html