(转)FPGA从Xilinx 的7系列学起(3)
0赞1.3再深入一点的了解CLB
这个图有点大,但是太经典了,搞得我不得不放弃扔掉它的想法。是不是有人已经看迷糊了。那咱就慢慢的清晰呗。有时候也不一定要一开始明白,如果一开始明白,那么会越来越糊涂。
那么这个是啥?这个就是一个Slice,这个Slice由几部分组成,4个六输入查找表,很多的复用器(multiplexers),一条自下而上的进位链(这个进位链被连接到四个触发器上的),8个FF的(4个的FF/Latches, 4个辅助的FF)。看看这个图的好处就来了,我不需要给大家指出那里是啥了,一目了然。
如果大家不收藏我的文章,那么大家就把这个图好好的保留一下。这个图就是你设计到底层,想直接用原语设计的时候的九阳真经了。
1.3.1 聊一聊LUT
查找表LUT也有时也被称为函数发生器(这个概念有点大,但是我觉得还是比较贴切的,因为你所有的功能都是由它来实现的)。一个LUT的能力是受限于输入的个数的限制,而不是逻辑的复杂性。只要他在Slice内部进行相关的功能,那么通过LUT的延迟是恒定的,无论你实现的什么样的逻辑功能。--不过我还是不建议大家取用Slice作为一个延时器的来进行设计。
每个Slice包含一个6输入LUT,可以也被分成两个5输入LUT。那么这样的应用就允许资源被分解,来帮助保证最大芯片利用率。我觉得每一个人必须了解的LUT的输入限制的性质。很明显,如果你的组合逻辑有七个输入,那么会发生什么呢?由于LUT有六个输入,那么综合工具肯定是需要添加第二个LUT来串联第一个LUT。这又会造成什么呢?这肯定是极大地增加与该路径相关联的延迟,进而影响你设计的最大频率,有时候你设计出来的产品能够跑到多高的频率影响你的设计最终能不能成功的应用,影响你的产品在同类产品的竞争力。当然也不是跑得越高越好,频率越高动态功耗就越高,功耗太高也不是很好的结果,那么结论就是运行频率适量就好,但是潜在的运行频率还是越高越好,你进可攻退可守。
再来扯一扯一个6输入LUT可以也被分成两个5输入LUT的事情。那个时候很多人的书上都讲了这个事情,但是就是一句话,我也是云里雾里的。今天我不知道是不是该把这个事情捋清楚。后来,我想还是捋一捋吧,毕竟这个东西还是能够让人同样跟我一样云里雾里的。
不知道大家看了我的图,清晰了没有。他的两个5输入的查找表的一个前提是5个输入是必须相同的。如果没有这个前提,那么他的结论是不正确的。那么很多书上讲的都是结论,没讲前提。我就把前提给扒出来了。希望对大家理解这句话有帮助。那么,理解这个的好处是什么呢?LUT本身是可以实现任何输入的组合函数。但是我们肯定希望用最少的资源。那么如果能把自己的设计用别人1/2的资源来实现了,功耗和成本一定让你的老板非常喜欢你。
1.3.2 聊一聊Mux
在最上面的图中,我们看到了许多多路复用器,他的功能很明显是把LUT的输出连接到一起,然后形成不同的功能。以下四句话,请大家先记住,然后我再来用图一个个解释解释。
1. 一个LUT能够实现1个4选1的复用器,一个Slice能够实现4个4选1的复用器。
2. 两个LUT能够实现1个8选1的复用器,一个Slice能够实现2个8选1的复用器。
3. 四个LUT能够实现1个16选1的复用器,一个Slice能够实现1个16选1的复用器。
专用的F7AMUX, F7BMUX和 F8MUX三种选择器和LUT一起可以形成更多输入的选择器。每个Slice包含两个F7MUXes,它们和该组的两个LUT的输出一起可以创建和8比1多路复用器。每Slice还包含一个F8MUX。相结合的F7MUXes的输出,可以使一个16比1的MUX。这些MUX输出可以连接到该Slice的触发器/锁存器,可以和其他Slice一起组成能力更强的复用器。这些专用多路复用器用来提高大多路复用速度和节省设计所需要的资源的。
4:1的复用器
如下图所示:每一个LUT都可以被配制成4:1的复用器。
8:1的复用器
每一个Slice有一个F7AMUX 和一个 F7BMUX,这两个复用器和LUT的输出一起形成一个支持13输入的功能,或者一个8:1的复用器。一个Slice能够实现2个8选1的复用器。
16:1的复用器
每一个Slice里面有一个F8MUX,他和F7AMUX 和 F7BMUX输出一起组成了支持27输入的组合逻辑功能或者一个16:1的复用器。一个Slice能够实现1个16选1的复用器。