【读书笔记】高级FPGA设计之面积结构设计

【读书笔记】高级FPGA设计之面积结构设计 目录面积结构设计折叠流水线基于控制的逻辑复用资源共享复位对面积的影响无复位的资源无置位的资源无同步复位的资源复位 RAM利用置位/复位触发器引脚总结面积结构设计本篇讨论数字设计的三个主要物理特性的第二个面积。并分析在FPGA中结构的面积优化方法。针对面积的优化是尽可能复用逻辑资源以速度为代价。为此经常要求一个递归的数据流其中一级的输出反馈到输人端进行类似的处理这可以是简单的环路随着算法自然地流动或者逻辑复用可能是复杂的并要求专门的控制。这节描述这两种技术也根据性能损失描述必要的结论。介绍以下内容在计算的不同级中为复用逻辑资源折叠流水线当不存在自然的流程时控制对逻辑复用的管理在不同的功能操作中共享逻辑资源复位对面积优化的影响缺少复位能力对FPGA资源的影响。缺少置位能力对FPGA资源的影响。缺少异步复位能力对FPGA资源的影响。RAM复位的影响。为逻辑实现优化利用置位/复位引脚。折叠流水线折叠流水线的设计方法和流水线设计恰好相反流水线的设计思想是以面积换速度而折叠流水线的思想是以速度换面积。折叠流水线可以优化在流水线级复制逻辑的流水线设计的面积。举个例子两个8位宽的数相乘如果直接用*进行相乘运算这样可以在一个时钟周期得到结果但是在这一个时钟周期逻辑链拉的特别场在之前可以用流水线设计的思想对其进行流水设计但是需要花费大量的中间寄存器资源这里考虑折叠流水线假设乘数分别为A和B在计算时每个时钟周期根据B的每一位对A进行移位相加这样计算两个8位宽的乘法需要8个时钟周期但是却减小了资源的使用在这个设计中只需要少量的寄存器和一个加法器即可。优点减少逻辑资源的使用减小面积减小两寄存器之间的逻辑延时优化了时序缺点减低了计算速度计算单个结果需要花费多个时钟周期基于控制的逻辑复用共享逻辑资源有时要求专门的控制电路来决定哪些元件是到特定结构的输入。前一节描述了简单地对每个寄存器的位移位的乘法器其中每个寄存器总是专用于运行加法器的特定输人。它有一个天然的数据流使其本身适合逻辑复用。在其他应用中常常对资源的输人有更复杂的变化为了复用逻辑某些控制可能是必须的。当共享逻辑比控制逻辑更大时控制可以直接用来逻辑复用。为了确定这个变化可以要求一个状态机作为附加的输人加到逻辑。上面的说法理解起来很费解说人话就是当连续做某种运算时每次完成后会有标志信号产生这个标志信号作为控制下次运算的起始控制信号就可以逻辑复用。举个例子在进行三个乘法运算并相加XA*BC*DE*F可以定义一个乘法IP进行调用每次乘法运算完成后会有 done 信号指示运算完成这是下一个乘法运算可以以这个done信号作为起始信号开始进行下一个乘法运算以此类推下一个乘法运算也可以这么操作这样在控制信号上就使用了同一个 done 信号也就是上面所谓的控制的逻辑复用。资源共享当利用术语资源共享时不是指由FPGA的布局和布线工具执行的低层次优化而是指高层次的结构资源共享其中不同的资源在横跨不同的功能范围内共享。只要有功能块可以在设计的其他部分或者甚至在不同的模块利用就可以利用这类资源共享。举个例子比如在不同模块都需要使用计数器A模块需要计数器为8位宽的B模块需要计数器为16位宽的这时可以只定义一个位宽为16的计数器其中计数器的[7:0]作为模块A的计数器整个计数器可以作为模块B的计数器。这样可以减小定义计数器的资源消耗达到资源共享的目的。复位对面积的影响不正确的复位策略会导致浪费过多资源。下面的几节描述许多不同的情况其中复位在速度/面积特性中可以起重要的作用以及如何进行相应的优化。无复位的资源使用了同步复位和没有使用复位的设计综合出的资源消耗结果差别很大含有复位会消耗更多资源但是在一般的设计当中复位设计是必不可少的。无置位的资源下面是使用置位的代码得到的资源消耗和复位设计相比较。可以看出置位所消耗的逻辑资源远远大于复位消耗的资源因此在设计中非必要不设计置位。无同步复位的资源下面是使用了异步复位的设计方法和同步复位作比较。可以看出异步复位所消耗的逻辑资源远远大于同步复位消耗的资源异步复位和同步复位有各自的优缺点但是一般建议使用异步复位。复位 RAM在许多FPGA内置的RAM资源中有复位的资源但是类似于上一节中描述的DSP资源常常只有同步复位是有效的。企图对RAM模块实现异步复位可能是面积优化的大变动因为除了较小的RAM资源之外没有更小的元件可以最佳地构造RAM 综合工具也不能轻易地添加几个门到输出端来仿真这个功能。复位RAM通常是欠佳的设计实践特别当复位还是异步的。在上面的代码中再一次只考虑的变化是复位的类型同步与异步。例如在Xilinx的Virtex-4器件中块RAM元件只有同步复位所以采用同步复位综合工具能够用单个块RAM实现这个代码如图2-9所示。但是当用异步复位实现上面代码例子表示的相同RAM,综合工具将被迫使用较小的DRAM模块来产生相应尺寸的RAM模块附加译码逻辑来产生合适尺寸的RAM附加逻辑来实现异步复位如图所示。最后实现的差别是惊人的见表2-4。利用置位/复位触发器引脚大多数FPGA厂商有各种触发器元件在任何给定的器件中可用并给定特定的逻辑功能综合工具常常可以利用置位和复位引脚来实现逻辑形式减少查找表的负荷。例如考虑图2-11,在这个案例中综合工具可能选择利用触发器的置位引脚实现逻辑如图1-12所示。这样去除了门增加了数据通道的速度。另外考虑图2-13中所示形式的逻辑功能把输入信号加到触发器的复位引脚就可以将与门去除如图2-14所示。利用置位/复位可能阻止一些组合逻辑的优化。这里iDat3输人获得类似于有关触发器上复位引脚的特权。因此逻辑功能可以如图2-17所示被实现。在这个电路中有3个逻辑操作(取反、与和或)全部用单个触发器和无查找表实现。因为这些优化不总是在设计被构造的时候所认识当面积是考虑的关键时只要有可能应避免利用置位和复位。当面积是考虑的关键时尽可能避免利用置位和复位。总结折叠流水线可以优化在流水线级复制逻辑的流水线设计的面积。当共享逻辑比控制逻辑更大时控制可以直接用来逻辑复用。对于面积是主要要求的紧凑设计搜索在其他模块中有类似计数部件的资源可以把他们放到层次上的全局位置在多个功能范围之间共享。不正确的复位策略可以产生不必要的面积大的设计和抑制一些面积优化。优化的FPGA资源在不相容的复位分配到它时将不被利用但利用一般的元件实现其功能将占用更多的面积。DSPs和其他多功能资源一般对复位策略的变化是不灵活的。不正确地复位一个RAM可能对面积有惊人的影响。利用置位/复位可能阻止一些组合逻辑的优化。当面积是考虑的关键时尽可能避免利用置位和复位。在数字设计中速度和面积是相斥的既快面积又小的设计是不可能的因此需要根据实际情况进行相应的取舍。