在數位電路的世界裡,移位寄存器是使用一連串連接的翻轉觸發器所製成的寬廣領域。這些觸發器串聯起來,將一個觸發器的輸出連接到下一個的輸入。所有的觸發器共用一個時鐘信號,這使得存儲在系統中的數據能夠依次向前推移。當將最後一個翻轉觸發器的輸出再連接回第一個時,數據就能在寄存器內循環,這種配置在1960年代末和1970年代早期取代了延遲線記憶系統,被用作電腦記憶。許多並行的移位寄存器經常被用來構建更大記憶池,這稱為「位陣列」。數據在此陣列中被存儲並以並行方式讀取,常常作為一個計算字,而每個位則串行存儲在移位寄存器中。
數據存儲在寄存器中,以便在需要時迅速調取,這將使得數據的處理效率大大提高。
在設計位陣列時,存在一個固有的權衡:將更多的翻轉觸發器串在一起,可以使單個移位寄存器存儲更多的位元,但這也要求更多的時鐘週期來將數據推送通過這些觸發器,方可將數據重新讀取出來。移位寄存器可以擁有並行與串行的輸入和輸出,經常配置為「串行輸入、並行輸出」(SIPO)或「並行輸入、串行輸出」(PISO)。此外,還有同時具有串行和並行輸入或是輸出的寄存器,還有可以進行雙向的移位寄存器,讓數據可以在左至右或從右至左移動。
SISO是一種最簡單的移位寄存器。數據字串呈現於「數據輸入」,每當「數據推進」被拉高時,就將數據向右移動一個位置。在每次推進時,最左側的位元(即「數據輸入」)將被移入第一個翻轉觸發器的輸出,最右側的位元則會被移出並消失。整體移動過程中,寄存器的狀態可以被重置,當重設(R)引腳拉高時,整個寄存器將被設置為零。這就是破壞性讀取的概念。
SIPO配置允許從串行格式轉換為並行格式。數據以串行形式輸入,然後可在每個輸出端口中同時讀取,或進行進一步的推進。在此配置中,每個翻轉觸發器都是邊緣觸發的,所有翻轉觸發器以給定的時鐘頻率運作。由於每個輸入位元需經過多個時鐘週期才能到達N個輸出端,因此輸出展現為並行結果。
PISO配置則允許在D1至D4線上以並行格式輸入數據。為了將數據寫入寄存器,需將寫入/移位控制線保持在低電平,一旦需要推進數據,則將控制線拉高並開始計時。此時寄存器的狀態如動畫所示,數據按序被讀取。這款配置極大地提高了數據處理的靈活性。
移位寄存器最常見的用途之一就是在串行和並行接口之間進行轉換。它們的設計使得此轉換變得高效。
串行輸入-串行輸出的移位寄存器也可用作簡單的延遲電路,並在此過程中保持數據的完整性。
幾個雙向移位寄存器可以並行連接,以實現堆疊的硬體設計。
當微控制器的通用輸入/輸出引腳不足時,移位寄存器通常被用來擴展IO引腳的數量,透過串行外圍接口進行傳輸。
移位寄存器還能用作脈衝延長器,與其他定時器相比,優勢在於其更高的精度與穩定性。
早期計算機常用移位寄存器處理數據,通過將兩個數字分別存入兩個移位寄存器來進行計算,並透過計時來處理數據。
自然地,舊的計算機語言也包括了位操作,能夠有效的對寄存器中的數據進行左右移位的操作,進而實現簡單的乘除運算。
在1970年代早期,大型的串行-串行移位寄存器在某些設備中用作記憶體,與早期的延遲線記憶相似,且由於其結構更為簡單而獲得廣泛應用。
移位寄存器的第一個已知範例出現在1944年的Mark 2 Colossus,這是一台由真空管和塞舌耳製成的代碼破解機。那時它被用來輔助其他計算機的運行,以顯示其設計的先進性。
移位寄存器使得早期電腦的功能更加多樣化,成為數位電路中一個不可或缺的部分。
隨著技術的進步,移位寄存器逐漸被整合到晶片上,使其應用越來越普遍。從基本的數據管理,到複雜的計算處理,移位寄存器在我們的數位生活中佔據著舉足輕重的位置。隨著未來的發展,這個古老的概念將如何隨著技術的演進而變化?