chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

詳解FPGA定點數(shù)計算方法

FPGA設(shè)計論壇 ? 來源:FPGA設(shè)計論壇 ? 2025-12-02 10:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

FPGA定點數(shù)計算在高效資源利用、運算速度優(yōu)勢、硬件可預測性和成本效益等方面發(fā)揮著重要作用。它能節(jié)省邏輯和存儲資源,實現(xiàn)更快速的運算和更高的時鐘頻率,保證行為可預測且易于硬件實現(xiàn)和驗證,同時降低硬件和開發(fā)成本,廣泛應用于數(shù)字信號處理、工業(yè)控制、通信系統(tǒng)等領(lǐng)域。

基本定義

定義有符號寫法和無符號數(shù)寫法,其中定義和說明如下所示

符號類型 有符號定點數(shù) 無符號定點數(shù)
簡寫 F/Q10.6 UF/UQ10.6
數(shù)據(jù)位寬 10+6=16bit 1+9+6=16bit
符號位 最高位
說明 其中前10位表示整數(shù)位寬,后6位為小數(shù)位寬。其中整數(shù)的取值范圍0?450-4^50?45,小數(shù)位的精度為(1/(26))(1/(2^6))(1/(26))。 其中最高位為符號位,之后的9位表示整數(shù)位寬,最后后6位為小數(shù)位寬。
其中整數(shù)的取值范圍0?290-2^90?29,小數(shù)位的精度為(1/(26))(1/(2^6))(1/(26))。

計算方式

計算流程

將兩個相乘實數(shù)RA RB數(shù)據(jù)轉(zhuǎn)化成對應=>UFa.b/Fa.b 格式數(shù)據(jù): 先乘小數(shù)2b2^b2b

將轉(zhuǎn)化后的兩個定點數(shù)進行相乘

將相乘的結(jié)果進行位移操作,換算QA QB格式數(shù)據(jù)

在將QA QB定點數(shù)據(jù)格式進行移位得到實數(shù)RA RB,這個實數(shù)會損失精度

任意無符號定點數(shù)與任意無符號定點數(shù)相乘(無符號)

無符號定點數(shù) 無符號定點數(shù)
QA=UFa.b QB=UFn.m
QA=UF9.7 QB=UF1.15
RA=5.3 RB=0.2
下面是計算過程
流程 定點數(shù)計算過程 實數(shù)計算數(shù)值
開始 RA=5.3 RB=0.2
1 QA=RA×2b=QAQA={RA×2^b=QA}QA=RA×2b=QA |QB=RB×2m=QBQB= {RB×2^m = QB}QB=RB×2m=QB QA=678 QB=6553
2 (UQ(a+n).(b+m))=QA?QB(UQ(a+n).(b+m))=QA*QB(UQ(a+n).(b+m))=QA?QB QA×QB=8×6553.6=52428
3 QA=QA?QB>>mQA=QA*QB>>mQA=QA?QB>>m |QB=QA?QB>>bQB=QA*QB>>bQB=QA?QB>>b QA=QAQB>>15=135 QB=QAQB>>7=34734
4 RA=(UQa.b)>>bRA=(UQa.b)>>bRA=(UQa.b)>>b |RB=(UQn.m)>>mRB=(UQn.m)>>mRB=(UQn.m)>>m RA=(QA=UQ9.7)>>7=1 |RB=(QB=UQ1.15)>>15=1

任意有符號定點數(shù)與任意有符號定點數(shù)相乘

有符號定點數(shù) 有符號定點數(shù)
QA=Fa.b QB=Fn.m
QA=F3.4 QB=F2.3
RA=1.5 RB=-2.25
下面是計算過程
實數(shù)計算中,若數(shù)據(jù)為負數(shù),數(shù)據(jù)左移后將最高位補1,
流程 定點數(shù)計算過程 實數(shù)計算數(shù)值
開始 RA=1.5 RB=-2.25
1 QA=RA×2b=QAQA={RA×2^b=QA}QA=RA×2b=QA |QB=RB×2m=QBQB= {RB×2^m = QB}QB=RB×2m=QB QA=24 QB=46
2 (Q(a+n).(b+m))=QA?QB(Q(a+n).(b+m))=QA*QB(Q(a+n).(b+m))=QA?QB QA×QB=15952
3 QA=QA?QB>>mQA=QA*QB>>mQA=QA?QB>>m |QB=QA?QB>>bQB=QA*QB>>bQB=QA?QB>>b QA=QAQB>3=202 QB=QAQB>>4=37
4 RA=(Qa.b)>>bRA=(Qa.b)>>bRA=(Qa.b)>>b |RB=(Qn.m)>>mRB=(Qn.m)>>mRB=(Qn.m)>>m RA=QA>>4=-3.375| RB=QB>>3=-3.375

