FPGA中有符号数和无符号数的加法运算

FPGA中有符号数和无符号数的加法运算

首先定义一个B比特的二进制数:

verilog HDL表示正数就按一般的规则即可,这里主要讲如何表示负数?

无符号数

将(1)转换成十进制为:

有符号数

有符号数则指所有二进制数均是补码形式的整数。

首先声明端口时增加signed关键字即可。对于B比特的二进制数据,装换成十进制数为:

//verilog HDL
module top(
input signed [3:0] a,
input signed [3:0] b,
output signed [3:0] sum,
output carry
);
assign {carry,sum} = a + b;
endmodule

//simulate verilog
`timescale 1 ns /1 ps
module top_tb;
reg [3:0] a;
reg [3:0] b;
wire [3:0] sum;
wire carry;
initial begin
a = 4'b0000;
b = 4'b0000;
#100;
a = 4'b0001;
b = 4'b0001;
#100;
a = 4'b0010;
b = 4'b0010;
#100;
a = 4'b0011;
b = 4'b0011;
#100;
a = 4'b0100;
b = 4'b0100;
#100;
a = 4'b0101;
b = 4'b0101;
#100;
a = 4'b0110;
b = 4'b0110;
#100;
a = 4'b0111;
b = 4'b0111;
#100;
a = 4'b1000;
b = 4'b1000;
#100;
a = 4'b1001;
b = 4'b1001;
#100;
a = 4'b1010;
b = 4'b1010;
#100;
a = 4'b1011;
b = 4'b1011;
#100;
a = 4'b1100;
b = 4'b1100;
#100;
a = 4'b1101;
b = 4'b1101;
#100;
a = 4'b1110;
b = 4'b1110;
#100;
a = 4'b1111;
b = 4'b1111;
#100;
end
top U1(
.a(a),
.b(b),
.sum(sum),
.carry(carry)
);
endmodule

仿真波形:

有图可知:

后八种情况是溢出至进位。

对于B比特的二进制,有符号整数的范围:

-2^(B-1)~2^(B-1)-1

文章转载自:tutu_1583

最新文章

最新文章