Altifigence Academy

14 / 37 · 概念

正反器、enable 與控制優先權

以下一狀態式定義保持、載入與重設,避免非預期的時脈閘控。

暫存器儲存下一狀態函數的結果

以 QkQ_k 表示時脈邊緣前的值,DkD_k 表示該邊緣採用的輸入,Qk+1Q_{k+1} 表示更新後的值。reset 優先、其次 enable 的暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容如下。

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

enable=0 時,即使輸入 D 改變,儲存值仍保持。RTL 中省略這條保持路徑,與組合電路漏寫指定不同;循序區塊的保持行為是暫存器規格的一部分。

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

此電路為同步高有效 reset。reset 與 enable 在同一邊緣都為 1 時,儲存 0。交換順序就會改變功能,因此優先權不能只寫在註解,也要體現在程式與測試中。

每欄是一次上升緣上升緣是時脈由 0 變成 1 的瞬間。它與表示整段 CLK=1 期間的高準位不同。 詳細內容的觀察紀錄。輸入為邊緣前的值,名稱帶「後」的狀態為更新後的值。欄位對齊表示取樣順序,並未繪出實體傳播延遲傳播延遲是輸入改變後,輸出穩定至正確值所需的時間。邏輯式是否等價與時間特性是兩個不同問題。 詳細內容。初始 Q=0xA5,第一欄保持、第二欄寫入、第三欄為 reset 與 enable 衝突。

reset、enable、保持的優先順序
查看波形資料
波形資料:每個字元表示一個區間;句點保持先前狀態;p 表示一個時脈週期。
訊號波形匯流排值
邊緣2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q 後234.A5 → 3C → 00

Enable 不是直接截斷時脈的訊號

任意使用 gated_clk = clk & en 這類組合式作為時脈,en 的變動可能產生短脈衝或非預期邊緣。clock enable RTL 映射成哪種元件,由合成與實作流程負責。節能用的 clock gating 必須採用適當元件並驗證時序,另行設計。

控制優先權會在 reset、load、enable 重疊時顯現,僅逐一開啟單一控制並不足夠。例如 q=A5、en=0、d=3C 時應保持;下一邊緣 en=1 時,才應儲存 3C。

自己試試看

q=0xA5 時經過 rst=1、en=1、d=0x3C 的邊緣,下一個邊緣則為 rst=0、en=0。這兩個邊緣之後 q 分別是多少?

查看解說

第一個邊緣 reset 優先,因此為 0;下一個邊緣 enable=0,仍保持 0。若把 reset 寫在 en 條件內,可能漏掉 en=0 時的重設,因此也須另外檢查這個組合。

此選擇適用於本瀏覽器,隨時可從頁尾變更。