Verilog 错误[USF XSim 62],[Vivado 12-4473],[VRFC 10-529],[VRFC 10-1146],[XSim 43-3322]

Verilog 错误[USF XSim 62],[Vivado 12-4473],[VRFC 10-529],[VRFC 10-1146],[XSim 43-3322],verilog,Verilog,这是我的设计代码 module lab2_4bit_adder( input [3:0] A, inout [3:0] B, input C0, input [3:0] B1, input Switch, inout [3:0] B2, output [3:0] S, output C4 ); wire C1; wire C2; wire C3; assig

这是我的设计代码

module lab2_4bit_adder(
    input [3:0] A,
    inout [3:0] B,                
    input C0,
    input [3:0] B1,
    input Switch,
    inout [3:0] B2,
    output [3:0] S,
    output C4
    );

    wire C1;
    wire C2;
    wire C3;

    assign B2 = ~B1 + 1'b1;
    assign B = (Switch == 0)? B1:B2;
    assign B = (Switch == 1)? B2:B1;
    assign B = Switch? B2:B1;

    lab2_1bit_adder fa0(A[0], B[0], C0, S[0], C1);
    lab2_1bit_adder fa1(A[1], B[1], C1, S[1], C2);
    lab2_1bit_adder fa2(A[2], B[2], C2, S[2], C3);
    lab2_1bit_adder fa3(A[3], B[3], C3, S[3], C4);
endmodule
这是我的模拟

module combine_simulation(

    );

    reg [3:0] A;
    reg [3:0] B1;
    reg C0;
    reg Switch;

    wire [3:0] S;
    wire C4;
    wire [3:0] B;
    wire [3:0] B2;

    lab2_4bit_adder dut(A,B1,C0,Switch,S,C4,B2,B);

    initial begin
        A=4'b0101; B1=4'b0011; C0=1'b0; Switch=0; #10;
        A=4'b0011; B1=4'b1001; C0=1'b0; Switch=0; #10;
        A=4'b0100; B1=4'b1010; C0=1'b1; Switch=0; #10;
        A=4'b0101; B1=4'b0011; C0=1'b0; Switch=1; #10;
        A=4'b0011; B1=4'b1001; C0=1'b0; Switch=1; #10;
        A=4'b0100; B1=4'b1010; C0=1'b1; Switch=1; #10;


    end
endmodule
模拟返回错误

[USF XSim 62]“详细说明”步骤失败,出现错误。有关详细信息,请检查Tcl控制台输出或“F:/lab2/lab2.sim/sim_1/behav/detaily.log”文件

[Vivado 12-4473]在运行模拟时检测到错误。请更正此问题,然后重试此操作

[VRFC 10-529]不允许同时分配到非网络B1[“F:/lab2/lab2.srcs/sim_1/new/combine_simulation.v”:37]

[VRFC 10-1146]非网络变量无法连接到输入端口B[“F:/lab2/lab2.srcs/sim_1/new/combine_simulation.v”:37]

[XSIM 43-3322]图书馆工作中顶层Verilog设计单元的静态精化失败


如何更正错误?

错误消息非常有用:“非网络变量无法连接到inout端口B”。无法将变量(即reg)连接到输入输出端口;到inout端口的连接必须是网络(目前最常见的网络类型是导线)

您的代码需要一些工作。4位加法器不需要双向端口(即输入输出)。当然,
A
B1
(操作数)和
C0
(进位)应该是输入,
S
(和)和
C4
(进位)应该是输出。为什么
B
B2
端口都是端口

这些线在干什么

assign B = (Switch == 0)? B1:B2;
assign B = (Switch == 1)? B2:B1;

您正在驾驶
B
3次。

谢谢您的帮助。我想做的两行是multiplexer@zzzzzzzz123
module
endmodule
之间的所有行同时执行。因此,您有一个短路,三块硬件全部驱动
B
。我想我知道你想做什么。假设我的假设是正确的,你只需要删除上面的两行,然后把
B
B2
连接起来。我已经照你说的做了。但是当我做模拟时,导线S和C4总是在波形中显示X。导线B和B2在波形中始终显示Z。4线没有显示正确的绿线。我怎样才能解决这个问题?@zzzz 123请将此作为一个新问题提问。请把它做成一个。