检查一段时间内输出信号的值
Checking the value of output signal over a period of time
我有一个 initial
块调用名为 power_task
的任务,如下所示
initial begin
#10;
power_task;
end
在 power 任务中,我有两个信号 power_a
和 power_b
。最初,power_a
变低,经过一定偏差后,power_b
变低。只要两个信号都很低,我就需要检查输出 q
。在 window 期间输出 q
应该为低电平,其中 power_a
和 power_b
信号为低电平。由于没有像时钟这样的其他信号,我不确定如何连续监控 q
。我写了类似下面的内容
task power_task;
#1;
power_a=0;
#5; //skew
power_b=0;
if (power_a==0 && power_b==0 && q==0) begin
$display("pass");
end
#50;
power_b=1;
#5;
power_a=1;
end
endtask
在上述任务中,if
语句仅在两个信号都为低电平之后而不是在整个 50 ns 时间内检查 q
的值 window。有人可以帮忙吗?
在任务之外使用一个always
块,一个控制信号(check_en
)和一个标志变量(pass
):
reg pass = 1;
reg check_en = 0;
always @(check_en, q) begin
if (check_en && q) begin
$display("fail");
pass = 0;
end
end
initial begin
#10;
power_task();
if (pass) $display("pass");
end
task power_task;
#1;
power_a=0;
#5; //skew
power_b=0;
check_en = 1;
#50;
check_en = 0;
power_b=1;
#5;
power_a=1;
endtask
always
块将持续监视 q
信号以了解启用后的任何变化。
您可以在 fork
块中使用 wait
语句
task power_task;
begin
reg fail;
fail = 0;
#1 power_a=0;
#5 power_b=0; //skew
fork : check_q
wait (q) fail = 1;
#50 begin
if (fail)
$display("fail");
else
$display("pass");
disable check_q;
end
join
power_b=1;
#5 power_a=1;
end
endtask
不确定为什么需要检查 power_a/b
是否仍然为 0,除非有一些其他代码可以更改它。
我有一个 initial
块调用名为 power_task
的任务,如下所示
initial begin
#10;
power_task;
end
在 power 任务中,我有两个信号 power_a
和 power_b
。最初,power_a
变低,经过一定偏差后,power_b
变低。只要两个信号都很低,我就需要检查输出 q
。在 window 期间输出 q
应该为低电平,其中 power_a
和 power_b
信号为低电平。由于没有像时钟这样的其他信号,我不确定如何连续监控 q
。我写了类似下面的内容
task power_task;
#1;
power_a=0;
#5; //skew
power_b=0;
if (power_a==0 && power_b==0 && q==0) begin
$display("pass");
end
#50;
power_b=1;
#5;
power_a=1;
end
endtask
在上述任务中,if
语句仅在两个信号都为低电平之后而不是在整个 50 ns 时间内检查 q
的值 window。有人可以帮忙吗?
在任务之外使用一个always
块,一个控制信号(check_en
)和一个标志变量(pass
):
reg pass = 1;
reg check_en = 0;
always @(check_en, q) begin
if (check_en && q) begin
$display("fail");
pass = 0;
end
end
initial begin
#10;
power_task();
if (pass) $display("pass");
end
task power_task;
#1;
power_a=0;
#5; //skew
power_b=0;
check_en = 1;
#50;
check_en = 0;
power_b=1;
#5;
power_a=1;
endtask
always
块将持续监视 q
信号以了解启用后的任何变化。
您可以在 fork
块中使用 wait
语句
task power_task;
begin
reg fail;
fail = 0;
#1 power_a=0;
#5 power_b=0; //skew
fork : check_q
wait (q) fail = 1;
#50 begin
if (fail)
$display("fail");
else
$display("pass");
disable check_q;
end
join
power_b=1;
#5 power_a=1;
end
endtask
不确定为什么需要检查 power_a/b
是否仍然为 0,除非有一些其他代码可以更改它。