Verilog學習筆記基本語法篇(八)········ 結構說明語句

Verilog中的任何過程都可以屬於以下四種結構的說明語句;

1) initial;  2) always;  3) task;   4) function;

1) initial說明語句;

一個程序中的 initial 和 always 的次數是不受限制的,他們都是在仿真的一開始同時開始運行的。initial 只執行一次,而 always語句則是不斷地重複活動,直到仿真活動結束、但是always 後面的過程快是否運行,則要看他的觸發條件是否滿足,滿足則運行一次,再滿足再運行,直至仿真結束。

 格式:

   initial 

     begin

      語句1;

      語句2;

         ...

      語句n;

   end

一個模塊中可以有多個initial塊,他們都是並行運行的。 initial 塊常用於測試文件和虛擬模塊的編寫,用來產生仿真測試信號和設置信號記錄等仿真環境。

 

2)always說明語句

其聲明格式如下:

always  <時序控制>  <語句>

如果always沒有時序控制,則會產生仿真器的死鎖。 如:always  areg=~areg;這將產生0延遲的無限循環跳變過程,這時發生仿真死鎖。

always 的時序控制可以是邊沿觸發也可以是電平觸發,可以單個信號亦可以十多個信號,中間用關鍵詞or鏈接。

 A)  always @(posedge clock or posedge reset)

       begin

        ....

       end

B)  always @(posedge clock or posedge reset)

       begin

        ....

       end

上述中,A是由兩個邊沿觸發的always只要其中一個沿出現,就立即執行一次過程塊。B是有a b c 三個信號電平觸發的,只要a b c 中任何一個發生變化,從高到低或從低到高都會執行過程塊。

邊沿觸發的always 塊常常描述時序行爲,如有限狀態機,通常對應於寄存器組和門級組合邏輯的結構。而電平觸發的always塊常常用來描述組合邏輯的行爲。

在always語句中,由關鍵詞or 鏈接的多個事件名或者信號名組成的列表稱爲敏感列表。用關鍵詞or或者','表示這種關係。如果輸入的邏輯變量較多,那麼編寫敏感列表會很繁瑣而且容易出錯。針對這種情況,Verilog中可以用@* 和 @(*),他們表示對後面語句塊中所有的輸入變量的變化是敏感的。

電平敏感的時序控制:

Verilog用關鍵字wait 來表示等待電平敏感的條件爲真:

如: always  

           wait  (count_enabal)  #20 count = count+1;

這個例子中,仿真器連續見識count_enable的值,其值爲0,則不執行後面語句。如果其值爲1,則20個單位後執行這個語句,如果count_enable始終爲1,那麼count每20個單位時間+1。

 在always中,被賦值的只能是寄存器類型的變量,如reg,integer, real, time, realtime.等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章