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 replication 和 concatenation 操作。
复制格式: {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
的符号扩展值。
对寄存器中的二进制文件进行符号扩展和零扩展的代码格式是什么?
即
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 replication 和 concatenation 操作。
复制格式: {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
的符号扩展值。