Verilog。在纹波加法器中将输出设置为输入

Verilog。在纹波加法器中将输出设置为输入,verilog,fpga,vivado,synthesis,Verilog,Fpga,Vivado,Synthesis,不久前我开始使用Verilog,我的ripple加法器中有一些条件语句。我有一个6位纹波加法器(可以工作),但我想添加一个额外的功能。 我有一个2位变量,叫做“changer”,它 if changer == 00, then display input1 if changer == 01, then display input2 else display the summation result. 这是我的 `timescale 1ns/10ps module SixBitRippleAd

不久前我开始使用Verilog,我的ripple加法器中有一些条件语句。我有一个6位纹波加法器(可以工作),但我想添加一个额外的功能。 我有一个2位变量,叫做“changer”,它

if changer == 00, then display input1
if changer == 01, then display input2
else display the summation result.
这是我的

`timescale 1ns/10ps

module SixBitRippleAdder(
    input [5:0] x, //Input 1
    input [5:0] y, //Input 2
    input sel, //Add or subtract switch
    input [1:0] changer, //Condition switch
    output overflow,
    output [5:0] sum
    );

    reg [5:0] w;
    wire [5:0] c_out; //Used for carries

    //6 bit adder by adding instantiating 6 1 bit adders
    FullAdder bit1(.a(x[0]), .b(y[0] ^ sel), .s(sum[0]), .cin(sel), .cout(c_out[0]));
    FullAdder bit2(.a(x[1]), .b(y[1] ^ sel), .s(sum[1]), .cin(c_out[0]), .cout(c_out[1]));
    FullAdder bit3(.a(x[2]), .b(y[2] ^ sel), .s(sum[2]), .cin(c_out[1]), .cout(c_out[2]));
    FullAdder bit4(.a(x[3]), .b(y[3] ^ sel), .s(sum[3]), .cin(c_out[2]), .cout(c_out[3]));
    FullAdder bit5(.a(x[4]), .b(y[4] ^ sel), .s(sum[4]), .cin(c_out[3]), .cout(c_out[4]));
    FullAdder bit6(.a(x[5]), .b(y[5] ^ sel), .s(sum[5]), .cin(c_out[4]), .cout(c_out[5]));

    assign overflow = c_out[5] ^ c_out[4];

    //Issue is with these conditions
    always @*
        begin
            if(changer == 2'b00)
                w = x;
            else if(changer == 2'b01)
                w = y;
            else
                w = sum;
        end

    assign sum = w;

endmodule
我正在尝试合成这个,但是我的always块有错误。错误是“多个驱动程序网络”


非常感谢

我想你只需要一个不同的变量,它是求和的结果:

wire [5:0] sumTmp;
然后

后来:

always @*
    begin
        if(changer == 2'b00)
            w = x;
        else if(changer == 2'b01)
            w = y;
        else
            w = sumTmp;
    end

assign sum = w;

您的全加器驱动
sum
分配sum=w。从全加器到选择器的中间信号需要不同的信号名称,或者输出.Cool需要不同的名称。这似乎奏效了。在我确定“w”应该是什么之后,有没有办法确定“sum”是什么?只是出于好奇。@E.Cheng
sum
将被分配
w
的值,因此它们将具有相同的值。您可以使用任何波形查看器或使用$display、$monitor、。。。检查值。
always @*
    begin
        if(changer == 2'b00)
            w = x;
        else if(changer == 2'b01)
            w = y;
        else
            w = sumTmp;
    end

assign sum = w;