小技巧

注意整數(shù)損失和小數(shù)精度損失
在進行定點數(shù)據(jù)計算前,需要人為考慮定點數(shù)計算后數(shù)據(jù)損失情況,若F(16.0)與F(1,15)相乘,如果使用F(17.15)數(shù)據(jù)不會損失太多信息
如果將F(17.15)=>F(16.0)則會損失小數(shù)精度。
如果將F(17.15)=>F(1.15)則會損失整數(shù)16位信息。

小數(shù)符號位的計算方法
在整個有符號數(shù)據(jù)計算時,所有的數(shù)據(jù)按照補碼來計算,其中含負數(shù)和符號位乘法如下圖所示。
4f38da00-ce8c-11f0-8c8f-92fbcf53809c.png

FPGA中截斷定點數(shù)位寬
在進行定點數(shù)據(jù)計算時,有可能會出現(xiàn)輸出不同精度數(shù)據(jù)情況,例如若F(8.8)與F(5,11)相乘,產(chǎn)生F(13,19),但是我需要輸出F(6,10)這種精度。一般操作過程如下所示
如果將F(13,19)左移9位,變成F(13.9),在截斷整數(shù)位,變成F(6,10)。
有符號定點數(shù)進行截位后注意符號位

FPGA中擴展定點數(shù)位寬
在進行定點數(shù)據(jù)計算時,有可能會出現(xiàn)將低精度數(shù)據(jù)擴展到高精度數(shù)據(jù)情況操作,例如若F(8.8)不通過乘法轉(zhuǎn)換成F(9,13)。
整數(shù)部分:如果為負數(shù),最高位補1,如果為正數(shù),最高位補0。
小數(shù)部分:小數(shù)只需要補0即可。
有符號定點數(shù)進行截位后注意符號位

無符號與有符號數(shù)據(jù)實現(xiàn)
1在信號輸入端,人為將無符號數(shù)通過assign或者always將無符號數(shù)據(jù)轉(zhuǎn)換成有符號數(shù),在進行運算。

無符號定點數(shù)乘法模塊
4f933766-ce8c-11f0-8c8f-92fbcf53809c.png

//無符號數(shù)據(jù)乘法模塊

module unsigned_fixed_point_multiplication#(

parameter P_A_DATA_DW = 16,

P_A_POINT_DW = 8,

P_B_DATA_DW = 16,

P_B_POINT_DW = 8 ,

P_Q_DW =P_A_DATA_DW +P_B_DATA_DW

)

(

input i_clk , // 時鐘

input i_rst , // 復位

input wire [P_A_DATA_DW - 1:0] i_unsgined_a , // 第一個無符號定點數(shù)

input wire [P_B_DATA_DW - 1:0] i_unsgined_b , // 第二個無符號定點數(shù)

input wire i_unsgined_ab_vld , // 數(shù)據(jù)有效位

output wire [P_A_DATA_DW - 1:0] o_unsgined_cov_a , // 第一個無符號定點數(shù)類型結(jié)果

output wire [P_B_DATA_DW - 1:0] o_unsgined_cov_b , // 第二個無符號定點數(shù)類型結(jié)果

output wire o_unsgined_ab_vld , // 數(shù)據(jù)輸出有效位

output wire [P_Q_DW - 1 :0] o_unsgined_c , // 不做刪減的數(shù)據(jù)輸出

output wire o_unsgined_c_vld // 數(shù)據(jù)輸出有效位

);

