对寄存器中的二进制文件进行符号扩展和零扩展的代码格式是什么?
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
.
这是一个系统verilog方式:
logic signed a;
logic [31:0] b, c;
...
b = a;
在上面的例子b
中将成为一个符号扩展值a
。
有很多方法可以进行符号扩展,我将使用需要最少代码量的方法。我们将使用 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
。