Verilog-always語句


always語句總是循環執行,或者說此語句重復執行。
      只有寄存器類型數據能夠在這種語句中被賦值。寄存器類型數據在被賦新值前保持原有值不變。所有的初始化語句和always語句在0時刻並發執行。
      

      下例為always語句對1位全加器電路建模的示例,如圖2-4。
 

  1. module FA_Seq(A,B,Cin,Sum,Cout);
  2. input A,B,Cin;
  3. output Sum,Cout;
  4. reg Sum,Cout;
  5. reg T1,T2,T3;
  6. always @(A or B or Cin) begin
  7.     Sum = (A^B)^Cin;
  8.     T1 = A & Cin;
  9.     T2 = B & Cin;
  10.     T3 = A & B;
  11.     Cout=(T1 | T2) | T3;
  12. end
  13. endmodule

      模塊FA_Seq有三個輸入和兩個輸出。由於Sum、Cout、T1、T2和T3在always語句中被賦值,它們被說明為reg類型(reg是寄存器數據類型的一種)。
      always語句中有一個與事件控制(緊跟在字符@后面的表達式)。相關聯的順序過程(begin-end對)。這意味着只要A、B或Cin上發生事件,即A、B或Cin之一的值發生變化,順序過程就執行。在順序過程中的語句順序執行,並且在順序過程執行結束后被掛起。順序過程執行完成后,always語句再次等待A、B或Cin上發生的事件。
      在順序過程中出現的語句是過程賦值模塊化的實例。模塊化過程賦值在下一條語句執行前完成執行。過程賦值可以有一個可選的時延。

      時延可以細分為兩種類型:
      1)語句間時延:這是時延語句執行的時延。
    2)語句內時延:這是右邊表達式數值計算與左邊表達式賦值間的時延。
      下面是語句間時延的示例:

  1. Sum=(A^B)^Cin;  
  2. #4T1=A&Cin; 

      在第二條語句中的時延規定賦值延遲4個時間單位執行。就是說,在第一條語句執行后等待4個時間單位,然后執行第二條語句。下面是語句內時延的示例。

  1. Sum=#3(A^B)^Cin; 

      這個賦值中的時延意味着首先計算右邊表達式的值,等待3個時間單位,然后賦值給Sum。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM