亚洲av成人精品日韩一区,97久久久精品综合88久久,玩弄japan白嫩少妇hd,亚洲av片不卡无码久久,玩弄人妻少妇500系列

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

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

3天內不再提示

FPGA定點和浮點數(shù)學運算實例對比

FPGA研究院 ? 來源:OpenFPGA ? 2025-06-23 09:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:OpenFPGA;作者:碎碎思

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

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

輕松將定點數(shù)表示并量化為定點向量。

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

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

算術和比較運算符。

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

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

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

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

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

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

使用定點數(shù)系統(tǒng),我們需要做一些量化來保持精度和準確度。

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

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

使用浮點包實現(xiàn)相同的功能,以類似的方式實現(xiàn)

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;

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

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

因此,定點和浮點都能夠實現(xiàn)定義的算法。

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

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

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

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

定點實現(xiàn)

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

浮點實現(xiàn)

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

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

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

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

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

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

    關注

    52

    文章

    4283

    瀏覽量

    135809
  • RTL
    RTL
    +關注

    關注

    1

    文章

    389

    瀏覽量

    61088
  • 運算符
    +關注

    關注

    0

    文章

    173

    瀏覽量

    11481

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于FPGA實現(xiàn)的自定義浮點數(shù)

    基于FPGA實現(xiàn)各種設計的首要前提是理解并掌握數(shù)字的表示方法,計算機中的數(shù)字表示方法有兩種:定點數(shù)表示法和浮點數(shù)表示方法。
    發(fā)表于 10-10 10:30 ?1710次閱讀

    浮點數(shù)定點數(shù)

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

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

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

    第7章 DSP定點數(shù)浮點數(shù)

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

    CPU執(zhí)行一個需要浮點數(shù)運算的程序時有三種方式

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

    定點數(shù)浮點數(shù)的區(qū)別是什么

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

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

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

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

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

    單片機浮點數(shù)運算的源碼設計

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

    FPGA浮點運算定標實現(xiàn)方法

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

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

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

    如何在FPGA中正確處理浮點數(shù)運算

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

    FPGA浮點數(shù)轉化為定點數(shù)方法

    FPGA在常規(guī)運算時不能進行浮點運算,只能進行定點整型運算,在處理數(shù)據(jù)的小數(shù)乘加
    的頭像 發(fā)表于 10-13 16:23 ?5544次閱讀

    FPGA浮點數(shù)表示及計算機數(shù)值表示規(guī)則

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

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

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