38 / 63 · 概念
移位暫存器的狀態方程式
將位元移動表示為向量狀態轉移,連結儲存深度與輸出延遲。
單元可免費閱讀,註冊課程即可儲存學習進度。
一次讀取多個正反器
N 位元移位暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容把新輸入 d 放到 bit 0,下一狀態如下。
大括號表示 RTL 串接運算串接運算將位元序列相鄰接合。結果位寬等於各運算元位寬的總和,與數值加法不同。 詳細內容。各位元讀取同一份舊狀態,因此 d 不會在一個邊緣穿過整個暫存器。enable=0 時保持整個向量,reset 時改成指定初始向量。
每欄是一次上升緣上升緣是時脈由 0 變成 1 的瞬間。它與表示整段 CLK=1 期間的高準位不同。 詳細內容的觀察紀錄。輸入為邊緣前值,名稱含「後」的狀態為更新後值。欄位對齊表示取樣順序,並未繪出實體傳播延遲傳播延遲是輸入改變後,輸出穩定至正確值所需的時間。邏輯式是否等價與時間特性是兩個不同問題。 詳細內容。
初始 q=000,先送一次 din=1,再送三次 0。亮起的位元依 q0→q1→q2 移動後消失。
查看波形資料
| 訊號 | 波形 | 匯流排值 |
|---|---|---|
| din | 10.. | |
| q2 後 | 0.10 | |
| q1 後 | 010. | |
| q0 後 | 10.. | |
| q 後 | 2345 | 001 → 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;相同位元序列的帶符號解讀可能得到不同數值。 詳細內容 向量時,同一轉移可寫成:
N=3、Q=5(101)、d=1 時,,,下一值是 011。這種數值式與串接式形式不同,可作為實作驗證的參考模型。
究竟儲存了什麼
舊位元往最高索引移動,新位元進入最低索引。接受足夠有效輸入後,保留的是「目前與最近 N-1 個輸入」。同一結構可用於樣式偵測、簡單延遲線與串列轉並列。
增加儲存長度,不會增加一週期可處理的位元數。此結構每個有效邊緣接受一位元。並列輸入、多位元移動與 ready/valid交握(handshake)規定傳送端的 valid 與接收端的 ready 在同一邊緣皆為 1 時,才確定完成傳輸。等待期間如何保持資料也是契約的一部分。 詳細內容 暫停,各自需要不同資料路徑與控制條件。
自己試試看
N=4、目前 Q=1101、輸入 d=0。分別以串接式與數值式計算下一個 Q。
查看解說
串接式為 {101,0}=1010。數值式為 ,結果相同。舊最高位的 1 被移出儲存範圍。