基于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)设计中可能存在的互斥任务。然而,如果不存在互斥任务,资源应该如何共享?这样做又有何利弊?为了回答这个问题,下面将从更高层次的抽象概念对资源共享进行深入研究。 比RTL更胜一筹 ‘更高层次的抽象概念’是指比RTL更高等级的设计描述,可在RTL準备好前对要实施的应用进行分析。如果可以透过分析应用来了解其内在平行性,则在RTL设计中也可以这样做。此外,对应用的数据流程图进行分析有助于设计资源共享的实施。 数据流程图能提供关于应用数据串流的资讯。数据从一个运算流向另一个运算,因此在运算之间可能存在着数据依赖关係。不相互依赖的运算可以平行执行。不过平行执行几乎总是造成很高的资源占用率,而目标是降低资源占用率,所以暂不讨论平行执行这种模式。 下面将以绝对差值和(SAD)演算法为例,介绍如何从比RTL更高层次的抽象层分析资源共享,让资源占用率比依赖RTL设计中的互斥任务的方法更低。 SAD是MPEG-4解码器动作估计部份中的一种重要演算法,也能用于物体识别。在这种以画素为基础的方法中,影像区块中每个画素的值都与另一幅影像中相应画素的值相减,以确定该影像的哪些部份从一讯框移到了另一讯框。如果影像区块大小为4x4,则最后会将全部16个绝对差值相加。在开源xvid解码器的sad.c文件末尾有程式码示例。 图3显示了用这一演算法处理一个4x4影像区块时的数据流程图(DFG)。这些减法运算可以平行,因为其中的减法运算不依赖于其它任何减法运算。但由于目的在于降低资源占用率,所以并不採用平行执行模式。而是採用一种称为基于扩展相容路径(ECPB)硬体整合的资源分配和整合演算法。 图3:SAD演算法的数据流图。 资源的分配和整合主要是指为DFG中的运算分配加号、乘号等资源,然后将这些资源整合到运算,以便降低元件的资源占用率、提高最大时脉频率,或同时实现两者。塬则是在最终设计符合功能限制的前提下缩小面积。此演算法可以检测已调度的DFG(即其运算已在不同步骤或时脉週期中进行了调度)中各运算间流程的依存关係,并分析出运算内部(intra-operation)流程的依存关係。 此演算法将可平行的运算调度在同一时间步骤中,并将需要依赖于其它运算数据的运算调度到不同的时间步骤中。它为已调度DFG中的每种运算都设立了一个加权的有序相容图(WOCG)。因此,减法运算有一个WOCG,加法运算则有另外一个WOCG。这种方法使用了加权关係Wij =1+α×Fij +β×Nij +y ×Rij来为WOCG中的各边(edges)分配权重。在这裡,Wij即同类型的i和j运算之间的权重值。Fij是流程依存关係的权重值,而Nij是运算i和j之间的共模输入数量。如果运算i和j的输出结果可以存入同一个暂存器,则Rji的值为1,否则即为0。在本例中,将调整参数α、β和γ的值分别设为1、1和2。 接下来的步骤是用最长路径演算法找出WOCG中使用的最长路径。该最长路径中的全部运算都被映射到同一运算器。将整合运算从WOCG中移除后,重复最长路径和映射流程,直到处理完所有WOCG。由于这种演算法会将多个运算映射到同一资源或运算器,所以运算器的容量相当大,足以满足最大规模的运算。在实施SAD方法的例子中,8位元数据(灰度影像)处理了全部减法运算,因此,减法运算器的输入宽度是8位元。我们将负责迴圈运算SAD和的累加运算器位元宽设定为23位元和8位元。 图4显示了实施的SAD演算法的数据路径。在这个设计中只使用了一个减法器和一个加法器/累加器。各个运算之间有着非常多的资源共享。如果直接在RTL行为层描述设计,这种资源共享将不可能实现,因为SAD演算法中不存在互斥的任务。产生这个数据路径后,可用加法器、减法器和乘法器模组分层实施设计。这一包含模组实例化的实施方法比行为化的方法结构更为明晰,并且与后者的数据路径非常相似。 图4:採用SAD演算法的数据路径。 在以数据为主导的大型应用中,在更高层次进行此类预处理有助于降低资源占用率。此外,这种方法也很容易实现自动化。 为了比较ECPB演算法产生的数据路径获得的实体合成结果,我们还进行了一次完全平行的实施,两次与图4中的数据路径相同的实施。后两次是无层次的行为设计,最终RTL描述没有分层,包含引起再使用的‘强制’互斥任务。‘强制’是指实施与图4中相同的数据路径,但採用了包含互斥任务的行为描述。其中一种设计具有if-else结构,另一种具有case-endcase结构。表1展示了使用Xilinx ISE 12.2(M.63C)软体默认设置、以Virtex-4XC4VFX140-11FF1517为目标元件,且没有时间限制的情况下获得的后时序(post-place-and-route)结果。内部暂存器也进行了相应的初始化,所有实施过程中都没有重置。 表1:结果对比(RS和NRS分别表示已启用或禁用资源共享的情况)。 在这个表格中,RS和NRS分别表示在Xilinx ISE已启用或禁用资源共享的情况。设计方案I和II是因为不同的合成工具可以从不同格式的HDL程式码(if-else、case-end-case)中推论出不同的再使用类型。时脉週期没有考虑抖动的情况,所以应该根据时脉源规格降低一定数量。同时,任何方案都未使用预处理暂存器进行输入。 资源节省 如表所示, LUT消耗显着降低,最高可达56%,最少也有20%。不过,资源共享与完全平行的实施方法不同,后者的数据样本大体上在每个时脉週期都可用,而资源共享使用数据样本处理的过程会有一些限制。由于资源被共享,只有在前一份数据样本部份或完全处理后,才能处理新的数据样本。在ECPB实施中,新的P和R系列值至少要在16个时脉週期后才能使用。 虽然这一技术不是任何地方都适用,但它非常适合运用在类似採样率(sample rate)的应用中。例如,ECPB设计能够轻鬆地在1.016毫秒内处理一个尺寸为720x576的DV-PAL讯框,而不会对25讯框/秒的PAL讯框速率产生任何影响。
|