Altifigence Academy

30 / 63 · 概念

計數器的下一狀態與重設優先權

將遞增、保持、重設與回捲整合成一份規格,逐邊緣計算結果。

先以下一狀態式決定功能

在 NN 位元自由遞增計數器加入同步 reset 與 enable,如下。

Ck+1={0rk=1(Ck+1) mod 2Nrk=0, ek=1Ckrk=0, ek=0C_{k+1}=\begin{cases} 0&r_k=1\\ (C_k+1)\bmod2^N&r_k=0,\ e_k=1\\ C_k&r_k=0,\ e_k=0 \end{cases}

重設重設將狀態回復至規格指定的初始值。必須一併定義它是同步或非同步,以及是否優先於其他控制訊號。最優先,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
1130
2001
3012
4023
5030

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

2 位元計數器的重設與循環
查看波形資料
波形資料:每個字元表示一個區間;句點保持先前狀態;p 表示一個時脈週期。
訊號波形匯流排值
邊緣23452E0 → E1 → E2 → E3 → E4
reset10...
count 前2345211 → 00 → 01 → 10 → 11
count 後2345200 → 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,需要更大的位元寬度,或另外指定飽和、錯誤策略。

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