<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > FPGA 101:計算復雜數學(xué)函數

FPGA 101:計算復雜數學(xué)函數

作者: 時(shí)間:2016-10-29 來(lái)源:網(wǎng)絡(luò ) 收藏

由于其靈活性與高性能,已經(jīng)在眾多需要計算復雜數學(xué)題或傳遞的工業(yè)、科研、軍事及其它應用中找到用武之地??量痰木纫笈c計算時(shí)延在更關(guān)鍵的應用中并不少見(jiàn)。

本文引用地址:http://dyxdggzs.com/article/201610/308461.htm

在采用實(shí)現數學(xué)時(shí),工程師一般選擇定點(diǎn)數學(xué)(參見(jiàn):賽靈思中國通訊第80期的《數學(xué)基礎》,http://issuu.com/xcelljournal/ docs/xcell80/44?e=2232228/2002872)。另外,您還可以采用CORDIC等許多算法計算超越(參見(jiàn):賽靈思中國通訊第79期的《如何在FPGA中運用CORDIC算法》,http://china.xilinx.com/ publications/archives/xcel l/Xcell79.pdf)。

不過(guò),在遇到極為復雜的數學(xué)函數時(shí),與在FPGA之中實(shí)現精確需求函數相比,還有更高效的方法進(jìn)行處理。為了理解這些變通方法 – 尤其是其中的多項式近似法,我們首先需要定義相關(guān)問(wèn)題。

設置問(wèn)題

FPGA中負責監控鉑電阻溫度計(PRT)并把PRT電阻轉換成溫度的復雜數學(xué)傳遞函數就是這樣一個(gè)例子。這種轉換一般采用Callendar-Van Dusen方程實(shí)現。通過(guò)以下該方程的簡(jiǎn)化形式,可以確定溫度介于0°C~660°C之間。

image002.gif

式中,R0 為0°C時(shí)的電阻,a 與b 是PRT的系數,而t 則是溫度。

現實(shí)中,我們希望從電阻轉換到溫度。為此,我們需要調整該方程,確保得出的結果是給定電阻下的溫度。大多數采用PRT的系統都會(huì )設計電子裝置、采用電子電路測量PRT的電阻,然后利用FPGA、通過(guò)調整后的下式計算溫度。

image004.gif

在FPGA中實(shí)現此方程即使是經(jīng)驗豐富的FPGA工程師也會(huì )望而卻步。參考溫度繪制所獲得的電阻可以獲得圖1所示圖形。

從圖中可以清晰看出響應的非線(xiàn)性。

image005.png

溫度與電阻

圖1 – 傳遞函數圖

直接在FPGA中實(shí)現調整后的傳遞函數會(huì )在實(shí)際所需設計工作量以及驗證方面面臨著(zhù)巨大挑戰(確保精度以及跨邊界與極端條件函數)。許多工程師會(huì )想方設法實(shí)現函數,以便減少設計與驗證工作量,從而控制項目進(jìn)度。一個(gè)可行的方法是采用查找表保存曲線(xiàn)中的一系列點(diǎn),同時(shí)提供LUT所含點(diǎn)之間的線(xiàn)性插值。

根據相關(guān)精度要求和保存在查找表中的元素數量,這種方法有可能滿(mǎn)足需求。但是,您仍然需要在設計中包含線(xiàn)性插值函數。此函數在數學(xué)上非常復雜,而且往往包含一個(gè)非二次冪除法,其會(huì )進(jìn)一步增加復雜性。

利用FPGA資源

相反,您還可以利用另一種方法實(shí)現此類(lèi)傳遞函數,那就是利用FPGA的本身特性。賽靈思 Spartan-6與7系列Artix、Kintex與Virtex等新型FPGA不僅僅只包含傳統查找表和觸發(fā)器,還具有內置DSP Slice、Block RAM、分布式RAM、PCIe®等眾多高級IP硬核以及以太網(wǎng)端點(diǎn)、高速串行鏈路等。

由于其提供的48位累加器,工程師通常把DSP Slice稱(chēng)為DSP48s。不過(guò),這些Slice還提供25 x 18位寬乘法器、加/減功能以及眾多其它功能。您可以利用這些內部RAM結構和DSP Slice更輕松實(shí)現傳遞函數。

多項式近似法

利用FPGA具有豐富DSP與RAM的結構的一種方法是多項式近似法。為了使用此方法,您必須首先繪出數學(xué)函數圖,在MATLAB或Excel等數學(xué)程序中涵蓋輸入值范圍。然后您可以在相關(guān)數據集中添加多項式趨勢線(xiàn),然后可以在FPGA中實(shí)現該趨勢線(xiàn)的等式,以取代復雜數學(xué)函數,只要趨勢線(xiàn)等式符合精度要求。

如果一個(gè)多項式方程無(wú)法針對整個(gè)傳遞函數輸入范圍提供足夠精度,則可以添加更多方程。只要生成一系列在相關(guān)輸入范圍使用的多項式常數,您就能夠繼續依賴(lài)此方法。

能夠添加多項式趨勢線(xiàn)的數學(xué)程序大部分都允許您選擇階次或多項式項的數量。階次越高,則配合越準確——但是您需要在FPGA中實(shí)現更多的項。在針對傳遞函數示例實(shí)施此過(guò)程時(shí),我們是采用Microsoft Excel,我們已經(jīng)獲得了圖2所示趨勢線(xiàn)與等式。本例中采用4次多項式方程。

在獲得了適合我們希望實(shí)現的傳遞函數的多項式之后,我們可以采用相同分析工具(在本例中為Excel)針對原始傳遞函數仔細檢查精度。在所述監控溫度的例子中,最終測量精度可能會(huì )是+/-1C,這并非苛刻的精度要求。盡管如此,根據測量范圍和您實(shí)現的傳遞函數,可能證實(shí)仍然很難僅用一個(gè)多項式方程實(shí)現。我們該如何解決這個(gè)問(wèn)題呢?

根據輸入值選擇的多條趨勢線(xiàn)

如果一個(gè)多項式方程無(wú)法針對整個(gè)傳遞函數輸入范圍提供足夠精度,則可以添加更多方程。只要生成一系列在相關(guān)輸入范圍使用的多項式常數,您就能夠繼續使用此方法。因此,一旦輸入值超出特定范圍,則加載一個(gè)新的常數集合。

image007.png

圖2 – 用于溫度傳遞函數的趨勢線(xiàn)與多項式方程

image009.png

聚焦溫度與電阻

圖3 – 可提供更準確結果的269C~300C繪圖

下面繼續探討溫度例子,第一個(gè)多項式方程可以在0C~268C范圍內提供+/-1C的精度。對于許多應用此精度已經(jīng)足夠。假設我們需要達到300C的更廣泛運行范圍與容差,則意味著(zhù)我們最初的方法無(wú)法滿(mǎn)足設計要求。利用分段方法我們能夠解決上述問(wèn)題,即繪出269C~300C范圍的圖形并且獲得能夠為此輸出范圍提供更高精度的不同多項式方程(見(jiàn)圖3)。

總之,此實(shí)現方法采用第一套多項式常數,直到輸入值超出與268C對應的預先計算范圍。超出該范圍之后則采用第二套常數保持精度要求。

這樣您就能夠把傳遞函數分為一系列片段,以便達到預期精度。您可以選擇跨傳遞函數均勻分隔這些片段,也就是說(shuō),可以把它們分為均等于X的10分段。另外,您也可以不均勻分隔,而是按實(shí)現所需精度的要求進(jìn)行分段,集中精力關(guān)注較難達到精度的傳遞函數部分。

就決定您實(shí)現方案時(shí)需要考慮的利弊權衡而言,應當牢記的是均勻方法比非均勻方法會(huì )占用更大的內存空間。根據您所實(shí)現的傳遞函數,采用非均勻方法可能會(huì )節省大量資源。

如何對比?

當然,如前所述,其它方法也可以用于實(shí)現傳遞函數。多項式近似法之外最常用的四種方法分別是軟件程序、查找表、帶插值的查找表以及CORDIC。

由于需要添加處理器(會(huì )相應增加設計復雜性、材料清單成本等),采用軟件計算傳遞函數會(huì )使系統架構復雜化。即使設計團隊采用賽靈思Zynq-7000 All Programmable SoC等片上系統彌補上述缺陷,仍然會(huì )存在難題。對新手而言,用軟件計算傳遞函數比在邏輯電路中實(shí)現需要花費多得多的時(shí)間,從而會(huì )降低系統響應時(shí)間。事實(shí)上,傳遞函數(諸如我們示例設計中所用的)的計算是一個(gè)典型的例子,應該由Zynq SoC可編程邏輯端負責處理。

第二種方法(即采用含有輸入預算值的查找表)的效果隨輸入值范圍與寬度變化而改變。有時(shí)會(huì )很快造成非常龐大的LUT,其會(huì )占用FPGA內部大量的RAM容量。根據相關(guān)FPGA,此方法可能需要的資源供不應求,也有可能造成與設計中其它模塊竟用資源。當然,這種方法的有利之處是能夠很快算出結果。

第三種潛在方法(帶插值的查找表)是我們前面談到過(guò)的一種方法,它試圖減少整套LUT方法所需的內存位置數量。此方法需要工程師在FPGA內編寫(xiě)線(xiàn)性插值函數,而這項工作多少有點(diǎn)棘手。不過(guò),它仍然比CORDIC這個(gè)最后選項簡(jiǎn)單得多。

CORDIC算法能夠實(shí)現超越函數,如:正弦、余弦、乘法、除法、平方根等。因此,利用CORDIC算法與基本數學(xué)模塊的組合能夠準確實(shí)現傳遞函數。此方法可以實(shí)現更高精度。但是,對于復雜的傳遞函數,這種好處需要付出增加設計與驗證時(shí)間的代價(jià)。當然這對采用該方法實(shí)現的器件的工作頻率會(huì )有影響。

因此,多項式近似法是四種備選方案的折中,其能夠很好地平衡性能、精度與實(shí)現資源占用。

實(shí)現簡(jiǎn)便性

每位工程師都希望創(chuàng )造出能夠最佳利益器件資源的FPGA。多項式近似法使您能夠受益于FPGA提供的豐富乘法器與RAM環(huán)境,同時(shí)能夠利用這些資源輕松實(shí)現看似極其復雜的數學(xué)傳遞函數。



關(guān)鍵詞: FPGA 函數

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>