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