//來自微信公眾號 「數字晶元實驗室」
如何中止任務或代碼塊的執行?
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
推薦閱讀: