(1)FPGA和LUT简介
FPGA是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
LUT指显示查找表(Look-Up-Table),本质上就是一个RAM。它把数据事先(很重要,由分析综合工具完成)写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。
非常重要的概念:输入的信号 <====> 输入的地址 ===> 输出结果
(2)LUT框图结构
下图为四输入查找表结构。xilinx FPGA内部是通过六输入查找表实现的。
(3)LUT内部结构
从图中可以看出,LUT是通过RAM实现的,4输入LUT通过16X1 RAM实现了,6输入查找表通过64X1 RAM实现。
下图为4输入查找表内部结构:
下图为6输入查找表内部结构:
(4)LUT实现C = A + B(A:1bit B:1bit)
综合完毕之后,可以查看电路如下,查找表1被初始化为4'h6(3'b110),查找表2被初始化为4'h8(3'b1000)。
可以推断A+B以下的四种情况:
当A为0,B为0时,2个查找表输入的地址都为0,因此第1个查找表输出4'h6(3'b110)第0位0,第2个查找表输出'h8(3'b1000)第0位0,因此Q的值为2'b00 = 0; ==> 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
哈哈,是不感觉很费劲呢?如果你看下C = A+B(A、B都是5位的时候)会更加复杂。因此我们只要知道原理就行,上面的操作综合分析工具和LUT已经帮我们做了,大家细细品味。下面列了一个表:
(5)总结LUT实现逻辑原理
本质上来说,就是把我们输入的数据作为LUT的地址信号,然后查找出预先定义好的逻辑结果,这个就是逻辑代码实现原理。编译器在编译verilog代码的时候会遍历所有逻辑输入并且计算出输出存入RAM里面,在硬件运行的时候根据线上的当前状态确定LUT输出从而实现了数字电路的一切设计逻辑。
来源:CSDN
作者:技术先生
链接:https://blog.csdn.net/weiaipan1314/article/details/104317186