这个 verilog 分配函数有什么作用?

What does this verilog assign function do?

如果sig_in = 0000, 0001, 0010, ... ,1111

sig_out = {sig_in[3], sig_in[3], sig_in[3: 2]};

如果我没看错,sig_out[3] 将是 sig_in[3],sig_out[2] 也将是 sig_in[3 ],我不确定 sig_in[3: 2] 的作用。有人可以帮忙吗?

在赋值的右侧有一个 concatination 运算符 {...}; 它将来自其参数的位连接成单个位流。

所以,如果 sign_in[3:0] 是 0101,您的示例中的结果将是:

sign_in[3:0] = 4'b0101
        bit 3 ----^
        bit 0 -------^

{
   1'b0, // sign_in[3]
   1'b0, // sigh_in[3]
   2'b01 // sign_in[3:2] -- extracts 2 bits - bit 3 (0) an d bit 2 (1)
}

因此,sign_out[3:0] 将如下所示

==>          4'b0001;
sign_in[3]    --^
sign_in[3]    ---^
sign_in[3:2]  ----^^