14 / 37 · 概念
正反器、enable 與控制優先權
以下一狀態式定義保持、載入與重設,避免非預期的時脈閘控。
單元可免費閱讀,註冊課程即可儲存學習進度。
暫存器儲存下一狀態函數的結果
以 表示時脈邊緣前的值, 表示該邊緣採用的輸入, 表示更新後的值。reset 優先、其次 enable 的暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容如下。
enable=0 時,即使輸入 D 改變,儲存值仍保持。RTL 中省略這條保持路徑,與組合電路漏寫指定不同;循序區塊的保持行為是暫存器規格的一部分。
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 衝突。
查看波形資料
| 訊號 | 波形 | 匯流排值 |
|---|---|---|
| 邊緣 | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 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 時的重設,因此也須另外檢查這個組合。