包含加法器的 verilog 代码
verilog code containing adders
我编写了仅包含加法器的 verilog 代码。在这个 g,h 是 10 位,r5(主输出)是 11 位。当我将 r5 作为 11 位时,我没有得到正确的输出,但是当我将 r5 作为 10 位时,我得到了正确的输出。但是 (r5=g+h) 所以它的位应该比 g,h 的位多一位。
我将输入作为 clk = 1;
s189 = 10'd200;
s375 = 10'd75;
s050 = 10'd300;
s218 = 10'd54;
并且输出应该是 r5= -16 但它给出的输出是 (01111110000) 而不是 (11111110000)
module out(clk,s189,s375,s050,s218,r5,g,h);
input clk;
input [9:0] s189,s375,s050,s218;
output reg[10:0] r5;
output reg [9:0] g,h;
reg [3:0] countr=4'b0000;
always@(posedge clk)
begin
if (countr==4'b1000)
begin
g<= s218-s189;
h<= s375+s050;
r5<=g+h;
end
end
always@(posedge clk)
begin
if (countr==4'b1001)
countr<=4'b0000;
else
countr<= countr+1;
end
endmodule
您正在执行无符号算术,如前所述,MSB 是 0 而不是预期的 1(负)。您需要将使用的输入、输出和变量声明为带符号的,以进行自动符号扩展。
module out(
input clk,
input signed [9:0] s189,
input signed [9:0] s375,
input signed [9:0] s050,
input signed [9:0] s218,
output reg signed [10:0] r5,
output reg signed [9:0] g,
output reg signed [9:0] h
);
我编写了仅包含加法器的 verilog 代码。在这个 g,h 是 10 位,r5(主输出)是 11 位。当我将 r5 作为 11 位时,我没有得到正确的输出,但是当我将 r5 作为 10 位时,我得到了正确的输出。但是 (r5=g+h) 所以它的位应该比 g,h 的位多一位。 我将输入作为 clk = 1;
s189 = 10'd200;
s375 = 10'd75;
s050 = 10'd300;
s218 = 10'd54;
并且输出应该是 r5= -16 但它给出的输出是 (01111110000) 而不是 (11111110000)
module out(clk,s189,s375,s050,s218,r5,g,h);
input clk;
input [9:0] s189,s375,s050,s218;
output reg[10:0] r5;
output reg [9:0] g,h;
reg [3:0] countr=4'b0000;
always@(posedge clk)
begin
if (countr==4'b1000)
begin
g<= s218-s189;
h<= s375+s050;
r5<=g+h;
end
end
always@(posedge clk)
begin
if (countr==4'b1001)
countr<=4'b0000;
else
countr<= countr+1;
end
endmodule
您正在执行无符号算术,如前所述,MSB 是 0 而不是预期的 1(负)。您需要将使用的输入、输出和变量声明为带符号的,以进行自动符号扩展。
module out(
input clk,
input signed [9:0] s189,
input signed [9:0] s375,
input signed [9:0] s050,
input signed [9:0] s218,
output reg signed [10:0] r5,
output reg signed [9:0] g,
output reg signed [9:0] h
);