啥子是LUT
一般来说简化的FPGA是由6部分组成的:可编程I/O单元,基本可编程逻辑单元...
基本可编程逻辑单元是可编程逻辑的主体,可以说CPLD和FPGA除了工艺不同以外,还有就是LAB(Logic Array Block)逻辑阵列模块的排布方式不同,CPLD是LAB排列在周围布线池在中间,而FPGA是LAB到处分布,布线资源在其中穿插,就像大城市的房子和街道,如图:
一个LAB是有几个LE(Logic Element)逻辑单元组成的一般10个吧。
一般情况下一个LE又是由一个LUT加一个进位逻辑和一个Register 加组成的。所以也是在一般情况下LUT的数目跟Register的数目是差不多的。一般的LUT(Look Up Table ) 查找表是4输入的。它主要是实现电路中的组合逻辑。
记得特权同学写过一篇博客从Technology Map Viewer 看4输入LUT。我试了一下
当4输入1输出时 oData <= iA & iB & iC & iD ;通过Technology Map Viewer看的图和资源利用情况如图:
这个很显然用了1个LE,其中就包括了一个LUT和一个Register。
当增加1输入时 oData <= iA & iB & iC & iD & iE ;通过Technology Map Viewer看的图和资源利用情况如图:
显然LE多用了一个原因是多用了一个LUT根本还是多了一个输入也就说明了它确实是4输入地,Register还是一个因为还是只有一个输出。并没有出现一个LUT中一输入没有用的情况,我用的是Qii 9.1说明随着软件的升级它已经会自动优化设计,呵呵。
当我们再加入2个输入和一个输出看看, oD1 <= iA & iB & iC & iD & iE;oD2 <= iF | iG ;通过Technology Map Viewer看的图和资源利用情况如图:
这次就不一样了,它用了3个LE,并没有像我们想象的那样,只用2个LE,也就是说系统并没有把刚加的2输入所需的LUT和前面没有用完的LUT复用,这是为什么了?我觉得这个LUT的输出有关,现在又多了一个输出也就是多了一个Register,LUT本来只有一个输出的,虽然这个输出分了3路,一路到Register一路直接输出一路反馈,但它总不能输出两个结果吧,所以肯定不能复用。
究竟LUT是怎样实现组合逻辑的呢?先看一下它的图:
在做数字电路的时候我们常常通过真值表,画卡罗图,最后得到一个表达式,其实FPGA在编程的时候就是设定的图中红框的部分编程级SRAM,现在如果A=B=1,C=D=0。那么我们从上往下看,D=0,走第一层选择器(也就是D控制的那个)的左边。C=0,走第二层左边第一个选择器的左边(第二层右边那个就不用看了)。B=1,走右边。A=1,走右边。OK,这样下来很自然的到了编程级的第三个R是1,那么1就被送到输出,跟表达式的结果相吻合。它其实就是把表达式的每种情况都算好放在这里4输入那么2的4次方正好16,也就是16种情况,那么编程级就有16种结果,来一种输入就去找相应的结果,这也就是查找表,名字取的还很形象,呵呵。