xilinx -- FPGA的基本组成单元LUT学习
首先开门见山的回答这个问题——LUT的作用是实现所有的逻辑函数,也就是类似于计算Y=A&B+C+D之类的算式结果!
”logic cells” 是 Xilinx 创造出来的一个市场用的刻度,可以用来衡量不同内部结构甚至不同厂商的资源情况。
“logic cells”代表的是一个没有其他任何功能的4输入LUT,在老一些的Xilinx的FPGA中,他们使用LUT的数目乘以1.2来计算LC的数目,因为一个LUT中还有一个进位链和MUX。
在较新的FPGA中,Xilinx采用了6输入LUT,这时他们采用系数1.6。
LUT的一个重要功能是逻辑函数发生器。本质上,逻辑函数发生器存储的是真值表(Truth Table)的内容,而真值表则是通过布尔表达式获得。在vivado中,打开网表文件,选择相应的LUT,在property窗口中可以看到真值表。
从逻辑电路角度看,LUT是构成组合逻辑电路的重要单元,正因为如此,也成为了时序电路中,影响逻辑级数的重要因素。了解常规电路的逻辑级数对于设计初期时序评估是很有必要的。(https://blog.****.net/nearcsy/article/details/80688930)
(ISE依次为等式,真值表,卡纳夫表,就不一一列出了。)
1,查找表(Look-Up-Table)
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. (Slicem用LUTs作为专属RAM【1LUT=64*1】或者移位寄存器SRL【1LUT=32bit SRL】)
分布式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也可用于产生一般逻辑。
2、减少路径上的LUT个数使速度更快
【备注】摘自《FPGA设计高级技巧Xilinx篇》
对FPGA设计而言如果想速度更快则应当努力减少路径上LUT的个数,而不是逻辑级数。如果想面积更小则应当努力减少LUT的个数而不是逻辑门数。
如下图:
采用图a结构,我们知道一个LUT只有一个输出,因此前面的2输入与门要占用一个LUT 后面的2个三输入或门要各占用一个LUT 总共占用3个LUT LUT级数是2级。
采用图b结构,其实现结果等效于图a结构,虽然增加了一个2输入与门并且逻辑级数与图a一样也是2级但我
们根据LUT特点它只占用2个LUT:2输入与门和3输入或门由一个LUT实现LUT级数只有1级
这就是一个门数增加逻辑级数未变但资源占用减少速度更快典型案例
https://wenku.baidu.com/view/56a0b103a6c30c2259019eba.html