disable语句提供了终止并发活动进程的能力,同时保持了Verilog过程描述的结构化本质。disable语句在处理意外情况时很有用,例如硬件中断或全局复位。
disable语句可以有如下用途。
disable语句能够终止task或命名块的活动,说明如下:
如果task被disable,那么下面的结果没有定义。
disable语句可以用在包含disable语句的命名块,或者用在包含disable语句的task。disable语句可以用于function中的命名块,但是不能用于function。
例子:包含disable语句的命名块。
begin : block_name rega = regb; disable block_name; regc = rega; // this assignment will never execute end
例子:disable语句当做goto使用,命名块后面的语句继续执行。
begin : block_name ........ if (a == 0) disable block_name; ........ end // end of named block // continue with code following named block ........
例子:disable语句当做early-return使用。
注意:它不像C语言中的return,因为output和inout参数是不定的。
task proc_a; begin ........ if (a == 0) disable proc_a; // return if true ........ end endtask
例子:disable语句当做return使用。
注意:这里它才像C语言中的return,因为output和inout参数会正确地返回。
task proc_a; begin: block_proc_a ........ if (a == 0) disable block_proc_a; // return if true ........ end endtask
例子:disable语句当做循环中的break和continue(C语言)使用。
begin: break_block for (i = 0; i < n; i = i+1) begin: continue_block @clk if (a == 0) // "continue" loop disable continue_block; ........ @clk if (a == b) // "break" from loop disable break_block; ........ end end