在文章《LUT是如何实现千万种逻辑结构的》里面我们讲过了LUT的原理,实现逻辑函数时,相当于一个ROM将结果预存,然后把通过输入信号当作地址对预存的结果进行寻址。因此同样借助LUT加几个端口,就可以实现RAM。SLICEM里面的LUT就可以用来实现RAM资源。在文章《LUT查找表实现各种RAM及ROM原理精讲》里面讲解了LUT是如何实现各种RAM及RAM的原理及框图。本文来详细讲解LUT查找表实现移位寄存器原理。
(1)移位寄存器的概念
在数字电路中,移位寄存器是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。
移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。
(2)LUT实现32位移位寄存器原理
SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT可以将串行数据延时1到32个时钟周期(A[4:0]为多少就是延时多少个时钟周期输出)。移入D(DI 1 LUT引脚)和移除Q31(MC31 LUT引脚)线路将LUT级联,以形成更大的移位寄存器。因此,SliceM中的四个LUT被级联可以产生高达128个时钟周期的延时。32bit移位寄存器 LUT实现框图、原语如下图:
(3)LUT实现128位移位寄存器原理
通过一个SliceM的四个LUT级联后可以实现128bit的移位寄存器,使用7输入地址进行查找,使用F7AMUX、F7BMUX、F8MUX7复用器进行4个32位级联到128位。