Verilog disable 和break语句
如何中止任务或代码块的执行?
Verilog disable语句能够中止任务或代码块。 通常在以下场景中会使用disable语句:
1、在循环中执行“break”命令,跳过循环迭代,并退出循环
2、在任务完成之前终止任务
disable语句与语句块名称一起使用。 例如:
initial begin :block1
begin : block2
statement1 ;
//etc
disable block2 ;
statement5 ;
statement6 ;
end //of blcok2
statement7 ;
end // of block1
在上面的例子中,“block1”和“block2”是语句块名。如果遇到disable语句,则退出语句块2,即语句5和6不会被执行,从而去执行语句7。
使用disable语句的唯一限制是它只能在任务中使用,不能在函数中使用,因为它会使函数返回值无效。
SystemVerilog引入了break命令来退出循环。
如下所示:
module test_break ;
integer i ;
initial begin
i = 10 ;
while(i) begin
i-- ;
if(I == 5) begin
break ;
end else
$display(“I == %0d”,i) ;
end //while
end //initial
endmodule //test_break
如果在某些条件下需要跳过当前循环,SystemVerilog添加了一个命令continue,它将直接跳转到当前循环结束。 例如,在以下代码中,会跳过变量i为奇数的循环。
module test_continue ;
integer i ;
initial begin
i = 10 ;
while(i) begin
i-- ;
if(i %2) begin
//$display(“iodd = \t %0d” , i) ;
continue ;
end else
$display(“ieven = \t %0d” , i) ;
end //while
end //initial
endmodule //test continue
上述代码会输出:
ieven= 8
ieven= 6
ieven= 4
ieven= 2
ieven= 0