Logic 如何在verilog中实现4位加法器/减法器

Logic 如何在verilog中实现4位加法器/减法器,logic,verilog,system-verilog,Logic,Verilog,System Verilog,我正在尝试确定如何使用全加器将此代码转换为4位加法器/减法器。现在它正在做加法,但我不知道如何做减法部分 module Adder #(parameter N = 4)( output wire [N-1:0] sum, // sum output wire co, // carry input wire [N-1:0] x, input wire [N-1:0] y, input

我正在尝试确定如何使用全加器将此代码转换为4位加法器/减法器。现在它正在做加法,但我不知道如何做减法部分

module Adder #(parameter N = 4)(
         output wire [N-1:0] sum, // sum
         output wire         co,  // carry
         input  wire [N-1:0]  x,
         input  wire [N-1:0]  y,
         input  wire        is_sub;
         );

    wire [N:0] c;
    assign c[0] = 1'b0;
    assign co = c[N];
    genvar i;
    generate
    for (i = 0; i < N; i=i+1)
    begin : counter_gen_label
    FA FAInst (
        .s(sum[i]),
        .co(c[i+1]),
        .a(x[i]),
        .b(y[i]),
        .cin(c[i]),
        .is_sub(is_sub)
        );
    end
    endgenerate
endmodule

module FA(
      output reg  s,
      output reg  co,
      input  wire a,
          input  wire b,
          input  wire cin,
          input  wire is_sub
          );

    always @(*)
        begin   
            s = a ^ b ^ cin;
            co = (a & b) | (a & cin) | (b & cin);
        end

endmodule
模块加法器#(参数N=4)(
输出线[N-1:0]和,//和
输出线co,//进位
输入线[N-1:0]x,
输入线[N-1:0]y,
输入线为_-sub;
);
导线[N:0]c;
赋值c[0]=1'b0;
分配co=c[N];
genvar i;
生成
对于(i=0;i
在FA模块中如何进行减法运算?
谢谢

FA不需要使用
is\u sub
输入

替换
c[0]=1'b0
c[0]=is_sub
.b(y[i])
以及
.b(y[i]^is_sub)

这是从x-y=x+y'+1开始的,其中y'表示反向y