Altifigence Academy

38 / 63 · 概念

移位暫存器的狀態方程式

將位元移動表示為向量狀態轉移,連結儲存深度與輸出延遲。

一次讀取多個正反器

N 位元移位暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容把新輸入 d 放到 bit 0,下一狀態如下。

Qk+1={Qk[N−2:0],dk}Q_{k+1}=\{Q_k[N-2:0],d_k\}

大括號表示 RTL 串接運算串接運算將位元序列相鄰接合。結果位寬等於各運算元位寬的總和,與數值加法不同。 詳細內容。各位元讀取同一份舊狀態,因此 d 不會在一個邊緣穿過整個暫存器。enable=0 時保持整個向量,reset 時改成指定初始向量。

每欄是一次上升緣上升緣是時脈由 0 變成 1 的瞬間。它與表示整段 CLK=1 期間的高準位不同。 詳細內容的觀察紀錄。輸入為邊緣前值,名稱含「後」的狀態為更新後值。欄位對齊表示取樣順序,並未繪出實體傳播延遲傳播延遲是輸入改變後,輸出穩定至正確值所需的時間。邏輯式是否等價與時間特性是兩個不同問題。 詳細內容。
初始 q=000,先送一次 din=1,再送三次 0。亮起的位元依 q0→q1→q2 移動後消失。

移動一個位元,驗算串接式
查看波形資料
波形資料:每個字元表示一個區間;句點保持先前狀態;p 表示一個時脈週期。
訊號波形匯流排值
din10..
q2 後0.10
q1 後010.
q0 後10..
q 後2345001 → 010 → 100 → 000

以 din=1 前進一次,再改 din=0 前進三次,可看到 001→010→100→000。改變輸入瞬間,目前 q 不變,只有下一邊緣的預期值改變。

一個位元會存入哪個正反器?

同步 reset 優先於 enable。enable=0 時,保持已儲存的值。 q=000; q_next = (2q + din) mod 8

將串接式轉成數值式確認

解讀為 unsigned無符號(unsigned)將位元序列解讀為非負整數。n 位元範圍為 0 至 2^n−1;相同位元序列的帶符號解讀可能得到不同數值。 詳細內容 向量時,同一轉移可寫成:

Qk+1=(2Qk+dk) mod 2NQ_{k+1}=(2Q_k+d_k)\bmod2^N

N=3、Q=5(101)、d=1 時,2⋅5+1=112\cdot5+1=11,11 mod 8=311\bmod8=3,下一值是 011。這種數值式與串接式形式不同,可作為實作驗證的參考模型。

究竟儲存了什麼

舊位元往最高索引移動,新位元進入最低索引。接受足夠有效輸入後,保留的是「目前與最近 N-1 個輸入」。同一結構可用於樣式偵測、簡單延遲線與串列轉並列。

增加儲存長度,不會增加一週期可處理的位元數。此結構每個有效邊緣接受一位元。並列輸入、多位元移動與 ready/valid交握(handshake)規定傳送端的 valid 與接收端的 ready 在同一邊緣皆為 1 時,才確定完成傳輸。等待期間如何保持資料也是契約的一部分。 詳細內容 暫停,各自需要不同資料路徑與控制條件。

自己試試看

N=4、目前 Q=1101、輸入 d=0。分別以串接式與數值式計算下一個 Q。

查看解說

串接式為 {101,0}=1010。數值式為 (2⋅13+0) mod 16=10(2\cdot13+0)\bmod16=10,結果相同。舊最高位的 1 被移出儲存範圍。

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