Verilog:如何扩展寄存器中的二进制文件?

Verilog: How to extend the binary in a register?

对寄存器中的二进制文件进行符号扩展和零扩展的代码格式是什么?

reg[0:0] a;        //a is 1-bit.
reg[31:0] b, c;    //b and c are 32-bits.
//some code...

a符号扩展成32位,加到b,结果放入c.

a零扩展成32位,与b相加,结果放入c.

符号扩展有很多种方法,我将使用需要最少代码的方法。我们将使用 Verilog replicationconcatenation 操作。

复制格式: {numberOfTimesToRepeat{value}}

即{20{a[0]}}

复制a寄存器中的第 0 位 20 次。

连接格式: {value1, value2}

即{a, b}

连接寄存器 a 和寄存器 b.

中的二进制文件

符号扩展:

{{31{a[0]}}, a}

复制a寄存器中的第0位31次,并连接到寄存器[=的二进制之前11=].

零扩展:

{{31{zero}}, a} //zero 是一个包含零位的 1 位寄存器。

将值零复制 31 次,并将其连接到寄存器 a.

的二进制之前

下面是系统verilog方式:

logic signed a;
logic [31:0] b, c;
...

b = a;

在上面的例子中 b 将成为 a 的符号扩展值。