Verilog中的4位加减法器

时间:2018-09-02 05:05:13

标签: verilog hdl iverilog

我正在为4位加法器减法器编写Verilog代码。我正在使用结构设计。首先,我为1位全加器编写了verilog代码。然后,我用它来编写4位加法器减法器的代码。

module fadder (A, B, Cin, Sum, Cout);
    input A, B;
    input Cin;
    output Sum;
    output Cout;
    wire t1,t2,t3,t4;
  xor x1(t1,A,B);
  xor x2(Sum,t1,Cin);
  and g1(t2,A,B);
  and g2(t3,B,Cin);
  and g3(t4,Cin,A);
  or  g4(Cout,t2,t3,t4);  
endmodule


module add_sub_4 (A, B, In, Res, Out);
    input [3:0] A, B;
    input In;
    output [3:0] Res;
    output Out;
    wire t1,t2,t3,t4,t5,t6,t7;


          xor x3(t3,B[0],In);
          xor x4(t4,B[1],In);
          xor x5(t5,B[2],In);
          xor x6(t6,B[3],In);
          fadder f5(A[0],t3,In,Res[0],t1);
          fadder f6(A[1],t4,t1,Res[1],t2);
          fadder f7(A[2],t5,t2,Res[2],t3);
          fadder f8(A[3],t6,t3,Res[3],Out);  
endmodule

2 个答案:

答案 0 :(得分:0)

您实际上非常接近。您似乎不了解的是,在Verilog中,您的设计是在编译时而不是在运行时综合的。您无法有条件地实例化模块,因为在编译时我们不知道是否满足该条件。因此,在减法位较低的情况下,您的第一个陈述实际上没有任何意义。将rtl放在always块中也没有意义,因为rtl已在模块中定义。

但是,您的第二条语句包含该问题的大多数解决方案。当符号位为低时,加法器/减法器顶部的那些异或将保留输入位,并且设计将简化为仅加法器。尝试仅单独使用第二个块。

答案 1 :(得分:0)

在放入实例化模块中的值之前,请使用XOR门(当in = 1时)使用补充B。

in=0时,相同的B将被添加到A,而当in=1时,〜B将被添加到A。