Verilog2001中bit slicing特性

1、问题来源

HDLBits题目:Mux256to1v
实现256-1且位宽为4的多路选择器
从下图可以发现,直接使用in[ sel4+3 : sel4 ]是不行的,会报错

2、两种解决方法

  • 利用bit slicing特性
    bit slicing特性的内容可以参考link1
module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );
    
    assign out = in[sel*4 +: 4];

endmodule

需要注意,+: 是固定的语法符号,中间不能使用空格将其分开,否则也会出错。
另外,符号左边可以是变量,但是符号的右边必须是一个常量

  • 依然使用选择位sel挑出需要的位,然后使用拼接的语法
module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );

    assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};
endmodule

参考链接:
link1
link2

posted @ 2024-04-26 08:35  zianY  阅读(23)  评论(0编辑  收藏  举报