【FPGA】LUT如何实现组合逻辑、时序逻辑
FPGA是如何利用LUT实现组合逻辑功能的-电子工程专辑
FPGA的基本可编程逻辑单元一般都采用了基于SRAM的查找表结构,查找表(LUT,Look Up Table)一般为四输入,用于完成组合逻辑功能
小容量的ROM?把输入当做地址信号,对LUT里面预存的内容进行寻址
本质上就是一个RAM。它把数据事先(很重要,由分析综合工具完成)写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。
输入的信号 <====> 输入的地址 ===> 输出结果
下图是四输入查找表的基本结构,核心元件是二选一多路选择器,四个输入通过控制二选一多路选择器的状态实现所需结果的输出
例如
实现A&B&C&D
(1)求解真值表
AB | 00 | 01 | 10 | 11 |
CD | ||||
00 | 0 | 0 | 0 | 0 |
01 | 0 | 0 | 0 | 0 |
10 | 0 | 0 | 0 | 0 |
11 | 0 | 0 | 0 | 1 |
(2)数据下载
在代码下载的过程中,真值表中的数据会下载至LUT对应的SRAM中
(3)数据输出
在代码运行的过程中,四个输入通过控制二选一多路选择器的选通状态来输出不同的数据
4输入查找表,包含4个输入端口I[3:0],包含一个输出端口O,还包含存储初始值的16个DFF触发器
四个输入信号I(4级选择器),构成的输入值一共有16种情况。每个输入值对应一个DFF,提前把值对应的输出值初始化在DFF内,这就构建了一张16*1的表格。根据输入值,选择某个DFF输出到O端,从而实现相应的逻辑功能
举例:I[3:0]=4'b0101
LUT4 #(
.INIT(16'h0000)
)LUT4_inst(
.O(O),
.I0(I0),
.I1(I1),
.I2(I2),
.I3(I3)
);
O=I[3]&I[2]&I[1]&I[0];
LUT4 #(
.INIT(16'h8000)
)LUT4_inst(
.O(O),
.I0(I0),
.I1(I1),
.I2(I2),
.I3(I3)
);
6输入查找表内部结构
LUT是如何实现千万种逻辑结构的_lut电路-CSDN博客
C=A+B
该电路实现了两个1位输入A和B的加法功能(C = A + B)。输出Q是一个2位二进制数,表示加法的和(即Q的十进制值等于A + B)。电路使用两个查找表(LUT):
-
LUT1 初始化为4'h6(二进制4'b0110),地址输入由{B, A}组成(B为高位,A为低位)。
-
LUT2 初始化为4'h8(二进制4'b1000),地址输入由{A, B}组成(A为高位,B为低位)。
输出Q定义为:Q[1] = LUT2的输出,Q[0] = LUT1的输出。
输入 B | 输出 Q (二进制) | 输出 Q (十进制) | 解释 (A + B) | |
---|---|---|---|---|
0 | 0 | 00 | 0 | 0 + 0 = 0 |
0 | 1 | 01 | 1 | 0 + 1 = 1 |
1 | 0 | 01 | 1 | 1 + 0 = 1 |
1 | 1 | 10 | 2 | 1 + 1 = 2 |
-
当 A=0, B=0:LUT1 地址={B,A}=00=0,输出位0=0(4'h6=0110,位0=0);LUT2 地址={A,B}=00=0,输出位0=0(4'h8=1000,位0=0)。因此 Q = {LUT2输出, LUT1输出} = {0, 0} = 00。
-
当 A=0, B=1:LUT1 地址={B,A}=10=2,输出位2=1(4'h6=0110,位2=1);LUT2 地址={A,B}=01=1,输出位1=0(4'h8=1000,位1=0)。因此 Q = {0, 1} = 01。
-
当 A=1, B=0:LUT1 地址={B,A}=01=1,输出位1=1(4'h6=0110,位1=1);LUT2 地址={A,B}=10=2,输出位2=0(4'h8=1000,位2=0)。因此 Q = {0, 1} = 01。
-
当 A=1, B=1:LUT1 地址={B,A}=11=3,输出位3=0(4'h6=0110,位3=0);LUT2 地址={A,B}=11=3,输出位3=1(4'h8=1000,位3=1)。因此 Q = {1, 0} = 10。
查找表1被初始化为4'h6(3'b110),查找表2被初始化为4'h8(3'b1000)
A=0,B=0
2个查找表输入的地址都为0,因此第1个查找表输出4‘h6(3'b110)第0位0,第2个查找表输出4'h8(3'b1000)第0位0,Q的值为2'b00;==> 0 + 0 = 0
A=1,B=0
第1个查找表输入的地址为1,第2个查找表输入的地址为2,因此第1个查找表输出4'h6(3'b110)第1位1,第二个查找表输出'h8(3'b1000)第2位0,因此Q的值为2'b01 = 1; ==> 1 + 0 = 1
A=0,B=1
第1个查找表输入的地址为2,第2个查找表输入的地址为1,因此第1个查找表输出4'h6(3'b110)第2位1,第二个查找表输出'h8(3'b1000)第1位0,因此Q的值为2'b01 = 1; ==> 0 + 1 = 1
A=1,B=1
两个查找表输入的地址都为3,两个因此第一个查找表输出4'h6(3'b0110)第3位0,第二个查找表输出'h8(3'b1000)第3位1,因此Q的值为2'b10 = 2。 ==> 1 + 1 = 2
CLB作为FPGA里的最小逻辑单元
CLB是由2个slice构成
7系列FPGA的slice包含4个部分:
(1)逻辑功能产生器,也就是咱们常说的查找表,1个slice里包含4个6输入的查找表。
(2)存储单元,也就是常说的触发器,1个slice里包含8个触发器。每4个触发器为一组,可配置成D触发器或锁存器。
(3)多路复用器,也就是1位宽的数据选择器,数量非常多,足够使用。
(4)进位逻辑,它与本列的上下slice的进位逻辑相连,实现数据运算时的进位操作。