一、查找表
lut就是查找表,对于4输入的lut而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在fpga设计中可以用lut组建分布式的ram。
这样也可以解释我们在设计中为什么要采用流水线的实现方法
因为当输入数据的位数远大于一个lut的输入时,就需要用多个lut级联来实现逻辑,那么级联产生的延时也就不可避免了,这样就会制约系统的运行频率。那么为了避免级联数过于多,就采用插入寄存器的方法来实现。
举一个简单的例子,如果要实现一个6*1的mux可以用一个6输入的lut或者是2个4输入的lut来实现,6输入的lut相当于是6位地址线一位数据位,能够存储64bit的数据,而采用两个4输入的lut的话,它的总容量大小为32位数据。
如果用6输入的lut实现4输入lut的功能,那么就浪费了1-16/64=75%的资源,所以采用少输入的lut可以更好的节省面积和资源,但是呢如果lut采用的是2输入的呢,那样岂不是更好吗,不是的,因为对于多输入的信号处理的时候,就需要有多个lut的级联来实现,而级联有不可避免的会导致延时过分,导致时序不满足。因此在实际的fpga产品中多采用的是4输入或者6输入的lut。
图 4输入的lut
clb是xilinx基本逻辑单元,每个clb包含两个slices,每个slices由4个(a,b,c,d)6输入lut和8个寄存器组成(中间应该还有一些选择器、与非门、或非门之类的东西)。放一个slices的内部图
同一clb中的两片slices没有直接的线路连接,分属于两个不同的列。每列拥有独立的快速进位链资源。
slice分为两种类型 slicel, slicem
(1)slicel可用于产生逻辑,算术,rom。
(2)slicem除以上作用外还可配置成分布式ram或32位的移位寄存器。每个clb可包含两个slicel或者一个slicel与一个slicem.
分布式ram
slicem可以配置成分布式ram,一个slicem可以配置成以下容量的ram
多bit的情况需要增加相应倍数的lut进行并联。
分布式ram和 block ram的选择遵循以下方法:
1. 小于或等于64bit容量的的都用分布式实现
2. 深度在64~128之间的,若无额外的block可用分布式ram。要求异步读取就使用分布式ram。数据宽度大于16时用block ram.
3. 分布式ram有比block ram更好的时序性能。分布式ram在逻辑资源clb中。而block ram则在专门的存储器列中,会产生较大的布线延迟,布局也受制约。
移位寄存器(slicem)
slicem中的lut能在不使用触发器的情况下设置成32bit的移位寄存器, 4个lut可级联成128bit的移位寄存器。并且能够进行slicem间的级联形成更大规模的移位寄存器。
mux
一个lut可配置成4:1mux.
两个lut可配置成最多8:1 mux
四个lut可配置成16个mux
同样可以通过连接多个slices达成更大规模设计,但是由于slice没有直接连线,需要使用布线资源,会增加较大延迟。
进位链
每个slice有4bit的进位链。每bit都由一个进位mux(muxcy)和一个异或门组成,可在实现加法/减法器时生成进位逻辑。该muxcy与xor也可用于产生一般逻辑。
设计中我们可以用vivado查看设计底层的lut实现图,具体的差看方法https://blog.csdn.net/qijitao/article/details/51371434
二、lut实现原理
lut中文名字叫查找表。以7系列的fpga为例,每一个slice里面有四个lut。fpga就是通过lut实现大量的组合逻辑,以及slicem里面的lut还可以构成ram,shift register,以及multiplexers。这篇文章我们一起来学习lut如何构成组合逻辑。
lut,中文名字叫做查找表,其原理其实也就是一个一个查找表,根据输入去找到相应位置的信号,然后做输出。说白了就好像一个小容量的rom,把输入当作地址信号,对lut里面预存的内容进行寻址。
7系列的fpga的lut有6个输入端口(a1-6),然后有两个输出端口(o5,o6)。下图是slicel里面的lut。
其可以实现6输入的布尔组合逻辑函数,输入信号为a1,a2,a3,a4,a5,a6,输出端口为o6。如下
o6=f(a1,a2,a3,a4,a5,a6)
其实现方式就是将输入(a1,a2…a6)对应的输出在lut里面预存好(这一步在我们用bit文件配置fpga时实现),然后把输入信号当作地址信号去把对应的输出信号调出来。
同样其还可以构成两个5输入的布尔组合逻辑函数,其中这两个函数共用5个输入信号(a1,a2,a3,a4,a5),a6被拉高,o5,o6分别是两个布尔逻辑的输出。
o5=f(a1,a2,a3,a4,a5)
o6=f(a1,a2,a3,a4,a5)
故这也相当于实现的是一个5输入2输出的逻辑函数。
[o5,o6]=f(a1,a2,a3,a4,a5)
二、lut提升
总结一下,就好比单个lut里面可以预存 2^6=64个结果。那么单个lut可以实现
(1)输入信号最多为6bit,输出信号为1bit的的布尔逻辑函数;
(2)输入信号最多为5bit,输出信号为2bit的逻辑。
一个slice里面有四个lut故最多可以预存的输出信号个数为 26*4=28。
因此在一个slice里面,借助选择器将多个lut进行互连,可以实现输入数,输出数最多为如下所示的逻辑。
(1)2个lut通过互连可以构成7bit输入,单bit输出的逻辑。实现方式为两个lut的输入信号a1,a2,a3,a4,a5,a6接到一起,输出信号经过选择器选择输出,选择器的选择信号也是逻辑函数的一个输入信号。
将逻辑函数的输出送到storage element便可以形成同步时序逻辑。
(2)4个lut通过互连可以构成8bit输入,单bit输出的逻辑。实现方式大家可以根据上面的实现方式自行推理。
(3)2个lut通过互连可以构成6bit输入,2bit输出的逻辑。实现方式自行推理。
(4)4个lut通过互连可以构成7bit输入,2bit输出的逻辑。实现方式自行推理。
韩国自动驾驶不愿落后于人 计划5年内投资350亿美元
第十届中国卫星导航年会上 千寻位置获得北斗十年大会“杰出贡献奖”
半年生产并出货了5100万台手机,连续几个季度排名全球第一
车载LED显示屏芯片12V24V36V48V60V转5V电源芯片AH8680
如何用公式去求三极管放大电路的放大倍数
在FPGA设计中可以用LUT组建分布式的RAM
【虹科】5分钟了解单步和双步时钟
华为全新屏下摄像头专利:实现真全面屏
在M2M应用中使用NOR和NAND闪存
Google正在致力于开发一款新的操作系统--Fuchsia
华为发布它目的性十分明确,那就是阻止iPhone7
PXI和LXI实现通信测试自动化
太阳能-收集混合解决方案
柯洁人机大战回忆:困难、绝望,感觉自己无法做到
更加精确的高效数字电源
首饰珠宝测量秤,关于珠宝秤的方案设计开发
EMS磁通门传感器探头芯片有什么优点
诠鼎推出基于东芝及奥地利微电子的针对手持式应用装置的解决方案
诺基亚9什么时候上市?诺基亚9最新消息:诺基亚9配置、设计、运存大幅度提升,带来了诚意
Frost&Sullivan发明多种传感器增强导航和障碍物检测解决方案