【发布时间】:2014-04-15 16:00:41
【问题描述】:
我在这段代码中遇到错误。该代码用于 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
【问题讨论】:
-
运行时数据比较错误;
outp1变为X。信号an的驱动程序太多。它由实例n1、n2和n4驱动。还有一个信号aN看起来是无意的。 -
修复了问题。开太多次了。你能解释一下为什么我不应该附加太多具有相同信号的驱动程序吗? @格雷格
-
一根电线只能有一个驱动器。当值不同时,它如何知道该怎么做?如果我说分配 a= 1'b1;分配 a=1'b0; a的值是多少?如果你想组合成信号,你必须使用一些逻辑或三态。
标签: verilog verification