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

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

背景知识

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

ABy
00 A ‾ B ‾ \overline{A}\overline{B} AB1
01 A ‾ B \overline{A}B AB1
10 A B ‾ A\overline{B} AB1
11 A B AB AB0

逻辑表达式写为

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是一个复杂度极高的集成器件,后续更深入的理解请关注我的其它博文。有用的话点个赞吧。

  • 180
    点赞
  • 387
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
第一部分:查找LUT FPGA是在PAL、GAL、EPLD、CPLD等可编程器件的基础上进一步发展的产物。它是作为ASIC领域中的一种半定制电路而出现的,即解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。   由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找结构,也有一些军品和宇航级FPGA采用Flash或者熔丝与反熔丝工艺的查找结构。通过烧写文件改变查找内容的方法来实现对FPGA的重复配置。   根据数字电路的基本知识可以知道,对于一个n输入的逻辑运算,不管是与或非运算还是异或运算等等,最多只可能存在2n种结果。所以如果事先将相应的结果存放于一个存贮单元,就相当于实现了与非门电路的功能。FPGA原理也是如此,它通过烧写文件去配置查找的内容,从而在相同的电路情况下实现了不同的逻辑功能。   查找(Look-Up-Table)简称为LUTLUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能结果,并把真值(即结果)事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查,找出地址对应的内容,然后输出即可。   下面给出一个4与门电路的例子来说明LUT实现逻辑功能的原理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值