localparam P_POINT_DW = P_A_POINT_DW + P_B_POINT_DW ;

reg [P_A_DATA_DW - 1:0] ri_unsgined_a ;

reg [P_B_DATA_DW - 1:0] ri_unsgined_b ;

reg ri_unsgined_ab_vld ;

reg [P_A_DATA_DW - 1:0] ro_unsgined_cov_a ;

reg [P_B_DATA_DW - 1:0] ro_unsgined_cov_b ;

reg ro_unsgined_ab_vld ;

reg [P_Q_DW - 1 :0] ro_unsgined_c ;

reg ro_unsgined_c_vld ;

assign o_unsgined_cov_a = ro_unsgined_cov_a ;

assign o_unsgined_cov_b = ro_unsgined_cov_b ;

assign o_unsgined_ab_vld = ro_unsgined_ab_vld ;

assign o_unsgined_c = ro_unsgined_c ;

assign o_unsgined_c_vld = ro_unsgined_c_vld ;

//數(shù)據(jù)暫存

always @(posedge i_clk or posedge i_rst) begin

if (i_rst) begin

ri_unsgined_a <= 'd0;

ri_unsgined_b <= 'd0;

ri_unsgined_ab_vld <= 'd0;

end else begin

ri_unsgined_a <= i_unsgined_a ? ? ? ;

ri_unsgined_b <= i_unsgined_b ? ? ? ;

ri_unsgined_ab_vld <= i_unsgined_ab_vld ?;

end

end

// 執(zhí)行乘法運算

always @(posedge i_clk or posedge i_rst) begin

if (i_rst) begin

ro_unsgined_c <= 'd0;

ro_unsgined_c_vld <= 'd0;

end else if(ri_unsgined_ab_vld)begin

ro_unsgined_c <= ri_unsgined_a * ri_unsgined_b;

ro_unsgined_c_vld <= ri_unsgined_ab_vld;

end else begin

ro_unsgined_c <= ro_unsgined_c;?

ro_unsgined_c_vld <= ?1'd0;

end

end

// 調(diào)整小數(shù)點位置

// 注意:這里沒有進行舍入處理,根據(jù)需要可能需要添加

// 執(zhí)行乘法運算

always @(posedge i_clk or posedge i_rst) begin

if (i_rst) begin

ro_unsgined_cov_a <= 'd0;

ro_unsgined_cov_b <= 'd0;

ro_unsgined_ab_vld <= 'd0;

end else if(ro_unsgined_c_vld)begin

ro_unsgined_cov_a <= ro_unsgined_c>>P_B_POINT_DW;

ro_unsgined_cov_b <= ro_unsgined_c>>P_A_POINT_DW;

ro_unsgined_ab_vld <= ro_unsgined_c_vld;

end else begin

ro_unsgined_cov_a <= ro_unsgined_cov_a;?

ro_unsgined_cov_b <=ro_unsgined_cov_b;

ro_unsgined_ab_vld <= ?1'd0;

end

end

endmodule

有符號定點數(shù)乘法模塊
4feb60a8-ce8c-11f0-8c8f-92fbcf53809c.png

//有符號數(shù)據(jù)乘法模塊

module signed_fixed_point_multiplication#(

parameter P_A_DATA_DW = 8,

P_A_POINT_DW = 4,

P_B_DATA_DW = 6,

P_B_POINT_DW = 3 ,

P_Q_DW =P_A_DATA_DW +P_B_DATA_DW

)

(

input i_clk ,

input i_rst ,

input wire signed [P_A_DATA_DW - 1:0] i_sgined_a ,

input wire signed [P_B_DATA_DW - 1:0] i_sgined_b ,

input wire i_sgined_ab_vld ,

output wire signed [P_A_DATA_DW - 1:0] o_sgined_cov_a ,

output wire signed [P_B_DATA_DW - 1:0] o_sgined_cov_b ,

output wire o_sgined_ab_vld ,

output wire signed [P_Q_DW - 1 :0] o_sgined_c ,

output wire o_sgined_c_vld

);

reg signed [P_A_DATA_DW - 1:0] ri_sgined_a ;

reg signed [P_B_DATA_DW - 1:0] ri_sgined_b ;

