|
首先說(shuō)說(shuō)結(jié)構(gòu)化過(guò)程語(yǔ)句,在verilog中有兩種結(jié)構(gòu)化的過(guò)程語(yǔ)句:initial語(yǔ)句和always語(yǔ)句,他們是行為級(jí)建模的兩種基本語(yǔ)句。其他所有的行為語(yǔ)句只能出現(xiàn)在這兩種語(yǔ)句里
與C語(yǔ)言不通,verilog在本質(zhì)上是并發(fā)而非順序的。verilog中的各個(gè)執(zhí)行流程(進(jìn)程)并發(fā)執(zhí)行,而不是順序執(zhí)行的。每個(gè)initial語(yǔ)句和always語(yǔ)句代表一個(gè)獨(dú)立的執(zhí)行過(guò)程,每個(gè)執(zhí)行過(guò)程從仿真時(shí)間0開始執(zhí)行并且兩種語(yǔ)句不能嵌套使用。下面舉例解釋之:
initial語(yǔ)句
所有的initial語(yǔ)句內(nèi)的語(yǔ)句構(gòu)成了一個(gè)initial塊。initial塊從仿真0時(shí)刻開始執(zhí)行,在整個(gè)仿真過(guò)程中只執(zhí)行一次。如果一個(gè)模塊中包括了若干個(gè)initial塊,則這些initial塊從仿真0時(shí)刻開始并發(fā)執(zhí)行,且每個(gè)塊的執(zhí)行是各自獨(dú)立的。如果在塊內(nèi)包含了多條行為語(yǔ)句,那么需要將這些語(yǔ)句組成一組,一般式使用關(guān)鍵字begin和end將他們組合在一個(gè)塊語(yǔ)句;如果塊內(nèi)只有一條語(yǔ)句,則不必使用begin和end.下面給出了initial語(yǔ)句的例子:
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語(yǔ)句在仿真0時(shí)刻開始并行執(zhí)行。如果在某一條語(yǔ)句前面存在延遲#,那么這條initial語(yǔ)句的仿真將會(huì)停頓下來(lái),在經(jīng)過(guò)指定的延遲時(shí)間之后再繼續(xù)執(zhí)行。因此上面的initial語(yǔ)句執(zhí)行順序?yàn)椋?br />
時(shí)間 所執(zhí)行的語(yǔ)句
0 m = 1'b0;
5 a = 1'b1;
10 x = 1'b0;
30 b = 1'b0;
35 y = 1'b1;
50 $finish;
|
|