因为其灵活性与高功能,FPGA现已在很多需求核算杂乱数学题或传递函数的工业、科研、军事及其它运用中找到用武之地。严苛的精度要求与核算时延在更要害的运用中并不罕见。
在选用FPGA完成数学函数时,工程师一般挑选定点数学(拜见:赛灵思我国通讯第80期的《FPGA数学根底》,http://issuu.com/xcelljournal/ docs/xcell80/44?e=2232228/2002872)。别的,您还可以选用CORDIC等许多算法核算逾越函数(拜见:赛灵思我国通讯第79期的《如安在FPGA中运用CORDIC算法》,http://china.xilinx.com/ publications/archives/xcel l/Xcell79.pdf)。
不过,在遇到极为杂乱的数学函数时,与在FPGA之中完成精确需求函数比较,还有更高效的办法进行处理。为了了解这些变通办法 – 尤其是其间的多项式近似法,咱们首要需求界说相关问题。
设置问题
FPGA中担任监控铂电阻温度计(PRT)并把PRT电阻转化成温度的杂乱数学传递函数便是这样一个比如。这种转化一般选用Callendar-Van Dusen方程完成。经过以下该方程的简化方式,可以确认温度介于0°C~660°C之间。
式中,R0 为0°C时的电阻,a 与b 是PRT的系数,而t 则是温度。
实践中,咱们期望从电阻转化到温度。为此,咱们需求调整该方程,保证得出的成果是给定电阻下的温度。大多数选用PRT的体系都会规划电子设备、选用电子电路丈量PRT的电阻,然后运用FPGA、经过调整后的下式核算温度。
在FPGA中完成此方程即便是经验丰厚的FPGA工程师也会望而生畏。参阅温度制作所取得的电阻可以取得图1所示图形。
从图中可以明晰看出呼应的非线性。
温度与电阻
图1 – 传递函数图
直接在FPGA中完成调整后的传递函数会在实践所需规划作业量以及验证方面面临着巨大应战(保证精度以及跨鸿沟与极点条件函数)。许多工程师会想方设法完成函数,以便削减规划与验证作业量,然后操控项目进展。一个可行的办法是选用查找表保存曲线中的一系列点,一起供给LUT所含点之间的线性插值。
依据相关精度要求和保存在查找表中的元素数量,这种办法有或许满意需求。可是,您依然需求在规划中包括线性插值函数。此函数在数学上十分杂乱,而且往往包括一个非二次幂除法,其会进一步添加杂乱性。
运用FPGA资源
相反,您还可以运用另一种办法完成此类传递函数,那便是运用FPGA的自身特性。赛灵思 Spartan-6与7系列Artix、Kintex与Virtex等新式FPGA不只仅只包括传统查找表和触发器,还具有内置DSP Slice、Block RAM、分布式RAM、PCIe®等很多高档IP硬核以及以太网端点、高速串行链路等。
因为其供给的48位累加器,工程师一般把DSP Slice称为DSP48s。不过,这些Slice还供给25 x 18位宽乘法器、加/减功用以及很多其它功用。您可以运用这些内部RAM结构和DSP Slice更轻松完成传递函数。
多项式近似法
运用FPGA具有丰厚DSP与RAM的结构的一种办法是多项式近似法。为了运用此办法,您有必要首要绘出数学函数图,在MATLAB或Excel等数学程序中包括输入值规模。然后您可以在相关数据会集添加多项式趋势线,然后可以在FPGA中完成该趋势线的等式,以替代杂乱数学函数,只需趋势线等式契合精度要求。
假如一个多项式方程无法针对整个传递函数输入规模供给满意精度,则可以添加更多方程。只需生成一系列在相关输入规模运用的多项式常数,您就可以持续依靠此办法。
可以添加多项式趋势线的数学程序大部分都答应您挑选阶次或多项式项的数量。阶次越高,则合作越精确——可是您需求在FPGA中完成更多的项。在针对传递函数示例施行此进程时,咱们是选用Microsoft Excel,咱们现已取得了图2所示趋势线与等式。本例中选用4次多项式方程。
在取得了合适咱们期望完成的传递函数的多项式之后,咱们可以选用相同剖析东西(在本例中为Excel)针对原始传递函数仔细检查精度。在所述监控温度的比如中,终究丈量精度或许会是+/-1C,这并非严苛的精度要求。尽管如此,依据丈量规模和您完成的传递函数,或许证明依然很难仅用一个多项式方程完成。咱们该怎么处理这个问题呢?
依据输入值挑选的多条趋势线
假如一个多项式方程无法针对整个传递函数输入规模供给满意精度,则可以添加更多方程。只需生成一系列在相关输入规模运用的多项式常数,您就可以持续运用此办法。因而,一旦输入值超出特定规模,则加载一个新的常数调集。
图2 – 用于温度传递函数的趋势线与多项式方程
聚集温度与电阻
图3 – 可供给更精确成果的269C~300C绘图
下面持续讨论温度比如,第一个多项式方程可以在0C~268C规模内供给+/-1C的精度。关于许多运用此精度现已满意。假定咱们需求到达300C的更广泛运转规模与容差,则意味着咱们开始的办法无法满意规划要求。运用分段办法咱们可以处理上述问题,即绘出269C~300C规模的图形而且取得可以为此输出规模供给更高精度的不同多项式方程(见图3)。
总归,此完成办法选用第一套多项式常数,直到输入值超出与268C对应的预先核算规模。超出该规模之后则选用第二套常数坚持精度要求。
这样您就可以把传递函数分为一系列片段,以便到达预期精度。您可以挑选跨传递函数均匀分隔这些片段,也便是说,可以把它们分为均等于X的10分段。别的,您也可以不均匀分隔,而是按完成所需精度的要求进行分段,会集精力重视较难到达精度的传递函数部分。
就决议您完成计划时需求考虑的利害权衡而言,应当紧记的是均匀办法比非均匀办法会占用更大的内存空间。依据您所完成的传递函数,选用非均匀办法或许会节约很多资源。
怎么比照?
当然,如前所述,其它办法也可以用于完成传递函数。多项式近似法之外最常用的四种办法分别是软件程序、查找表、带插值的查找表以及CORDIC。
因为需求添加处理器(会相应添加规划杂乱性、资料清单本钱等),选用软件核算传递函数会使体系架构杂乱化。即便规划团队选用赛灵思Zynq-7000 All Programmable SoC等片上体系补偿上述缺点,依然会存在难题。对新手而言,用软件核算传递函数比在逻辑电路中完成需求花费多得多的时刻,然后会下降体系呼应时刻。事实上,传递函数(比如咱们示例规划中所用的)的核算是一个典型的比如,应该由Zynq SoC可编程逻辑端担任处理。
第二种办法(即选用含有输入预算值的查找表)的作用随输入值规模与宽度改动而改动。有时会很快形成十分巨大的LUT,其会占用FPGA内部很多的RAM容量。依据相关FPGA,此办法或许需求的资源求过于供,也有或许形成与规划中其它模块竟用资源。当然,这种办法的有利之处是可以很快算出成果。
第三种潜在办法(带插值的查找表)是咱们前面谈到过的一种办法,它企图削减整套LUT办法所需的内存方位数量。此办法需求工程师在FPGA内编写线性插值函数,而这项作业多少有点扎手。不过,它依然比CORDIC这个最终选项简略得多。
CORDIC算法可以完成逾越函数,如:正弦、余弦、乘法、除法、平方根等。因而,运用CORD%&&&&&%算法与根本数学模块的组合可以精确完成传递函数。此办法可以完成更高精度。可是,关于杂乱的传递函数,这种优点需求支付添加规划与验证时刻的价值。当然这对选用该办法完成的器材的作业频率会有影响。
因而,多项式近似法是四种备选计划的折中,其可以很好地平衡功能、精度与完成资源占用。
完成简便性
每位工程师都期望创造出可以最佳利益器材资源的FPGA。多项式近似法使您可以获益于FPGA供给的丰厚乘法器与RAM环境,一起可以运用这些资源轻松完成看似极端杂乱的数学传递函数。