發布日期:2022-04-17 點擊率:62
MATLAB?和 Simulink?使用基于浮點的建模來確保算法仿真的高精度計算。轉換為定點會降低數學精度,并且轉換期間,在數據類型字長和數學精度之間取得適當的平衡會比較困難。對于需要高動態范圍或高精度的計算(例如具有反饋回路的設計),定點轉換可能會花費數周或數月的工程時間,并且會導致定點字長較大。
從 R2016b 版本開始,您就可以使用 HDL Coder? 本機浮點庫直接從 Simulink 中的單精度浮點數據生成用于 FPGA 或 ASIC 實現的 HDL 代碼。
在本文中,我們將以部署到 FPGA 的 IIR 濾波器為例,介紹本機浮點工作流。然后,我們將回顧使用定點的挑戰,并比較使用單精度浮點或定點時面積和頻率之間的取舍。我們還將展示浮點和定點的組合如何減少實際設計中的轉換和實現時間,同時提供更高的精度。您將看到浮點如何在具有高動態范圍要求的實際設計中顯著縮小面積并提高速度。
本機浮點實現:深入解析
HDL Coder 通過在 FPGA 或 ASIC 資源上仿真基礎數學來實現單精度算法(圖1)。生成的邏輯將輸入的浮點信號解析為符號、指數和尾數,分別為 1、8 和23 位寬的單個整數。然后,生成的 VHDL? 或 Verilog? 邏輯在圖 1 所示的情況下執行浮點計算,即通過計算輸入符號位產生的符號位、幅值乘法運算,以及添加計算結果所需的指數和相應規范化。邏輯的最后一個階段將符號、指數和尾數打包回浮點數據類型。
圖1. HDL Coder 如何將單精度浮點乘法映射到定點硬件資源。
當您在 HDL Workflow Advisor 中選擇“本機浮點庫”代碼生成選項時,HDL Coder 會自動為您的單精度操作執行所有操作。您還可以設置一些選項,以更好地控制如何在硬件中實現浮點運算,例如針對特定的延遲的選項、針對 FPGA 上特定 DSP 邏輯的選項。HDL Coder 還提供了將反常值清零并有效處理 INF 和 NaN 的選項。
用定點轉換解決動態范圍問題
對于像 1-a/1+a 這樣的簡單表達式,如果需要在高動態范圍內實現,則可以使用單精度自然地進行轉換(圖2)。
圖2. (1-a)/(1+a) 的單精度實現。
然而,在定點中實現相同的方程式需要許多步驟和數值方面的考慮(圖 3)。例如,必須將除法分解為乘法和倒數,使用牛頓-拉普森或 LUT 等近似方法進行非線性倒數運算,使用不同的數據類型仔細控制位增長,選擇合適的分子和分母類型,并對加法器和減法器使用特定的輸出類型和累加器類型。
圖3. (1-a)/(1+a) 的定點實現。
探索 IIR 實現選項
讓我們看一個無限脈沖響應(IIR)濾波器的例子。IIR 濾波器需要高動態范圍計算和反饋環,這使得它很難收斂到定點量化。圖 4a 顯示了一個測試環境,比較了具有噪聲的正弦波輸入的同一個 IIR 濾波器的三個版本。正弦波的振幅為 1,而加性噪聲使振幅略有增加。第一個版本的濾波器是雙精度的(圖 4b)。第二個版本是單精度。第三個版本是定點實現(圖 4c)。這種實現導致數據類型的字長最大為 22 位,其中 1 位分配給符號,21 位分配給小數。這種特殊的數據類型留下 0 位來表示整數值,這是很有意義的,因為對于給定的激勵,它的值的范圍將始終在 -1 和 1 之間。如果設計必須使用不同的輸入值,則在定點量化時需要考慮到這一點。
圖4. a.具有噪聲正弦波輸入的 IIR 濾波器的三種實現。
圖4b. 以雙精度數據類型顯示的 IIR_filter 實現。
圖4c. IIR_filter_fixpt 實現,它使用有符號的 18 位字長定點數據類型,其中 16 位表示小數長度。
我們建立了測試環境,以比較單精度和定點濾波器與雙精度濾波器的測試結果。在這兩種情況下,精度的損失都會產生一定的誤差。問題是這個誤差是否在我們的應用可接受的公差范圍內。
當運行 Fixed-Point Designer?進行轉換時,我們指定的容錯度為 1%。圖 5 顯示了比較結果。單精度版本的錯誤約為 10-8,而定點數據類型的錯誤約為 10-5。這在我們指定的容錯范圍內。如果您的應用需要更高的精度,則可能需要增加定點字長。
圖5.將雙精度 IIR 濾波器結果與單精度結果(頂部)和定點結果(底部)進行比較的仿真結果。
收斂于這種量化需要硬件設計經驗、對可能的系統輸入的全面理解、明確的精度要求以及 Fixed-Point Designer 的一些幫助。如果可以幫助您縮減用于生產部署的算法,那么這項工作是值得的。但是,如果您只需要簡單地部署到原型硬件上,或者由于精度要求而很難減少資源使用,那該怎么辦呢?
這些情況下的解決方法是使用單精度本機浮點。
使用本機浮點簡化過程
使用本機浮點有兩個好處:
●您不必花時間分析所需的最小位數,以保持各種輸入數據的足夠精度。
●單精度浮點運算的動態范圍可通過 32 位的固定字長更有效地進行擴展。
現在,設計過程變得更加簡單,并且您知道,使用符號、指數和尾數位可以表示很寬的動態數字范圍。圖 6 中的表使用圖 5 中所示的數據類型選擇比較了 IIR 濾波器的浮點和定點實現的資源利用率。
圖6. IIR 濾波器的定點和浮點實現之間的資源使用率比較。
在比較浮點和定點實現的結果時,請記住,浮點計算比簡單的定點運算需要更多的操作。在部署到 FPGA 或 ASIC 時,使用單精度將導致更高的物理資源使用率。如果電路面積是一個問題,那么您需要在更高的精度和資源使用率之間進行取舍。您還可以使用浮點和定點的組合來減少面積,同時保留單精度,以在數值密集的計算單元中實現高動態范圍。
使用本機浮點管理資源使用情況
本機浮點是為高動態范圍應用生成代碼的一種簡單方法,可用于對 FPGA 編程或部署到 ASIC。但是,如果本機浮點超出了資源預算,有幾種方法可以減少資源使用:
使用 HDL Coder 優化。資源共享和其他算法級優化支持本機浮點代碼生成。例如,這些優化可以通過時分多路復用和其他共享和流處理技術來共享消耗大量面積的復雜數學運算(例如 exp、atan2),從而達到縮小面積的目的。
在適用的情況下使用定點轉換過程。定點轉換對于沒有高動態范圍要求或反饋回路的設計非常簡單,而 Fixed-Point Designer 可幫助實現此過程的自動化。在某些類型的設計中,很難在不增加額外位數的情況下實現收斂。在這種情況下,有選擇地使用本機浮點是更好的選擇。此方法在大多數設計中都使用定點轉換,同時允許您在數據路徑的高動態范圍部分中使用浮點。
在設計中創建浮點和定點“孤島”。一旦您確定了設計中難以實現收斂的部分,就可以使用數據類型轉換模塊將輸入轉換為單精度,然后將操作的輸出轉換回相應的定點類型來隔離這些部分。圖7 顯示了電機控制設計的一部分,其中增益操作和 sincos 操作被隔離為本機浮點區域,并且輸出被轉換回定點值。
圖7.在同一設計中混合使用定點和本機浮點。
在設計中選擇浮點或定點的快速指南
在以下情況下,對整個設計使用浮點:
●您缺乏定點量化的經驗。
●您的算法混合使用非常大和非常小的數字。
●您的設計廣泛使用大于 32 位的定點類型。
●您的設計包括非線性操作,如 divide、mod、rem、log、exp 和 atan,這些操作很難轉換為定點。
●您可以靈活地使用更大的面積和延遲(例如,在電機控制或音頻處理等較低帶寬的應用中)。
在以下情況下,對整個設計使用定點:
●您有定點量化方面的經驗。
●將算法轉換為固定點很簡單。
●您對面積和延遲有嚴格的要求。
在以下情況下,應混合使用浮點和定點:
●您的設計混合使用了控制邏輯和動態范圍較大的數據路徑。
●只有一部分設計難以量化到定點。
●對于限定使用的浮點算法,您的面積要求中有足夠的余量。
使用本機浮點的實例
如圖 8 所示,如果您正在處理動態范圍問題并打算使用更長的字長,那么定點實現可能比浮點版本消耗更多的資源。
圖8. Sqrt 函數資源利用率。在更大的字長下,sqrt 將比單精度實現消耗更多的 FPGA 資源,而后者具有固定的成本。
為了解本機浮點在這種情況下是如何發揮作用,請思考一下電動汽車模型的例子(圖9)。這是一個包含許多組件的復雜模型,包括電池模型、逆變器、PMSM 和車輛模型。
圖9.電動汽車模型。
圖 10 顯示了用于實現這些組件的數學方程式。
圖10.電動汽車模型中使用的數學方程式。
由于組件之間的所有反饋回路,通過定點將此模型應用到硬件上可能具有挑戰性。在 PMSM 和逆變器之間具有復雜反饋回路的組件系統中,弄清楚如何減少量化誤差可能需要幾個月的時間。為了減少誤差,您必須使用非常大的字長。但是,有了浮點支持,您可以直接將此模型應用在硬件上,而無需將其轉換為定點。
如圖 11 所示,對于具有反饋回路的算法,浮點是正確的數據類型選擇,因為浮點實現使用的面積較小,性能更好,而同一算法的定點版本則需要較大的字長。
圖11.電動汽車模型的定點和浮點實現的比較。
結論
習慣上,定點量化一直是使算法滿足 FPGA 或 ASIC 硬件要求的最具挑戰性的任務之一。本機浮點 HDL 代碼生成允許您生成 VHDL 或 Verilog,以便在硬件中實現浮點,而無需進行定點轉換。如果您要創建FPGA實現,這種方法可以節省大量時間,并且可以更快地將算法應用到 Xilinx? Zynq? SoC 或 Intel?SoC FPGA。
對于需要兩者兼備的設計——既要使用定點的控制邏輯又要使用浮點的高動態范圍數據路徑,您可以輕松地將兩者結合起來。
下一篇: PLC、DCS、FCS三大控
上一篇: 藝賽旗財務機器人應用