FPGA从Xilinx的7系列学起(4)

1.3.3 聊一聊进位链
进位逻辑为了提高用户的算术功能而专门设置的专用硬件资源,他可以改善加法器,累加器,减法器和比较器运算速度。从图中可以看到,左边显示的Slice被分组到同一个进位链中。大家一定要注意,进位链逻辑走向垂直向上。这是必须注意,因为绝大多数设计都会广泛的使用进位链逻辑,那么用户使用的时候,最起始的bit应该被放置在进位链的底部,这样就可以节省很多的资源。当然这个和大家设计的原理图和Layout PCB的关系都很大,所以现在提倡从设计板卡的时候FPGA的工程师就必须和硬件设计工程师一同工作。以后我们会详细讲述这些事情的,不要太着急,否则很多东西还没成系统,就又开始乱糟糟的了。

1.3.4 聊一聊触发器(flip-flop)
XILINX FPGA所有的触发器都是D触发器,这个在数字电路中是最基本的概念,如果不太知道的,可以翻一下数字电路的书籍。当是温故而知新了。D触发器的特点是有一个Clock输入端,数据的翻转需要靠时钟的上升沿或者下降沿的传递来实现的。所有的D触发器都会一个使能位(CE);都会有同步或者异步的置位输入位,当上电的时候他会同步或者异步给一个置位信息,是的寄存器处于一个稳定态,这个对我们的设计帮助非常大。很多书上都说这个置位是没有意义,因为在电路中无法实现该功能,很多工程师朋友在这里都很迷惑。但是实际应用中,我已经测试过,在XILINX的FPGA中,他的作用是存在的,能够非常准确的按照你的需求来设置数据。

通过图片,很清晰的可以看到:同一个组里面的所有触发器和触发器/锁存器共享相同的控制信号。触发器的相关联的控制信号对我们的设计来说是很重要的,因为只有触发器有相同的控制信号,那么他们就可以被分配到相同的Slice中了。这意味着,如果你不管理你设计中的控制信号,控制信号的数目也是随意增加或者减少,那么你真的可能用一个Virtex7的芯片设计出来一个Artix7性能的产品,大量的资源就在你随意的代码中悄悄的溜走了。置位和复位信号用户可以根据自己的需求,配置为同步或异步的。对于同步的设计目的,Xilin的建议,除非必须异步设计,那么用户就应该设计一个同步置位或复位。这也是FPGA设计基础,用户一定要养成同步设计的习惯。为了帮助工程师们理解这些需求,我们的公众号里面专门有文章,教大家如何编写代码才是一个风格优秀的代码,大家有问题可以公众号里面询问。他们的文章精准的告诉了你的什么样编码风格很重要,并为你提供很多很好的设计实践,将帮助你获得高性能并且提高了器件利用率。

把最重要的事情再总结一下:
每一个Slice都有4个6输入的查找表和8个寄存器。
每个LUT都能够实现一个6输入的组合逻辑功能或者两个5输入的组合逻辑功能。
4个寄存器能够被用作触发器或者锁存器,4个寄存器只能被用作触发器。
每一个Slice都有进位链和复选器(MUXF7和FMUX8)。
MUXF8和FMUX7的输出搭配使用能够组合成13输入逻辑功能或者8输入的复选器。
MUXF8和FMUX7的输出搭配使用能够组合成27输入逻辑功能或者16输入的复选器。
进位链能够被用作来实现快速的加减和比较逻辑。

文章来源:FPGA那点事儿微信公众号