reg ri_sgined_ab_vld ;

reg signed [P_A_DATA_DW - 1:0] ro_sgined_cov_a ;

reg signed [P_B_DATA_DW - 1:0] ro_sgined_cov_b ;

reg ro_sgined_ab_vld ;

reg signed [P_Q_DW - 1 :0] ro_sgined_c ;

reg ro_sgined_c_vld ;

assign o_sgined_cov_a = ro_sgined_cov_a ;

assign o_sgined_cov_b = ro_sgined_cov_b ;

assign o_sgined_ab_vld = ro_sgined_ab_vld ;

assign o_sgined_c = ro_sgined_c ;

assign o_sgined_c_vld = ro_sgined_c_vld ;

//數(shù)據(jù)暫存

always @(posedge i_clk or posedge i_rst) begin

if (i_rst) begin

ri_sgined_a <= 'd0;

ri_sgined_b <= 'd0;

ri_sgined_ab_vld <= 'd0;

end else begin

ri_sgined_a <= i_sgined_a ? ? ? ;

ri_sgined_b <= i_sgined_b ? ? ? ;

ri_sgined_ab_vld <= i_sgined_ab_vld ?;

end

end

// 執(zhí)行乘法運算

always @(posedge i_clk or posedge i_rst) begin

if (i_rst) begin

ro_sgined_c <= 'd0;

ro_sgined_c_vld <= 'd0;

end else if(ri_sgined_ab_vld)begin

ro_sgined_c <= ri_sgined_a * ri_sgined_b;

ro_sgined_c_vld <= ri_sgined_ab_vld;

end else begin

ro_sgined_c <= ro_sgined_c;?

ro_sgined_c_vld <= ?1'd0;

end

end

// 調(diào)整小數(shù)點位置

// 注意:這里沒有進行舍入處理,根據(jù)需要可能需要添加

// 執(zhí)行乘法運算

always @(posedge i_clk or posedge i_rst) begin

if (i_rst) begin

ro_sgined_cov_a <= 'd0;

ro_sgined_cov_b <= 'd0;

ro_sgined_ab_vld <= 'd0;

end else if(ro_sgined_c_vld)begin

ro_sgined_cov_a <= ro_sgined_c>>P_B_POINT_DW;

ro_sgined_cov_b <= ro_sgined_c>>P_A_POINT_DW;

ro_sgined_ab_vld <= ro_sgined_c_vld;

end else begin

ro_sgined_cov_a <= ro_sgined_cov_a;?

ro_sgined_cov_b <=ro_sgined_cov_b;

ro_sgined_ab_vld <= ?1'd0;

end

end

endmodule

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

    關(guān)注

    1655

    文章

    22277

    瀏覽量

    629919
  • 數(shù)字信號
    +關(guān)注

    關(guān)注

    2

    文章

    1029

    瀏覽量

    48948
  • 符號
    +關(guān)注

    關(guān)注

    0

    文章

    56

    瀏覽量

    4710

