HDLBits (65) — 2至1位宽为4的多路复用器
2022-03-05 15:10 作者:僚机Wingplane | 我要投稿
本题链接:
https://hdlbits.01xz.net/wiki/Mux256to1v
创建一个位宽为4的256到1个多路复用器。256 4位输入全部打包到一个1024位输入向量中。当 sel = 0时,选择 in[3:0],当 sel = 1时,选择 in[7:4],选择 in[3:0],当 sel = 2时,选择 in[11:8],以此类推。
预期解决方案长度:大约1-5行。

题目
提示:
对于这么多选项,case 语句可能会未必有用。
向量指针可以是可变的,只要给仿真器计算所选位的宽度是常量。它并不总是能够完美的完成这个操作。其中有一个报错... is not a constant" 意味着它无法证明选择宽度是常量。特别是,使用向量指针选择向量的位将非常有用。in[ sel*4+3 : sel*4 ]就行不通。
Bit slicing (“自Verilog-2001以来的向量指针选择”)有更紧凑的语法。

答案

Verilog 中提供了大约 9 种操作符,分别是算术、关系、等价、逻辑、按位、归约、移位、拼接、条件操作符。
大部分操作符与 C 语言中类似。同类型操作符之间,除条件操作符从右往左关联,其余操作符都是自左向右关联。圆括号内表达式优先执行。例如下面每组的 2 种写法都是等价的。
拼接操作符用大括号 {,} 来表示,用于将多个操作数(向量)拼接成新的操作数(向量),信号间用逗号隔开。
拼接符操作数必须指定位宽,常数的话也需要指定位宽。
参考内容:
2.4 Verilog 表达式 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-expression.html