在FPGA或ASICS中實現(xiàn)浮點(diǎn)算法
浮點(diǎn)是最受歡迎的數(shù)據(jù)類型,可以保證算法建模和仿真的高精度計算。傳統(tǒng)上,當(dāng)您想將這些浮點(diǎn)算法部署到FPGA或ASIC硬件時,您的唯一選擇是將算法中的每一個數(shù)據(jù)類型轉(zhuǎn)換為固定點(diǎn),以節(jié)約硬件資源并加速計算。轉(zhuǎn)換到固定點(diǎn)降低了數(shù)學(xué)精度,有時在轉(zhuǎn)換過程中在數(shù)據(jù)類型的字?jǐn)?shù)長度和數(shù)學(xué)精度之間實現(xiàn)正確的平衡是很困難的。對于需要高動態(tài)范圍或高精度的計算(例如設(shè)計有反饋環(huán)),定點(diǎn)轉(zhuǎn)換可能需要幾個星期或幾個月的工程時間。另外,為了達(dá)到數(shù)字精確度,設(shè)計師必須使用大的固定字形。
在本文中,我們將介紹數(shù)學(xué)作品?固有浮點(diǎn) 應(yīng)用ir濾波器設(shè)計ASIC/FPGA的工作流程。然后,我們將回顧使用固定點(diǎn)的挑戰(zhàn),我們將比較使用單精度浮點(diǎn)和頻率權(quán)衡。固定地點(diǎn)。我們還將展示浮點(diǎn)和固定點(diǎn)的組合如何在減少實際設(shè)計中的轉(zhuǎn)換和實現(xiàn)時間的同時,給您提供更高的精度。您將看到直接在浮點(diǎn)建模是如何重要的,以及它如何在具有高動態(tài)范圍要求的現(xiàn)實世界設(shè)計中顯著減少面積和提高速度,這與人們普遍認(rèn)為固定點(diǎn)總是比浮點(diǎn)更有效的想法相反。
本地浮點(diǎn)實現(xiàn):在引擎蓋下
HDL編碼器 實現(xiàn)了單精度算法,模擬的基礎(chǔ)數(shù)學(xué)在FPGA或ASIC資源(圖1)。生成的邏輯將輸入浮點(diǎn)信號解成符號、指數(shù)和尾數(shù)--分別為1、8和23位寬的單個整數(shù)。
圖1hdl編碼器如何映射一個單精度浮點(diǎn)乘法到定點(diǎn)硬件資源
生成的vhdl或Viilog邏輯然后執(zhí)行浮點(diǎn)計算(圖1所示情況下的乘法),方法是計算出由輸入符號位產(chǎn)生的符號位、數(shù)量乘法,以及計算結(jié)果所需的指數(shù)和相應(yīng)的規(guī)范化。邏輯的最后一個階段將符號、指數(shù)和尾數(shù)打包回浮點(diǎn)數(shù)據(jù)類型。
解決固定點(diǎn)轉(zhuǎn)換的動態(tài)范圍問題
一個簡單的表達(dá)式,如(1-A)/(1+A),如果需要在高動態(tài)范圍內(nèi)實現(xiàn),可以通過使用單精度浮點(diǎn)自然地進(jìn)行翻譯(圖2)。
Figure 2. Single-precision implementation of (1-a)/(1+a)
然而,在定點(diǎn)上實現(xiàn)同一方程需要許多步驟和數(shù)字考慮(圖3)。
Figure 3. Fixed-point implementation of (1-a)/(1+a)
例如,您必須將除法分為乘法和互易,使用近似方法,如牛頓-拉弗森或LUT(查找表)進(jìn)行非線性的互變運(yùn)算,使用不同的數(shù)據(jù)類型來仔細(xì)控制比特的生長,選擇適當(dāng)?shù)姆肿雍头帜割愋?并使用特定的輸出類型和蓄電池類型來進(jìn)行擴(kuò)展和減數(shù)。
探討綜合投資報告執(zhí)行備選方案
讓我們來看看一個無限脈沖響應(yīng)濾波器的例子。一個ir濾波器需要高動態(tài)范圍的計算與反饋環(huán),使它難以收斂在一個固定點(diǎn)量化。圖4A顯示了一個測試環(huán)境,該測試環(huán)境比較了三個版本的同一個IRR濾波器和一個噪聲的正弦波輸入。正弦波的幅值為1,增加的噪聲使幅值略有增加.
圖4A三個帶噪聲正弦波輸入的ir濾波器的實現(xiàn)
該濾波器的第一個版本是雙精度(圖4B)。第二個版本是單精度的。第三個版本是固定點(diǎn)實現(xiàn)(圖4c)。這個實現(xiàn)的結(jié)果是數(shù)據(jù)類型最多可達(dá)22位,其中一個位分配給符號,21位分配給分?jǐn)?shù)。這個特定的數(shù)據(jù)類型留下0位來表示整數(shù)值,這是合理的,因為給定的刺激,它的值范圍總是在-1和1之間。如果設(shè)計必須使用不同的輸入值,則需要在定點(diǎn)量化時考慮到這一點(diǎn)。
圖4BIir_篩選器實現(xiàn),用雙重精確數(shù)據(jù)類型顯示圖4c使用固定點(diǎn)數(shù)據(jù)類型的Iir_菲爾特_固定執(zhí)行
建立了測試環(huán)境,以比較單精度和定點(diǎn)濾波器的結(jié)果與被認(rèn)為是黃金參考的雙精度濾波器。在這兩種情況下,精度的損失都會產(chǎn)生一定的誤差.問題是,該錯誤是否在我們應(yīng)用程序的可接受容忍范圍內(nèi)。
當(dāng)我們跑的時候?固定點(diǎn)設(shè)計師 為了執(zhí)行轉(zhuǎn)換,我們指定了1%的誤差公差.圖5顯示了比較結(jié)果。單精密版的誤差在10左右。 -8 ,而定點(diǎn)數(shù)據(jù)類型的錯誤約為10 -5 .這在我們指定的誤差范圍內(nèi).如果您的應(yīng)用程序需要更高的精確度,您可能需要增加固定的單詞長度。
圖5模擬結(jié)果比較了雙精度IRR濾波器結(jié)果與單精度結(jié)果(上)和固定點(diǎn)結(jié)果(下)
這種量化融合需要硬件設(shè)計的經(jīng)驗,對可能的系統(tǒng)輸入的全面理解,明確的精度要求,以及來自定點(diǎn)設(shè)計師的一些幫助。如果這有助于縮小生產(chǎn)部署的算法,那么這個努力是值得的。但是,在需要簡單部署到原型硬件的情況下,或者在精確性要求使減少物理足跡變得困難的情況下,怎么辦?在這些情況下,一個解決方案是使用單精度本地浮點(diǎn)。
用本地浮點(diǎn)簡化流程
使用本地浮點(diǎn)有兩個好處:
· 您不需要花費(fèi)時間試圖分析所需的最小比特數(shù),以保持各種各樣的輸入數(shù)據(jù)的足夠精確性。
· 單精度浮點(diǎn)操作的動態(tài)范圍在32位的固定成本下更有效率。
現(xiàn)在,設(shè)計過程要簡單得多,而且您知道,用符號、指數(shù)和尾數(shù)的位,您可以表示廣泛的動態(tài)數(shù)字范圍。圖6中的表比較了使用圖5中所示數(shù)據(jù)類型選擇的浮點(diǎn)資源利用情況和ir篩選器的定點(diǎn)實現(xiàn)情況。
圖6ir濾波器的定點(diǎn)和浮點(diǎn)實現(xiàn)的資源使用比較
當(dāng)您比較從浮點(diǎn)和固定點(diǎn)實現(xiàn)中獲得的結(jié)果時,記住浮點(diǎn)計算比簡單的固定點(diǎn)算法需要更多的操作。使用單精度將導(dǎo)致在部署到FPGA或ASIC時使用更高的物理資源。如果電路區(qū)域是一個問題,那么您將需要交換更高的精度和資源使用。您也可以使用浮點(diǎn)和固定點(diǎn)的組合減少面積,同時保持單精度,以實現(xiàn)高動態(tài)范圍的數(shù)字密集計算。