在数位电路的世界里,移位寄存器是使用一连串连接的翻转触发器所制成的宽广领域。这些触发器串联起来,将一个触发器的输出连接到下一个的输入。所有的触发器共用一个时钟信号,这使得存储在系统中的数据能够依次向前推移。当将最后一个翻转触发器的输出再连接回第一个时,数据就能在寄存器内循环,这种配置在1960年代末和1970年代早期取代了延迟线记忆系统,被用作电脑记忆。许多并行的移位寄存器经常被用来构建更大记忆池,这称为「位阵列」。数据在此阵列中被存储并以并行方式读取,常常作为一个计算字,而每个位则串行存储在移位寄存器中。
数据存储在寄存器中,以便在需要时迅速调取,这将使得数据的处理效率大大提高。
在设计位阵列时,存在一个固有的权衡:将更多的翻转触发器串在一起,可以使单个移位寄存器存储更多的位元,但这也要求更多的时钟周期来将数据推送通过这些触发器,方可将数据重新读取出来。移位寄存器可以拥有并行与串行的输入和输出,经常配置为「串行输入、并行输出」(SIPO)或「并行输入、串行输出」(PISO)。此外,还有同时具有串行和并行输入或是输出的寄存器,还有可以进行双向的移位寄存器,让数据可以在左至右或从右至左移动。
SISO是一种最简单的移位寄存器。数据字串呈现于「数据输入」,每当「数据推进」被拉高时,就将数据向右移动一个位置。在每次推进时,最左侧的位元(即「数据输入」)将被移入第一个翻转触发器的输出,最右侧的位元则会被移出并消失。整体移动过程中,寄存器的状态可以被重置,当重设(R)引脚拉高时,整个寄存器将被设置为零。这就是破坏性读取的概念。
SIPO配置允许从串行格式转换为并行格式。数据以串行形式输入,然后可在每个输出端口中同时读取,或进行进一步的推进。在此配置中,每个翻转触发器都是边缘触发的,所有翻转触发器以给定的时钟频率运作。由于每个输入位元需经过多个时钟周期才能到达N个输出端,因此输出展现为并行结果。
PISO配置则允许在D1至D4线上以并行格式输入数据。为了将数据写入寄存器,需将写入/移位控制线保持在低电平,一旦需要推进数据,则将控制线拉高并开始计时。此时寄存器的状态如动画所示,数据按序被读取。这款配置极大地提高了数据处理的灵活性。
移位寄存器最常见的用途之一就是在串行和并行接口之间进行转换。它们的设计使得此转换变得高效。
串行输入-串行输出的移位寄存器也可用作简单的延迟电路,并在此过程中保持数据的完整性。
几个双向移位寄存器可以并行连接,以实现堆叠的硬体设计。
当微控制器的通用输入/输出引脚不足时,移位寄存器通常被用来扩展IO引脚的数量,透过串行外围接口进行传输。
移位寄存器还能用作脉冲延长器,与其他定时器相比,优势在于其更高的精度与稳定性。
早期计算机常用移位寄存器处理数据,通过将两个数字分别存入两个移位寄存器来进行计算,并透过计时来处理数据。
自然地,旧的计算机语言也包括了位操作,能够有效的对寄存器中的数据进行左右移位的操作,进而实现简单的乘除运算。
在1970年代早期,大型的串行-串行移位寄存器在某些设备中用作记忆体,与早期的延迟线记忆相似,且由于其结构更为简单而获得广泛应用。
移位寄存器的第一个已知范例出现在1944年的Mark 2 Colossus,这是一台由真空管和塞舌耳制成的代码破解机。那时它被用来辅助其他计算机的运行,以显示其设计的先进性。
移位寄存器使得早期电脑的功能更加多样化,成为数位电路中一个不可或缺的部分。
随着技术的进步,移位寄存器逐渐被整合到晶片上,使其应用越来越普遍。从基本的数据管理,到复杂的计算处理,移位寄存器在我们的数位生活中占据着举足轻重的位置。随着未来的发展,这个古老的概念将如何随着技术的演进而变化?