对寄存器中的二进制文件进行符号扩展和零扩展的代码格式是什么?
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。