30 / 63 · 概念
計數器的下一狀態與重設優先權
將遞增、保持、重設與回捲整合成一份規格,逐邊緣計算結果。
單元可免費閱讀,註冊課程即可儲存學習進度。
先以下一狀態式決定功能
在 位元自由遞增計數器加入同步 reset 與 enable,如下。
重設重設將狀態回復至規格指定的初始值。必須一併定義它是同步或非同步,以及是否優先於其他控制訊號。最優先,enable=0 時保持。下方視覺化可切換 enable,比較遞增與保持的行為。
初始 q=11 時選 reset=1,先改變的只有下一狀態 00。按下下一時脈,確認儲存值何時改變。解除 reset 後走過 00→01→10→11→00,再比較 enable=0 時是否只有邊緣數增加、q 保持不變。
同步 reset 優先於 enable。enable=0 時,保持已儲存的值。 q=11; q_next = (q + 1) mod 4
建立逐邊緣預測表
2 位元計數器初始為 3,第一個邊緣 reset=1,之後 reset=0,則邊緣後的值為 0、1、2、3、0。即使在時脈之間把 reset 改成 1,同步暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容也不會在上升緣上升緣是時脈由 0 變成 1 的瞬間。它與表示整段 CLK=1 期間的高準位不同。 詳細內容之前立即變為 0。
| 邊緣 | 邊緣前 reset | 舊 C | 更新後 C |
|---|---|---|---|
| 1 | 1 | 3 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 2 |
| 4 | 0 | 2 | 3 |
| 5 | 0 | 3 | 0 |
每欄是一次上升緣上升緣是時脈由 0 變成 1 的瞬間。它與表示整段 CLK=1 期間的高準位不同。 詳細內容的觀察紀錄。輸入為邊緣前值,名稱含「後」的狀態為更新後值。欄位對齊表示取樣順序,並未繪出實體傳播延遲傳播延遲是輸入改變後,輸出穩定至正確值所需的時間。邏輯式是否等價與時間特性是兩個不同問題。 詳細內容。
初始狀態為 3,第一個邊緣 reset 優先於遞增,最後一個邊緣從 3 回捲到 0。
查看波形資料
| 訊號 | 波形 | 匯流排值 |
|---|---|---|
| 邊緣 | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count 前 | 23452 | 11 → 00 → 01 → 10 → 11 |
| count 後 | 23452 | 00 → 01 → 10 → 11 → 00 |
不要混淆 reset 的意義
always_ff @(posedge clk) 中的 if(rst) 是同步 reset,與在事件列表加入 reset 邊緣的非同步 reset 不同。非同步 reset 的解除具有 recovery/removal 等獨立時序條件,不能只因能更快變成 0 就任意替換。
若計數器要定期輸出脈衝,還需指定在哪個狀態輸出。是值等於最大值期間都為 1,還是返回 0 的邊緣後維持一週期為 1,會影響輸出式與觀察時點。
自己試試看
3 位元計數器目前是 7。第一個邊緣 rst=0、en=0,下一個邊緣 rst=0、en=1,各狀態是多少?
查看解說
第一個邊緣保持 7,下一個邊緣超過 3 位元範圍而回捲為 0。若要保留 8,需要更大的位元寬度,或另外指定飽和、錯誤策略。