//來自微信公眾號 「數字晶元實驗室」

如何中止任務或代碼塊的執行?

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 = %0d」 , i) ;
continue ;
end else
$display(「ieven = %0d」 , i) ;
end //while
end //initial
endmodule //test continue

上述代碼會輸出:

ieven= 8
ieven= 6
ieven= 4
ieven= 2
ieven= 0

推薦閱讀:

相關文章