原文標題:FPGA定點數(shù)計算

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    FPGA定點數(shù)的處理方法

    FPGA中最常用的還是定點化數(shù)據(jù)處理方法,本文對定點化數(shù)據(jù)處理方法進行簡要探討,并給出必要的代碼例子。
    發(fā)表于 05-24 15:10 ?4123次閱讀
    <b class='flag-5'>FPGA</b>中<b class='flag-5'>定點數(shù)</b>的處理<b class='flag-5'>方法</b>

    定點數(shù)表示實數(shù)的方法以及定點數(shù)在硬件上的運算驗證

    本篇主要介紹定點數(shù)表示實數(shù)的方法以及定點數(shù)在硬件上的運算驗證 為什么選定點數(shù) 32位單精度浮點數(shù): 32位的單精度浮
    發(fā)表于 10-28 08:13

    點數(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ù)的基礎(chǔ)知識,了解這些基礎(chǔ)知識對于后面學習ARM官方的DSP庫大有裨益。特別是初學的一定要理解這些基礎(chǔ)知識。
    發(fā)表于 06-03 11:47

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

    。7.1.2 浮點數(shù)計算機系統(tǒng)的發(fā)展過程中,曾經(jīng)提出過多種方法表達實數(shù)。典型的比如相對于浮點數(shù)定點數(shù)(Fixed Point Numb
    發(fā)表于 09-22 13:02

    請問28335浮點數(shù)使用IQmath轉(zhuǎn)換后當定點數(shù)計算快還是用浮點數(shù)進行計算快?28335可以定點浮點混合編程嗎?

    本帖最后由 一只耳朵怪 于 2018-6-14 11:52 編輯 28335為浮點DSP ,現(xiàn)在假如我采用兩種方法:1.浮點數(shù)使用IQmath轉(zhuǎn)換后當定點數(shù)計算2.直接用浮
    發(fā)表于 06-14 05:59

    6618虛擬定點數(shù)學庫IQmath

    最近需要在6618上做速度優(yōu)化,準備采用定點代替浮點的方式,但是沒有找到針對66X系列的虛擬定點數(shù)學庫。采用C64+系列的定點虛擬庫代替,發(fā)現(xiàn)32bit數(shù)據(jù)的乘法速度竟然比直接進行浮點運算的速度還要
    發(fā)表于 06-21 11:23

    verilog程序定點數(shù)的資料

    verilog程序中需要用到定點數(shù),用浮點數(shù)太復雜。。。有誰有關(guān)于定點數(shù)比較系統(tǒng)的資料嗎。。。我找到黑金的教程,是關(guān)于浮點數(shù)運算的verilog實現(xiàn),很詳細,先傳上來 Verilog
    發(fā)表于 03-27 06:35

    DSP功能函數(shù)-定點數(shù)互轉(zhuǎn)

    第17章 DSP功能函數(shù)-定點數(shù)互轉(zhuǎn)本期教程主要講解功能函數(shù)中的Q7,Q15和Q31分別向其它類型數(shù)據(jù)轉(zhuǎn)換。目錄第17章 DSP功能函數(shù)-定點數(shù)互轉(zhuǎn)17.1 初學者重要提示17.2 DSP基礎(chǔ)運算指令17.3 ...
    發(fā)表于 08-11 08:04

    定點數(shù)運算中產(chǎn)生溢出的原因是什么

    馮·諾依曼機工作方式的基本特點是什么?計算機系統(tǒng)中采用補碼運算的目的是什么?在定點二進制運算器中,減法運算一般通過什么來實現(xiàn)?在定點數(shù)運算中產(chǎn)生溢出的原因是什么?和外存儲器相比,內(nèi)存儲器的特點是什么?
    發(fā)表于 08-11 08:44

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

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

    LabVIEW中定點數(shù)有什么用途?LabVIEW中定點數(shù)應用解析

    采用 這樣的一種規(guī)范來表示定點數(shù)。其中s表示符號位,m表示字長,n表示整數(shù)字長。LabVIEW中定點數(shù)存儲空間,最大限定為64bit。 圖:有符號定點數(shù)表示方法 比如一個字長為8,整數(shù)
    發(fā)表于 11-16 13:04 ?1w次閱讀
    LabVIEW中<b class='flag-5'>定點數(shù)</b>有什么用途?LabVIEW中<b class='flag-5'>定點數(shù)</b>應用解析

    FPGA里浮點數(shù)定點數(shù)表示法原理展示

    點數(shù)定點數(shù)表示法是我們在計算機中常用的表示方法 所以必須要弄懂原理,特別是在FPGA里面,由于FPG
    發(fā)表于 11-18 02:15 ?9258次閱讀
    在<b class='flag-5'>FPGA</b>里浮<b class='flag-5'>點數(shù)</b>與<b class='flag-5'>定點數(shù)</b>表示法原理展示

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

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

    FPGA定點數(shù)截位的基本準則

    FPGA內(nèi)部表示正負數(shù),小數(shù)的規(guī)則。兩者相比之下,定點數(shù)實現(xiàn)簡單,表達更為直觀,所以在很多時候FPGA通常使用定點數(shù)表示小數(shù)。
    發(fā)表于 06-19 10:44 ?2194次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>定點數(shù)</b>截位的基本準則