繁体   English   中英

4位verilog加法器不通过进位

[英]4-Bit verilog adder not passing carry bit

我让我的2位加法器工作,除了某些原因它没有通过进位。 例如,如果我使用A = 1且B = 1,则结果S = 00,但如果A或B为1,则得到S = 1?我尝试打印出值,看来第二个模块中的c1线是不是'被设置,由于某种原因Cout是。

所以输入A = 1,B = 1,S = 00,Cout = 1。 S = 10且Cout = 0

我只使用Verilog一天,所以语法对我来说很新。

module fulladder(Cin,A,B,S,Cout); // dont forget semi colon
    input A,B, Cin; // defaults to 1 bit or [0,0] size
    output S, Cout;
    wire XOR1,AND1,AND2;

    xor(XOR1,A,B);
    and(AND1,A,B);
    xor(S,Cin,XOR1);
    and(AND2,Cin,XOR1);
    or(Cout,AND2,AND1);

endmodule

module adder4(Cin,A,B,S,Cout);
input Cin;
input [0:1]A;
input [0:1]B;
output [0:1]S;
output Cout;
wire c1;

fulladder FA1(Cin,A[0:0],B[0:0],S[0:0],c1);
fulladder FA2(c1,A[1:1],B[1:1],S[1:1],Cout);
endmodule


module t_adder;

reg Cin;
reg [1:0]A;
reg [1:0]B;// to declare size, must be on own line, wires can be more than 1 bit
wire [1:0]S;
wire Cout;
adder4 add4bit(Cin,A,B,S,Cout);

initial 
begin
    A = 1; B = 1; Cin = 0;
    #1$display("S=%b Cout = %b",S,Cout);
end

endmodule

您通过将输入声明为[0:1]来反转adder4模块中的位顺序,其他位置为[1:0]

由于您反转了这些位,因此对于adder4,它看起来像是在添加A = 2'b10,B = 2'b10,这给出了您看到的输出(3'b100)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM