可程式設計邏輯/Verilog Always 和 Initial
此頁面將介紹 Verilog 關鍵字always 和initial
always 塊可以是同步或非同步結構。這些結構中的指令被稱為與給定條件同步發生,或者非同步發生(如果未指定條件)。
Initial 塊可以在可綜合或不可綜合的塊中使用。它們通常用在測試平臺中。Initial 塊會導致某些指令在模擬開始時執行,在任何其他指令操作之前。Initial 塊只操作一次。
可綜合的 initial 塊可用於設定 FPGA 中暫存器、RAM 和 ROM 的上電值。但是,initial 塊不能在 CPLD 或 ASIC 中綜合。
Always 塊描述了應該無限期重複的事情,或者應該在給定的同步條件下重複的事情。沒有條件的 always 塊是非同步的
always begin ... end
這塊程式碼將連續執行,無論電路的時鐘訊號如何。
硬體模組不能在 always 塊內例項化。模組中所有的 always 塊都被認為是並行的硬體塊。同樣,模組被認為是並行操作的獨立硬體塊。但是,函式可以在 always 塊內例項化。
一個線或暫存器不能被多個 always 塊寫入。但是,一個 wand 或 wor 可以被多個塊寫入。它分配值給
always @ 結構是同步條件結構。它採用以下形式
always @(<condition> <signal>)
其中 <condition> 可以是posedge、negedge 或省略。<signal> 引數是要同步的訊號(通常是時鐘訊號)。例如,如果我們希望在每個時鐘脈衝的正邊沿執行特定的程式碼塊,我們將編寫
always @(posedge clock)
如果我們不放入 posedge 或 negedge 限定符,always 塊將在每次變化(訊號的每個正邊沿和負邊沿)時觸發。例如
always @(clock)
將在時鐘訊號的正邊沿和負邊沿執行。
Always 塊可以被認為是電路結構,其中該電路的輸入由一個鎖存器控制。觸發 always 塊的事件被認為是鎖存器的時鐘輸入。只有當鎖存器的觸發輸入接收到正確的條件時,電路才會接收新的輸入。
關鍵字posedge 和negedge 是邊沿觸發條件,只與always 塊一起使用。