查找表用作移位寄存器
不同于SLICEL(L: Logic),SLICEM(M: Memory)中的LUT可以用作存儲單元:移位寄存器、分布式RAM/ROM。
當用作移位寄存器時,一個LUT6可實現深度為32可帶同步使能但無復位的移位寄存器。這也是為什么會有SRLC32E這個原語(Primitive,這里C代表Cascade,級聯(lián))。同一SLICEM中的8個LUT6級聯(lián)可構成深度為256的移位寄存器。對于固定深度的移位寄存器可采用如下方式描述。
此外,LUT6還可配置為動態(tài)移位寄存器,如下圖所示。此時,移位寄存器的輸出取決于地址控制端。實際上,地址控制端決定了當前輸出數據的延遲深度。
對于動態(tài)移位寄存器可采用如下方式描述。
移位寄存器的一個典型應用場景如下圖所示。圖中,I支路數據與Q支路數據經過不同的處理方式,最終需要在輸出端對齊。假設處理I支路數據需要20個Latency,Q支路就需要通過SRL來補償這個特定延遲。采用LUT實現移位寄存器的一個好處是節(jié)省了FF。
基于LUT的移位寄存器其控制端口有寫使能、讀地址和時鐘,沒有復位信號,因此,采用RTL代碼描述時要注意這一點。這也體現了RTL代碼風格的一個特征:RTL代碼描述與FPGA物理結構相匹配。
結論:
-LUT可用作固定深度的移位寄存器或動態(tài)移位寄存器
-LUT用作移位寄存器時沒有復位端口