首先說說結構化過程語句,在verilog中有兩種結構化的過程語句:initial語句和always語句,他們是行為級建模的兩種基本語句。其他所有的行為語句只能出現在這兩種語句里
與C語言不通,verilog在本質上是并發而非順序的。verilog中的各個執行流程(進程)并發執行,而不是順序執行的。每個initial語句和always語句代表一個獨立的執行過程,每個執行過程從仿真時間0開始執行并且兩種語句不能嵌套使用。下面舉例解釋之:
initial語句
所有的initial語句內的語句構成了一個initial塊。initial塊從仿真0時刻開始執行,在整個仿真過程中只執行一次。如果一個模塊中包括了若干個initial塊,則這些initial塊從仿真0時刻開始并發執行,且每個塊的執行是各自獨立的。如果在塊內包含了多條行為語句,那么需要將這些語句組成一組,一般式使用關鍵字begin和end將他們組合在一個塊語句;如果塊內只有一條語句,則不必使用begin和end.下面給出了initial語句的例子:
module stimulus
reg x,y, a,b, m
initial
m = 1'b0;
initial
begin
#5 a = 1'b1;
#25 b = 1'b0;
end
initial
begin
#10 x = 1'b0;
#25 y = 1'b1;
end
initial
#50 $finish;
endmodule
在上面例子中,三條initial語句在仿真0時刻開始并行執行。如果在某一條語句前面存在延遲#,那么這條initial語句的仿真將會停頓下來,在經過指定的延遲時間之后再繼續執行。因此上面的initial語句執行順序為:
時間 所執行的語句
0 m = 1'b0;
5 a = 1'b1;
10 x = 1'b0;
30 b = 1'b0;
35 y = 1'b1;
50 $finish;
|