我们先看一个FPGA工程的编译结果报告:
在这个报告中,我们可以看到如下信息:
Total logic elements 24071/24624(98%): 该芯片中共有24624个LE资源,其中的98%在这个工程的这次编译中得到了使用。
Total combinational funcTIons 21612/24624(88%): 该芯片的24624个LE资源中,88%用于实现组合逻辑。
Dedicated logic registers 8858/24624(36%): 该芯片的24624个LE资源中,36%用于实现寄存器,即时序逻辑。
就是从上述信息中,我得到了组合逻辑与时序逻辑的使用比例——21612/8858 = 2.4:1。
二、一份更详细的资源利用率报告
在这个报告中,有一点可能会令人困惑:为什么Total combinaTIonal funcTIons与Dedicated logic registers之和(30470)大于Total logic elements(24071),甚至大于该芯片的总资源(24624)。我们再来看一份更详细的资源使用报告——Fitter Resource Usage Summary:
这份报告包含很多信息,在这里我们只需要关心Total logic elements一项。Total logic elements 24071/24624(98%)由三种使用情况不同的LE资源组成:仅用于实现组合逻辑的LE(Combinational with no register 15213),仅用于实现时序逻辑的LE(Register only 2459),同时用于实现组合逻辑和时序逻辑的LE(Combinational with a register 6399)。
三、从Resource Property Editor看LE的使用情况
在进一步分析这些数据之前,我们有必要回顾一下FPGA的基本组成元素LE(Logic Element)的结构和功能。以Altera的Cyclone III系列FPGA芯片为例,其LE内部结构如下图所示:
这个LE同时用于实现组合逻辑和时序逻辑,其中蓝色部分为组合逻辑(一个4输入LUT),其中黄色高亮部分为时序逻辑(一个D触发器)。 我们再来看一个更有趣的LE:
这个LE也同时用于实现组合逻辑和时序逻辑,与上一幅图不同的地方在于,这里的组合逻辑(4输入LUT)与时序逻辑(REG)并没有连接关系。组合逻辑从COMBOUT直接输出,时序逻辑从REGOUT输出。这种互不相关的组合逻辑与时序逻辑共用同一个LE的情况很特殊,这是采用了Register Packing资源优化威廉希尔官方网站
之后的实现方式。如果没有采用这一资源优化威廉希尔官方网站
,就要用两个LE来分别实现相应的组合逻辑和时序逻辑。
明白了上面这两幅图,大家也能由此类推,想象出仅用于实现组合逻辑的LE(Combinational with no register)和仅用于实现时序逻辑的LE(Register only)该是什么样子。