標(biāo)題: verilog中的initial語句 [打印本頁]

作者: geige    時間: 2015-7-26 02:08
標(biāo)題: verilog中的initial語句
  首先說說結(jié)構(gòu)化過程語句,在verilog中有兩種結(jié)構(gòu)化的過程語句:initial語句和always語句,他們是行為級建模的兩種基本語句。其他所有的行為語句只能出現(xiàn)在這兩種語句里



與C語言不通,verilog在本質(zhì)上是并發(fā)而非順序的。verilog中的各個執(zhí)行流程(進(jìn)程)并發(fā)執(zhí)行,而不是順序執(zhí)行的。每個initial語句和always語句代表一個獨立的執(zhí)行過程,每個執(zhí)行過程從仿真時間0開始執(zhí)行并且兩種語句不能嵌套使用。下面舉例解釋之:

initial語句

所有的initial語句內(nèi)的語句構(gòu)成了一個initial塊。initial塊從仿真0時刻開始執(zhí)行,在整個仿真過程中只執(zhí)行一次。如果一個模塊中包括了若干個initial塊,則這些initial塊從仿真0時刻開始并發(fā)執(zhí)行,且每個塊的執(zhí)行是各自獨立的。如果在塊內(nèi)包含了多條行為語句,那么需要將這些語句組成一組,一般式使用關(guān)鍵字begin和end將他們組合在一個塊語句;如果塊內(nèi)只有一條語句,則不必使用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時刻開始并行執(zhí)行。如果在某一條語句前面存在延遲#,那么這條initial語句的仿真將會停頓下來,在經(jīng)過指定的延遲時間之后再繼續(xù)執(zhí)行。因此上面的initial語句執(zhí)行順序為:

    時間              所執(zhí)行的語句  
    0                   m = 1'b0;  
    5                   a = 1'b1;  
    10                  x = 1'b0;  
    30                  b = 1'b0;  
    35                  y = 1'b1;  
    50                  $finish;  






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1