我在这段代码中收到错误。该代码用于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
答案 0 :(得分:1)
Verilog几乎可以并行模拟所有内容。当网络有多个驱动程序时,需要解析值的值。如果驱动程序的值相同,则输出将具有已知值。如果驾驶值不匹配,则输出为X
。除了阻止语句之外,没有最后的分配获胜。
Verilog允许网络上的多个驱动程序,它不会警告你。确保单个驱动程序可以通过切换到SystemVerilog并在always_comb
,always_ff
和always_latch
块中分配值来完成。