Verilog代码错误

Verilog代码错误,verilog,verification,Verilog,Verification,我在这段代码中遇到了错误。该代码用于4位比较器。错误是我在out1端口中获得了“未指定”输出 请帮忙 module bitCompare(num1,num2,out1,out2); parameter n = 3; output out1; output out2; input [n:0] num1; input [n:0] num2; wire [n:0] eq; wire x0,x1,x2,x3; wire a,b,c

我在这段代码中遇到了错误。该代码用于4位比较器。错误是我在
out1
端口中获得了“未指定”输出

请帮忙

module bitCompare(num1,num2,out1,out2);

    parameter n = 3;

    output out1;
    output out2;
    input  [n:0] num1;
    input  [n:0] num2;

    wire [n:0] eq;
    wire x0,x1,x2,x3;
    wire a,b,c,d;
    wire an;

    // Comparator in structural mode
    xnor xn1(x0,num1[0],num2[0]);
    xnor xn2(x1,num1[1],num2[1]);
    xnor xn3(x2,num1[2],num2[2]);
    xnor xn4(x3,num1[3],num2[3]);
    and  a1(out2,x0,x1,x2,x3);
    not  n1(an,num1[3]);
    and  a2(a,an,num2[3]);
    not  n2(an,num1[2]);
    and  a3(b,x3,an,num2[2]);
    not  n3(aN,num1[1]);
    and  a4(c,x3,x2,an,num2[1]);
    not  n4(an,num1[0]);
    and  a5(d,x3,x2,x1,an,num2[0]);
    or   o1(out1,a,b,c,d);
endmodule

module Testbench;

    reg [3:0] numb1, numb2;
    wire outp1;
    wire outp2;
    bitCompare c(numb1, numb2,outp1,outp2);

    initial
    begin
    //case 0
        numb1 <= 4'b0000;
        numb2 <= 4'b0001;  #20;  $display("isEqual= %b\t",outp2); $display("less= %b\n",outp1);
        numb1 <= 4'b1111;
        numb2 <= 4'b1111;  #10;  $display("isEqual= %b\t",outp2); $display("less= %b\n",outp1);
        numb1 <= 4'b1000;
        numb2 <= 4'b1010;  #10;  $display("isEqual= %b\t",outp2); $display("less= %b\n",outp1);
        numb1 <= 4'b0111;
        numb2 <= 4'b0111;  #10;  $display("isEqual= %b\t",outp2); $display("less= %b\n",outp1);
    //case2
    end
endmodule
模块位比较(num1、num2、out1、out2);
参数n=3;
输出out1;
输出输出2;
输入[n:0]num1;
输入[n:0]num2;
导线[n:0]eq;
导线x0、x1、x2、x3;
导线a、b、c、d;
接线;
//结构模式下的比较器
xnorxn1(x0,num1[0],num2[0]);
xnor xn2(x1,num1[1],num2[1]);
xnor xn3(x2,num1[2],num2[2]);
xnor xn4(x3,num1[3],num2[3]);
和a1(输出2,x0,x1,x2,x3);
不是n1(an,num1[3]);
a2(a,an,num2[3]);
不是n2(an,num1[2]);
a3(b,x3,an,num2[2]);
不是n3(aN,num1[1]);
和a4(c,x3,x2,an,num2[1]);
不是n4(an,num1[0]);
和a5(d,x3,x2,x1,an,num2[0]);
或o1(out1、a、b、c、d);
端模
模块测试台;
reg[3:0]numb1,numb2;
导线输出1;
导线输出2;
比特比较c(numb1,numb2,outp1,outp2);
最初的
开始
//案例0

numb1Verilog几乎并行地模拟了一切。当一个网络有多个驱动程序时,需要解析这些值。如果驱动程序都是相同的值,那么输出将有一个已知的值。如果驱动值不匹配,则输出为
X
。除非在阻塞语句中,否则没有最后一次分配获胜


Verilog允许在一个网络上有多个驱动程序,它不会就此向您发出警告。通过切换到SystemVerilog并在
always\u comb
always\u ff
always\u latch
块内赋值,可以确保单个驱动程序的安全。

这是一个运行时数据比较错误<代码>输出1
变为
X
。信号
一个
的驱动程序太多。它由实例
n1
n2
n4
驱动。还有一个信号
aN
,看起来是意外的。修复了该问题。开“安”的次数太多了。你能解释一下为什么我不应该让太多的司机使用相同的信号灯吗@GregA wire只能有一个驱动程序。当值不同时,它如何知道该做什么?如果我说分配a=1'b1;分配a=1'b0;a的价值是什么?如果你想组合信号,你必须使用一些逻辑或三态。