如果想要位边界是变量 以实现动态截取呢, 如果我们这样写 vt[cnt+4:cnt](cnt是变量), 是编译通不过的.
精确的语法该当这样写:
vt[base+:width] or vt[base-:width]
个中, base可以是变量, width必须是常量.
也即是说, 起始位可以是变量, 位宽必须是常量.
这样上面想当然的缺点写法, 可以写为vt[cnt+:4].
if cnt=5, vt[cnt+:4] 即是 vt[8:5]; vt[cnt-:4] 即是 vt[5:2].
不知为何, 这个用法该当是挺常用的, 但在很多verilog教材中都没有提及, 但在verilog标准中是有的哦.
2. 大括号{}的复制功能大括号{}的拼接功能, 大家都知道了, 比如下面这种
{a, b[3:0], c, 3'b100}
就不多说了.
{{}}表示复制, 这个用法就不常用了, 但有些场景用起来还是挺方便的.
比如: {4{a}}等同于{a,a,a,a}, {12{1'b1}}等同于12'b1111_1111_1111
当然, 拼接 和 复制 也可以组合起来利用, 比如:
{a, {3{a,b}}}