Verilog JK触发器验证结果不正确
我设计了一个JK触发器。现在我想自动化验证。为此,我将输入输出组合记录在一个数组中,并使用Verilog JK触发器验证结果不正确,verilog,fpga,Verilog,Fpga,我设计了一个JK触发器。现在我想自动化验证。为此,我将输入输出组合记录在一个数组中,并使用For循环对其进行验证。但是,我的一些验证给出了不正确的结果 我已经完成了设计的手动验证,并且得到了所需的结果 这是我的设计 module jkff(clk,j,k,q); input clk,j,k; output q; reg q; always @ (posedge clk) case ({j,k})
For
循环对其进行验证。但是,我的一些验证给出了不正确的结果
我已经完成了设计的手动验证,并且得到了所需的结果
这是我的设计
module jkff(clk,j,k,q);
input clk,j,k;
output q;
reg q;
always @ (posedge clk)
case ({j,k})
2'b00 : q <= q;
2'b01 : q <= 0;
2'b10 : q <= 1;
2'b11 : q <= ~q;
endcase
endmodule
我无法找到验证设计的自动化问题。有两个问题
与未知值(x
)进行比较时,必须使用大小写相等运算符(==
)
您还在错误的时间对输出数据进行采样。解决这一问题的一种方法是在时钟的另一端采样,以了解输出的驱动方式
请参阅//
注释,查看我更改了哪些行:
task operation_flow;
begin
for(i =1;i<=8;i= i+1)
begin
j<=j_array[i];
k<=k_array[i];
@(negedge clk); ////
if(q === q_array[i]) begin ////
$display($time, " Correct!..");
$display("q_array[%d] = %d",i,q_array[i]);
$display("j = %d k= %d q =%d",j,k,q);
end
else begin
$display($time, " Wrong!...");
$display("q_array[%d] = %d",i,q_array[i]);
$display("j = %d k= %d q =%d",j,k,q);
end
@(posedge clk); ////
end
$display("Verification Finished!..");
end
endtask
任务操作流程;
开始
对于(i=1;i
VCD info: dumpfile jk_ff.vcd opened for output.
Wrong!...
q_array[ 1] = x
j = 0 k= 0 q =x
Wrong!...
q_array[ 2] = x
j = 0 k= 1 q =0
Correct!..
q_array[ 3] = 0
j = 0 k= 1 q =0
Wrong!...
q_array[ 4] = 0
j = 1 k= 0 q =1
Correct!..
q_array[ 5] = 1
j = 1 k= 0 q =1
Wrong!...
q_array[ 6] = 1
j = 1 k= 1 q =0
Wrong!...
q_array[ 7] = 0
j = 1 k= 1 q =1
Wrong!...
q_array[ 8] = 1
j = 1 k= 1 q =0
Verification Finished!..
-------------- THE SIMUALTION END ------------
task operation_flow;
begin
for(i =1;i<=8;i= i+1)
begin
j<=j_array[i];
k<=k_array[i];
@(negedge clk); ////
if(q === q_array[i]) begin ////
$display($time, " Correct!..");
$display("q_array[%d] = %d",i,q_array[i]);
$display("j = %d k= %d q =%d",j,k,q);
end
else begin
$display($time, " Wrong!...");
$display("q_array[%d] = %d",i,q_array[i]);
$display("j = %d k= %d q =%d",j,k,q);
end
@(posedge clk); ////
end
$display("Verification Finished!..");
end
endtask