關於verilog中的always


always

always語句塊從仿真0時刻開始執行其中的行為語句;最后一條執行完成后,再開始執行其中的第一條語句,如此往復循環,直到整個仿真結束。因此,always語句塊常用於對數字電路中一組反復執行的活動進行建模。

always 和 always@(*) 的區別

  • 有@時,是每次執行語句時,必須滿足括號內的條件才能繼續執行語句,否則不執行。
  • always@(敏感事件列表) 用於描述時序邏輯;敏感事件(上升沿 posedge、下降沿 negedge);或電平。
  • verilog規定,always@()中的是指該always塊內的所有輸入信號的變化為敏感列表,也就是仿真時只有當always@(*)塊內的輸入信號產生變化,該塊內描述的信號才會產生變化。
  1. 若沒有@,則是一般在teastbench 中產生時鍾信號,指不會滿足特定的條件,執行完一次后立馬繼續執行下一次,一直重復執行。always #10 CLK=~CLK;
  2. 有@時,是每次執行語句時,必須滿足括號內的條件才能繼續執行語句,否則不執行。

3種模式

always@()語句的意思是always模塊中的任何一個輸入信號或電平發生變化時,該語句下方的模塊將被執行。
1、always語句有兩種觸發方式。第一種是電平觸發,例如always @(a or b or c),a、b、c均為變量,當其中一個發生變化時,下方的語句將被執行。
2、第二種是沿觸發,例如always @(posedge clk or negedge rstn),即當時鍾處在上升沿或下降沿時,語句被執行。
3、而對於always@(
),意思是以上兩種觸發方式都包含在內,任意一種發生變化都會觸發該語句。

補充initial

Verilog語言中的兩種過程:always過程和initial過程(執行一次)。

補充assign

assign 用於描述組合邏輯,所有的assign 和 always 塊都是並行發生。


免責聲明!

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



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