HDLBits (63) — 9至1多路复用器
本题链接:
https://hdlbits.01xz.net/wiki/Mux9to1v
创建一个位宽为16的9对1多路复用器。当 sel = 0时,选择 a。当 sel = 1时,选择 b,其它的以此类推。至于剩下的情况(sel=9到15),将所有输出位设置为“1”。
预期解决方案长度:大约15行。

题目
提示:
对于这么多选项,case 语句可能会很有用。

答案

输出波形


case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。
case 语句格式如下:
case 语句执行时,如果 condition1 为真,则执行 true_statement1 ; 如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。如果各个 condition 都不为真,则执行 default_statement 语句。
default 语句是可选的,且在一个 case 语句中不能有多个 default 语句。
条件选项可以有多个,不仅限于 condition1、condition2 等,而且这些条件选项不要求互斥。虽然这些条件选项是并发比较的,但执行效果是谁在前且条件为真谁被执行。
ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。
case 语句支持嵌套使用。
case 语句中的条件选项表单式不必都是常量,也可以是 x 值或 z 值。
当多个条件选项下需要执行相同的语句时,多个条件选项可以用逗号分开,放在同一个语句块的候选项中。
但是 case 语句中的 x 或 z 的比较逻辑是不可综合的,所以一般不建议在 case 语句中使用 x 或 z 作为比较值。
参考资料:
4.6 Verilog 多路分支语句 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-case.html