女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA定點和浮點數學運算實例對比

FPGA研究院 ? 來源:OpenFPGA ? 2025-06-23 09:53 ? 次閱讀

來源:OpenFPGA;作者:碎碎思

在創建 RTL 示例時,經常使用 VHDL 2008 附帶的 VHDL 包。它提供了出色的功能,可以高效地處理定點數,當然,它們也是可綜合的。該包的一些優點包括:

有符號和無符號(后綴和后綴)定點向量。

輕松將定點數表示并量化為定點向量。

小數點位于向量元素 0 和 -1 之間。這樣就無需在運算過程中跟蹤小數點以進行對齊(大量運算這點很難把握)。

運算的溢出、舍入和范圍管理有明確的定義。

算術和比較運算符。

因此,當需要實現算法時,我會使用這個包。但是實際應用時,還會有很多浮點運算。

自然而然地,一個問題出現了:用定點和浮點實現同一個方程時,資源有什么區別?

我們將要看的例子是如何利用多項式近似地將ADC讀數轉換為溫度值。這在工業應用中很常見(使用鉑電阻溫度計時)。

cd0d6d2e-4bd3-11f0-b715-92fbcf53809c.png

要實現的具體方程是 y = 2E-09x4 - 4E-07x3 + 0.011x2 + 2.403x - 251.26,該方程是從繪制方程式中提取出來的。雖然我們可以直接實現該方程,但這會非常浪費資源,還會增加開發的復雜性和風險。

cd1adb58-4bd3-11f0-b715-92fbcf53809c.png

使用定點數系統,我們需要做一些量化來保持精度和準確度。

代碼和一個簡單的仿真如下。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.fixed_pkg.all;
entity complex_example is port(
clk  :instd_logic;
ip   :instd_logic_vector(7 downto 0);
op   : out std_logic_vector(8 downto 0));
end complex_example;
architecture Behavioral of complex_example is
signal power_a : sfixed(8 downto -32):=(others=>'0');
signal power_b : sfixed(8 downto -32):=(others=>'0');
signal power_c : sfixed(8 downto -32):=(others=>'0');
signal calc : sfixed(8 downto -32) :=(others=>'0');
signal store : sfixed(8 downto 0) := (others =>'0');
constant a : sfixed(8 downto -32):= to_sfixed( 2.00E-09, 8,-32 );
constant b : sfixed(8 downto -32):= to_sfixed( 4.00E-07, 8,-32 );
constant c : sfixed(8 downto -32):= to_sfixed( 0.0011, 8,-32 );
constant d : sfixed(8 downto -32):= to_sfixed( 2.403, 8,-32 );
constant e : sfixed(8 downto -32):= to_sfixed( 251.26, 8,-32 );
typereg_array is array (9 downto 0) of sfixed(8 downto -32);
signal pipeline_reg : reg_array;
begin
cvd : process(clk)
begin
ifrising_edge(clk)then
  store <= to_sfixed('0'&ip,store);
