0

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

IE

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.

4

2 回答 2

1

这是一个系统verilog方式:

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

b = a;

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

于 2017-06-27T01:34:08.237 回答
1

有很多方法可以进行符号扩展,我将使用需要最少代码量的方法。我们将使用 Verilog复制连接操作。

复制格式: {numberOfTimesToRepeat{value}}

即{20{a[0]}}

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

连接格式: {value1, value2}

即{a,b}

a 连接 register和 register 中的二进制文件b

要签名扩展:

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

将寄存器中的第 0 位复制 a 31 次,并将其连接到寄存器的二进制之前 a

零扩展:

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

将值零复制 31 次,并将其连接到 register 的二进制文件之前 a

于 2017-06-26T21:46:27.273 回答