過程賦值

過程賦值

Verilog HDL 中提供兩種過程賦值語句initial 和always 語句,用這兩種語句來實現行為的建模。這兩種語句之間的執行是並行的,若與語句塊(begin ....end)相結合,則語句塊中的執行是按順序執行的。

基本介紹

  • 中文名:過程賦值
  • 外文名:procedural assignments
  • 賦值語句:initial和always語句
  • 執行方法:並行執行
  • 特點:語句的執行與位置順序無關
  • 套用學科:機械工程、儀器科學、計算機科學
簡介,initial語句,always語句,方波,D觸發器,2選一分配器,特點,行為建模,與連續賦值區別,

簡介

Verilog HDL中提供兩種過程賦值語句initial和always語句,用這兩種語句來實現行為的建模。這兩種語句之間的執行是並行的,即語句的執行與位置順序無關。這兩種語句通常與語句塊(begin ....end)相結合,則語句塊中的執行是按順序執行的。

initial語句

initial語句只執行一次,即在設計被開始模擬執行時開始(0時刻)。通常只用在對設計進行仿真的測試檔案中,用於對一些信號進行初始化和產生特定的信號波形。
語法如下:
initial
[timing_control] procedural_statement
procedural_statement是下列語句之一:
procedural_assignment (blocking or non-blocking ) / /阻塞或非阻塞性過程賦值語句/ /
procedural_continuous_assignment
conditional_statement
case_statement
loop_statement
wait_statement
disable_statement
event_trigger
task_enable (user or system)
事例如上產生一個信號波形:
initial
begin
#2 Stream = 1;
#5 Stream = 0;
#3 Stream = 1;
#4 Stream = 0;
#2 Stream = 1;
#5 Stream = 0;
end

always語句

always語句與initial語句相反,是被重複執行,執行機制是通過對一個稱為敏感變數表的事件驅動來實現的。always語句可實現組合邏輯或時序邏輯的建模。

方波

initial
Clk = 0;
always
#5 Clk = ~Clk;
因為always語句是重複執行的,因此,Clk是初始值為0的,周期為10的方波。

D觸發器

always @ ( posedge Clk or posedge Rst )
begin
if Rst
Q <= ‘ b 0;
else
Q <= D;
上面括弧內的內容稱為敏感變數,即整個always語句當敏感變數有變化時被執行,否則不執行。因此,當Rst為1時,Q被復位,在時鐘上升沿時,D被採樣到Q。有@的用來描述一個時序器件。

2選一分配器

always @( sel,a,b)
C = sel ? a:b;
這裡的sel,a,b同樣稱為敏感變數,當三者之一有變化時,always被執行,當sel為1,C被賦值為a,否則為b。描述的是一個組合邏輯mux器件。

特點

  1. 對組合邏輯的always語句,敏感變數必須寫全,敏感變數是指等式右邊出現的所有標識符。如上的a,b和條件表達式中出現的所以標識符如上例3的sel。
  2. 對組合邏輯器件的賦值採用阻塞賦值“=”
  3. 時序邏輯器件的賦值語句採用非阻塞賦值“<=”,如上的Q〈= D;
  4. 語法上,沒有關鍵字“assign”;
  5. 左側被賦值的數據類型必須是暫存器類型的變數(reg);
  6. 過程性連續賦值語句只能出現在過程塊中;
  7. 過程性連續賦值語句主要用來對時序邏輯電路進行行為描述;
  8. 在過程賦值語句的情況下,只有在過程賦值語句被執行時才執行賦值操作,語句執行完後被賦值變數的取值不再受到賦值表達式的影響;

行為建模

Verilog模型可以是實際電路不同級別的抽象,因此有多種不同的建模方法。其中最常用的建模方法有以下三種:
1)門級結構建模
2)行為描述建模
3)數據流建模
行為建模方式是通過對設計的行為的描述來實現對設計建模,一般是指用過程賦值語句(initial語句和always語句)來設計的稱為行為建模。
行為建模主要用initial和always語句,這些語句相互並行執行,,都在0時刻開始執行,與語句出現的順序無關,是通過對設計的行為的描述來實現對設計建模,一般是指用過程賦值語句(initial語句和always語句)來設計的稱為行為建模。

與連續賦值區別


過程賦值
連續賦值
assign
無assign(過程性連續賦值除外)
有assign
符號
使用“=”或“《=”
只使用“=”
位置
在always語句或initial語句中均可出現
不可出現於always語句和initial語句
執行條件
與周圍其他語句有關
等號右端運算元的值發生變化時
用途
驅動暫存器
驅動線網
●連續賦值用於數據流行為建模,多用於組合邏輯電路,過程賦值用於順序行為建模,用於順序行為建模。
●連續賦值等號右邊運算元發生變化就需要執行(上電便一直執行),而過程性賦值語句只是執行一次,注意我這裡的一次是指:在initial塊中,過程性賦值只順序執行一次,而在always塊中,每一次滿足always的條件時,都要順序執行一次該 always塊中的語句。連續賦值適用於線網,過程賦值適用於暫存器。

相關詞條

熱門詞條

聯絡我們