? ? power_a <= resize (arg => power_b * store * a,
           size_res => power_a);
  power_b <= resize (arg => power_c * store * b,
           size_res => power_b);  
  power_c <= resize (arg => store * store * c,
           size_res => power_c); 
  calc <= resize (arg => power_a - power_b + power_c + (store * d) - e,
          size_res => calc);
  pipeline_reg <= pipeline_reg(pipeline_reg'high -1 downto 0 ) & calc; ? ? ??
?op <= to_slv(pipeline_reg(pipeline_reg'high)(8 downto 0));
? end?if;
end process;
end Behavioral;

對于 109 Ω的電阻輸入,溫度應報告為 23.7°C。我們可以在下面的定點仿真中看到,結果符合預期,精度在可接受的范圍內。

cd2f71bc-4bd3-11f0-b715-92fbcf53809c.png

使用浮點包實現相同的功能,以類似的方式實現

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.FLOAT_pkg.ALL; -- Use the floating-point package
entity FloatingPointPolynomial is
  Port (
    clk :inSTD_LOGIC;
    x :infloat32; -- Input x as a 32-bit floating-point number
    y : out float32 -- Output y as a 32-bit floating-point number  );
end FloatingPointPolynomial;
architecture Behavioral of FloatingPointPolynomial is
  -- Define constantsforthe polynomial coefficients
  constant a4 : float32 := TO_float(2.00E-09);
  constant a3 : float32 := TO_float(-4.00E-07);
  constant a2 : float32 := TO_float(0.011);
  constant a1 : float32 := TO_float(2.403);
  constant a0 : float32 := TO_float(-251.26);
  signal x2, x3, x4 : float32; -- Intermediate powers of x
  signal term4, term3, term2, term1 : float32; -- Polynomial terms
  signal res : float32;
 typereg_array is array (9 downto 0) of float32;
  signal pipeline_reg : reg_array;  
begin
  process(clk)
  begin
   ifrising_edge(clk)then
      -- Calculate powers of x
      x2 <= x * x;
? ? ? ? ? ? x3 <= x2 * x;
? ? ? ? ? ? x4 <= x3 * x;
? ? ? ? ? ? -- Calculate each term?in?the polynomial
? ? ? ? ? ? term4 <= a4 * x4;
? ? ? ? ? ? term3 <= a3 * x3;
? ? ? ? ? ? term2 <= a2 * x2;
? ? ? ? ? ? term1 <= a1 * x;
? ? ? ? ? ? -- Calculate final result
? ? ? ? ? ? res <= term4 + term3 + term2 + term1 + a0;
? ? ? ? ? ? pipeline_reg <= pipeline_reg(pipeline_reg'high -1 downto 0 ) &?
? ? ? ?res;
? ? ? ? ? ? y <= (pipeline_reg(pipeline_reg'high));
? ? ? ? end?if;
? ? end process;
end Behavioral;

仿真再次顯示了預期的結果,作為浮點結果,我們得到的結果也包括分數元素。

cd413b40-4bd3-11f0-b715-92fbcf53809c.png

因此,定點和浮點都能夠實現定義的算法。

為了了解利用所需的資源,決定將這兩種算數實現都以 K26 SoM 為目標進行綜合。

運行綜合將識別每個模塊所需的資源。

正如預期的那樣,定點實現所需的邏輯占用空間比浮點實現所需的小得多。

cd4cc0fa-4bd3-11f0-b715-92fbcf53809c.png

定點實現

cd588610-4bd3-11f0-b715-92fbcf53809c.png

浮點實現

我們不僅需要考慮邏輯占用空間,還需要考慮時序性能??紤]到這一點,將兩個設計都設置為 200 MHz 運行,并從一開始就實現了基準時序收斂。

實現時序收斂比定點收斂更重要,這在浮點實現中是可以預料到的。不得不重新審視設計,并在幾個關鍵階段實現流水線,因為最初的代碼只是為了確定占用空間的差異。

值得注意的是,Versal 系列中的 DSP58 支持浮點運算,但它不能直接從 float32 映射到 DSP。為了利用此功能,我們需要實例化配置為 FP32 操作的 DSP58,或者利用 Vivado IP 集成器提供的浮點 IP。

總結這篇博客,正如預期的那樣,在使用 VHDL 中的浮點庫時,邏輯占用空間存在很大差異。

建議在必要時利用定點,并在絕對必要時限制浮點。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 仿真
    +關注

    關注

    51

    文章

    4251

    瀏覽量

    135463
  • RTL
    RTL
    +關注

    關注

    1

    文章

    389

    瀏覽量

    60821
  • 運算符
    +關注

    關注

    0

    文章

    173

    瀏覽量

    11393

原文標題:FPGA定點和浮點數學運算-實例對比

文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    浮點數定點數

    本帖最后由 gk320830 于 2015-3-5 23:17 編輯 數制,浮點數定點數的文檔,上數電時老師給的。有興趣的同學可以來看看
    發表于 03-27 21:31

    【安富萊——DSP教程】第7章 DSP定點數浮點數(重要)

    第7章DSP定點數浮點數(重要) 本期教程主要跟大家講解一下定點數浮點數的基礎知識,了解這些基礎知識對于后面學習ARM官方的DSP庫大有裨益。特別是初學的一定要理解這些基礎知識。
    發表于 06-03 11:47

    第7章 DSP定點數浮點數

    IEEE浮點數 7.3 定點數運算 7.4 總結7.1 定點數浮點數概念 如果小數點的位置事先已有約定,不再改變,此類數稱為“
    發表于 09-22 13:02

    CPU執行一個需要浮點數運算的程序時有三種方式

    編者按:在計算領域,例如三角函數以及時域頻域變換通常會用到浮點運算。當CPU執行一個需要浮點數運算的程序時,有三種方式可以執行:軟件仿真器(浮點
    發表于 08-27 07:51

    定點數浮點數的區別是什么

    定點數浮點數的區別目的:理解定點數浮點數在傅里葉變換(FFT)的實際應用中的選擇單片機中如果需要進行一定的運算(常見的傅里葉變換)時,需
    發表于 02-21 07:22

    如何在GCC中為具有FPU的Cortex M4啟用硬件浮點數學運算呢?

    如何在GCC中為具有FPU的Cortex M4啟用硬件浮點數學運算呢?
    發表于 08-26 14:43

    擴充浮點運算集是否需要自己在FPGA板子上設置一個定點數轉為浮點數的部分?

    擴充浮點運算集的時候,是否需要自己在FPGA板子上設置一個定點數轉為浮點數的部分?
    發表于 08-11 09:13

    FPGA浮點數定點數表示法原理展示

    浮點數定點數表示法是我們在計算機中常用的表示方法 所以必須要弄懂原理,特別是在FPGA里面,由于FPGA不能像在MCU一樣直接用乘除法。 首先說一下簡單的
    發表于 11-18 02:15 ?9065次閱讀
    在<b class='flag-5'>FPGA</b>里<b class='flag-5'>浮點數</b>與<b class='flag-5'>定點數</b>表示法原理展示

    單片機浮點數運算的源碼設計

    單片機執行程序的過程,實際上就是執行我們所編制程序的過程。即逐條指令的過程。本文詳細介紹了浮點數在單片機中的表示方式和匯編子程序,浮點數定點數加減法要困難,但是克服了定點數表示范圍小
    的頭像 發表于 03-07 15:19 ?1.1w次閱讀
    單片機<b class='flag-5'>浮點數</b><b class='flag-5'>運算</b>的源碼設計

    FPGA浮點運算定標實現方法

    有些FPGA中是不能直接對浮點數進行操作的,只能采用定點數進行數值運算。對于FPGA而言,參與數學運算
    的頭像 發表于 08-12 09:53 ?5064次閱讀

    定點數浮點數在STM32單片機中使用傅里葉(FFT)變換的理解

    定點數浮點數的區別目的:理解定點數浮點數在傅里葉變換(FFT)的實際應用中的選擇單片機中如果需要進行一定的運算(常見的傅里葉變換)時,需
    發表于 12-24 19:22 ?16次下載
    <b class='flag-5'>定點數</b>和<b class='flag-5'>浮點數</b>在STM32單片機中使用傅里葉(FFT)變換的理解

    如何在FPGA中正確處理浮點數運算

    使用插值算法實現圖像縮放是數字圖像處理算法中經常遇到的問題。我們經常會將某種尺寸的圖像轉換為其他尺寸的圖像,如放大或者縮小圖像。由于在縮放的過程中會遇到浮點數,如何在FPGA中正確的處理浮點數
    的頭像 發表于 03-18 11:03 ?5475次閱讀

    FPGA浮點數轉化為定點數方法

    FPGA在常規運算時不能進行浮點運算,只能進行定點整型運算,在處理數據的小數乘加
    的頭像 發表于 10-13 16:23 ?5440次閱讀

    FPGA浮點數表示及計算機數值表示規則

    定點數硬件實現簡單,但表示的范圍有限,且部分的小數運算IP核只支持浮點數運算,因此這里還需要提到浮點數的相關內容。
    發表于 06-16 15:41 ?1693次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>浮點數</b>表示及計算機數值表示規則

    定點數浮點數的概念 浮點數二進制序列與指數表達式之間的轉化

    的缺點:由于小數點位置固定不變,定點數所表示的數的范圍非常有限,不能同時表達特別大或特別小的數,所以才出現了浮點數,以此來擴充數的范圍,同時浮點數也廣泛應用于精度要求高的場合。簡單的理解浮點數
    的頭像 發表于 08-22 16:06 ?9080次閱讀
    <b class='flag-5'>定點數</b>和<b class='flag-5'>浮點數</b>的概念 <b class='flag-5'>浮點數</b>二進制序列與指數表達式之間的轉化