运用SAD算法降低FPGA资源利用率 - FPGA/ASIC技术 -
基于FPGA的设计,需要仔细检查设计所占用的面积以及实施后的时序性能,以确保设计适合目标元件,并满足其时序或吞吐力要求。在基于FPGA的商用设计中,设计师通常会将查找表(LUT)的资源占用率上限设置为80%左右,以便为未来升级和功能改进留有资源,并可让时序收敛更容易。余下约20%的空閒LUT留下了空余的佈线资源,有助于满足严格的时序约束。
在设计中,FPGA结构裡嵌入的逻辑越多,占用的佈线资源就会越多。合成工具或许能将更多逻辑成功地映射到LUT和其它资源,但很可能无法在二者之间佈线。因为现有的逻辑已经显着提高了互连使用率,已经没有端到端路径来路由更多连接的讯号。即使可能存在佈线空间,佈线器也无法对其设立端到端连接。因此,虽然有可用的LUT资源,但设计受到了‘互连限制’,所以有可能无法进行扩展。
减少设计面积还具有经济意义。在符合应用要求的情况下,FPGA元件越小,设计和生产成本则越低。当然,如果有乙太网路模组、嵌入式处理器或收发器等特殊需求,就需要选择能透过硬IP或软IP支援这些模组的FPGA。不过在设计中,减少其它元件的使用面积,仍有助于从支援这类特殊模组的FPGA系列中进行选择。
资源共享
资源共享是一种在保持功能性的同时减少面积或资源占用率的传统方法。其中包括透过将一个以上的运算映射到一个运算器,实现算术运算器(如加法器、乘法器等)的共享。例如,共享后3个加法器可执行6个而不是3个加运算,使用的加法器数量减少了一半,因而减少了资源占用率。透过Xilinx ISE软体,可以在合成属性对话框中开启相应开关(resource sharing)后进行资源共享。当在一个if-else程式块(图1)或case-endcase程式(图2)中描述互斥的任务后,这些工具能检测并实施资源共享。

图1:if-else程式块。

图2:case-endcase程式块。
如图所示,这些任务都是互斥的。因此,启用资源共享后,8个加运算可以共享两个加号。这类资源共享依赖于鉴别暂存器传输级(RTL)设计中可能存在的互斥任务。然而,如果不存在互斥任务,资源应该如何共享?这样做又有何利弊?为了回答这个问题,下面将从更高层次的抽象概念对资源共享进行深入研究。