FPGA有符号数输入signed的类型设置
FPGA有符号数输入signed的类型设置
src & tb :input signed的情况
module signed_verify (out_add,out_minus,out_mult,out_divide,out_compare,a,b);
output wire signed[15:0]out_add;
output wire signed[15:0]out_minus;
output wire signed[15:0]out_mult;
output wire signed[15:0]out_divide;
output wire signed[15:0]out_compare;
input signed [7:0] a;
input signed [7:0] b;
assign out_add = a+b;
assign out_minus = a-b;
assign out_mult = a*b;
assign out_divide = a/b;
assign out_compare =(a>b)?a:b;
endmodule
`timescale 1ns/1ps
module signed_tb;
reg [7:0] a=0;
reg [7:0] b=0;
wire[15:0] out_add,out_minus,out_mult,out_divide,out_compare;
signed_verify U0(
.out_add (out_add),
.out_minus (out_minus),
.out_mult (out_mult),
.out_divide (out_divide),
.out_compare (out_compare),
.a (a),
.b (b)
);
initial
begin
#20
a=30;b=5;
#20
a=-30;b=5;
#20
a=30;b=-5;
#20
a=-30;b=-5;
#20
a=8’b0001_1110;b=8’b0000_0101; //Complement code
#20
a=8’b1110_0010;b=8’b0000_0101;
#20
a=8’b0001_1110;b=8’b1111_1011;
#20
a=8’b1110_0010;b=8’b1111_1011;
#20
$stop;
end
endmodule
仿真结果:
在input写了signed,tb里面的输入要么用十进制有符号输入,要么用二进制补码输入,结果完全正确。
src & tb :input 不加 signed的情况
module signed_verify (out_add,out_minus,out_mult,out_divide,out_compare,a,b);
output wire signed[15:0]out_add;
output wire signed[15:0]out_minus;
output wire signed[15:0]out_mult;
output wire signed[15:0]out_divide;
output wire signed[15:0]out_compare;
input [7:0] a; //no signed
input [7:0] b; //no signed
wire signed[15:0] out_add,out_minus,out_mult,out_divide,out_compare;
assign out_add = a+b;
assign out_minus = a-b;
assign out_mult = a*b;
assign out_divide = a/b;
assign out_compare =(a>b)?a:b;
endmodule
`timescale 1ns/1ps
module signed_tb;
reg [7:0] a=0;
reg [7:0] b=0;
wire signed[15:0] out_add,out_minus,out_mult,out_divide,out_compare;
signed_verify U0(
.out_add (out_add),
.out_minus (out_minus),
.out_mult (out_mult),
.out_divide (out_divide),
.out_compare(out_compare),
.a (a),
.b (b)
);
initial
begin
#20
a=30;b=5;
#20
a=-30;b=5;
#20
a=30;b=-5;
#20
a=-30;b=-5;
#20
a=8’b0001_1110;b=8’b0000_0101; //Complement code
#20
a=8’b1110_0010;b=8’b0000_0101;
#20
a=8’b0001_1110;b=8’b1111_1011;
#20
a=8’b1110_0010;b=8’b1111_1011;
#20
$stop;
end
endmodule