在 SystemVerilog 中将窄位向量分配给较宽的位向量时,如下所示
logic [3:0] narrow;
logic [7:0] wide;
assign wide = narrow;
它将零扩展
narrow
。有没有一种好的方法可以对其进行一次扩展。我的意思不是符号扩展,我不想明确地输入大小。我在想这样的事情:
assign wide = { '1, narrow };
但是它不起作用,因为不允许在串联中使用未指定大小的值。有没有好的解决办法呢?
您可以使用
$bits
来计算大小并使用复制串联运算符:
assign wide = { {($bits(wide) - $bits(narrow)){1'b1}}, narrow };
如果您在信号声明中使用了参数,那么您可以使用参数而不是
$bits
来完成计算。