从原理的视角,一文彻底弄懂FPGA的查找表(LUT)、CLB

我学东西有个特点,喜欢从原理的层面彻底弄懂一个知识点,这几天想弄明白FPGA的查找表,但发现很多博文写的很模糊,看了以后仍然不是很明白。当然,可能是作者自己弄懂了,但没有站在新人的角度来详细的解释。通过多方资料查找,终于把原理彻底搞懂,在此记录一下吧。如果朋友看了我的文章后,仍然不明白的,欢迎随时交流。

背景知识

我最早接触逻辑门是在初中物理的一堂课上,当时课本的小知识栏讲了一个家用自动晾衣架,原理挺简单,就是晚上或者下雨天晾衣架可以自动收回。当时觉得这种与非门电路太奇妙了!
假如我们用A表示白天,用 A ‾ \overline{A} A表示晚上,用B表示晴天,用 B ‾ \overline{B} B表示阴天或雨天。用y表示晾衣架的控制,为1时收回,为0时伸出。
我们可以据此得到一个真值表

A B y
0 0 A ‾ B ‾ \overline{A}\overline{B} AB 1
0 1 A ‾ B \overline{A}B AB 1
1 0 A B ‾ A\overline{B} AB 1
1 1 A B AB AB 0

逻辑表达式写为

y = A ‾ B ‾ + A ‾ B + A B ‾ y=\overline{A}\overline{B}+\overline{A}B+A\overline{B} y=AB+AB+AB

这就是晾衣架收回的条件。

这个控制逻辑如果用查找表如何设计呢?我们先设计4个bit的RAM,RAM里存储的数据就是1110, 然后A和B分别控制双路选择器,连接方式见下图,选择器的输出结果为y。
在这里插入图片描述

FPGA的LUT

继续上面的思路,假如我要实现

y = ( A   a n d   B ) o r   C y= (A \ and \ B)or\ C y=A and Bor C

把它的真值表列出来就是如下结果
在这里插入图片描述
那么我的查找表RAM只需要8bit,填入01010111即可。
从这两个例子我们应该能够想到,对于FPGA器件,要实现一定的逻辑功能,只需要往查找表单元的RAM里写入对应的真值表输出值即可。

对于下面4输入的一个逻辑,想要实现
y = a b c d ‾ + a b c d + a b c d ‾ y= \overline{abcd}+abcd+ab\overline{cd} y=abcd+abcd+abcd
查找表RAM的 配置值为0x8009 即 1000 0000 0000 1001
在这里插入图片描述

Xinlinx的FPGA查找表一般设计为6个输入,那么就需要64bit的RAM来存储6个变量所有的可能组合,这个查找表也可以作为两个5输入的查找表使用。

在FPGA的开发中,可以用直接配置LUT的方式实现逻辑功能。
比如要实现二输入的 NAND gate

在verilog中我们一般写成这样

y=~(a&b)

转化成 LUT 的方式可能是这样


// LUT6: 6-input Look-Up Table with general output
// 7 Series
// Xilinx HDL Libraries Guide, version 2012.2
LUT6 #(
.INIT(64'h0000000000000007) // Specify LUT Contents
) LUT6_inst (
.O(y), // LUT general output
.I0(a), // LUT input
.I1(b), // LUT input
.I2(0), // LUT input
.I3(0), // LUT input
.I4(0), // LUT input
.I5(0) // LUT input
);
// End of LUT6_inst instantiation

FPGA的CLB

从上面的介绍我们可以看出,查找表是一些组合逻辑电路,主要是用RAM+MUX2来实现一定的组合逻辑功能。我们知道逻辑电路都会有延时,所以为了确保电路的工作稳定,还需要有同步单元才行。
在FPGA中,每个5输入的查找表后面有一个触发器,那么6输入的查找表有两个触发器。每四个6输入的查找表加2个触发器以及一个进位加法运算器组成一个slice,两个slice组成一个CLB单元。
slice 又分为SLICEM和SLICEL,M的意思是memory,L的意思是logic,区别是SLICEM除了做查找表用之外,还可以用作RAM,这种叫做分散式RAM单元(Distributed RAM)。初次之外,SLICEM还可以用作移位寄存器,本篇就不做展开,等以后再叙吧。SLICEL只能做查找表用。
在这里插入图片描述
在这里插入图片描述
说到这里,我们应该能读懂FPGA的手册中关于资源的描述了。从中可以看出SLICE的数量等于SLICEM+SLICEL.
在这里插入图片描述
到这里就可以明白FPGA大致是如何组成的了,FPGA是一个复杂度极高的集成器件,后续更深入的理解请关注我的其它博文。有用的话点个赞吧。

猜你喜欢

转载自blog.csdn.net/malcolm_110/article/details/107250777