Verilog代码错误
我在这段代码中遇到了错误。该代码用于4位比较器。错误是我在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
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的价值是什么?如果你想组合信号,你必须使用一些逻辑或三态。