在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基本數學運算在FPGA中的實現算法仿真分析

電子設計 ? 來源:博客園 ? 作者:沒落騎士 ? 2020-12-25 14:02 ? 次閱讀

作者:沒落騎士

一、前言

FPGA以擅長高速并行數據處理而聞名,從有線/無線通信到圖像處理中各種DSP算法,再到現今火爆的AI應用,都離不開卷積、濾波、變換等基本的數學運算。但由于FPGA的硬件結構和開發特性使得其對很多算法不友好,之前本人零散地總結和轉載了些基本的數學運算在FPGA中的實現方式,今天做一個系統的總結歸納。

二、FPGA中的加減乘除

1.硬件資源

Xilinx 7系列的FPGA中有DSP Slice ,叫做“DSP48E1”這一專用硬件資源,這是一個功能強大的計算單元,單就用于基本運算的部分有加減單元和乘法器。詳見參考文獻1.

o4YBAF9uH6KAcCDkAAB5s7i_M8w954.png

因此可以直接用HDL語言中的加、減、乘符號實現變量與常量間運算操作以及變量與變量間操作。而四則運算中的除法沒有基本的邏輯計算單元可以對應,因此計算除法需要調用除法器IP核。

2.確認數據的表示范圍

有符號數:(補碼)-2^(N-1) ~ 2^(N-1)-1 如N = 8,則表示范圍是:-128 ~ 127.

無符號數:0~2^N-1 如N = 8,則表示范圍是:0~255.

定點數:2Q13 范圍是:-4~4-2^(-13) 精度是:2^(-13)

3.結果有效位寬

首先討論結果位寬問題。在FPGA中往往采用定點運算替代浮點運算來降低硬件資源占用率和計算延遲,其中的精髓就是精度與資源的權衡。若按照保留計算結果的全部精度,N bit數與Mbit數相加結果需要N+1bit(N>M)。N bit數與M bit數相乘之積需要N+M bit。而減法可以轉化為加法,除法則轉換為乘法和加減法的組合。如果操作數是定點小數,則在滿足以上準則的前提下,A與B相加(A小數點位數>B小數點位數),結果小數點位數與A相同;A與B相乘(小數點位數分別為p和q),結果小數點位數是p+q。

4.定點運算步驟

然而(話鋒一轉),在大多數場合下,不需要以上這么多位來保留計算結果,因為我們在進行數學運算時,已經知道輸入數據的大致范圍,一個數除以1000和除以1結果數據所需最小位寬能一樣么?加減運算的操作步驟是先對齊小數點位數,后加減。而乘法是先計算后取小數點。這實際上與十進制運算一致,我們看看具體的計算步驟:

整數之間加減以及乘法的統一步驟:預估結果位寬N --> 按照結果位寬擴展操作數符號位以防止溢出 --> 運算取低N位。

定點小數加減運算步驟:預估結果位寬N --> 得到結果小數點后位數 --> 對齊操作數整數位和小數位,確定擴展位寬M(M≥N) --> 加減運算取低M位。

定點小數乘法運算步驟:預估結果位寬N --> 得到結果小數點后位數 --> 擴展操作數位寬 --> 相乘取低N位

5. 變量與常量運算化簡

以上討論的均是兩變量之間的運算規則,當然結果位寬及格式準則是適用的。變量與常量的運算的優勢在于,可以將乘除法轉換成加減以及移位運算實現,從而降低計算復雜度和延遲。當常數項C為2的整數次冪(C = 2^p),則乘C等于變量左移p位,除以C等于變量右移p位。幾個在書中看到的幾個簡單示例:A*16 = A >1A除以3 = A*(0.25+0.0625+0.0156) = A>>2+A>>4+A>>6A除以5 = A*(0.125+0.0625+0.0156) = A>>3 + A>>4 + A>>6.其中乘法完全等價對應的移位相加操作,而除法的移位代替會損失精度。

三、如何計算特殊函數

FPGA內部的DSP Slice可以直接進行最基本的加法和乘法運算,但是對于其他比如對數、指數、三角函數、開根號等特殊函數就無能為力了。這時需要借助算法對這些特殊函數進行變換和簡化。FPGA實現復雜函數的常用手段一個是級數展開,再一個就是CORDIC算法。關于CORDIC的理論知識和具體內容詳見參考文獻2,這里主要闡述CORDIC的IP核調用以及應用示例。CORDIC算法就是通過一定的手段,將很多復雜的特殊函數變為相加移位運算,這一點對于硬件芯片實現來說非常友好。CORDIC分為旋轉模式和矢量模式,配合圓周坐標、線性坐標和雙曲線坐標會有六種組合,具體見下表:

o4YBAF9uH6eAYHStAAUPTubgJdM481.png

從表中發現,基本的乘除法、三角函數、反三角函數、雙曲函數、反雙曲函數、開根號都能夠直接求得,那其他函數怎么辦?

o4YBAF9uH6uAdk1gAAKsIU8Rl24196.png

常見的函數計算需求基本都能滿足,雖上述變換式對自變量定義域有限制,但同樣可以分析輸入數據的取值范圍并利用簡單的數學變換得到想要的結果。Xilinx同時提供了浮點IP核以及CORDIC IP核,前者調用簡單但占用資源大,延遲高,因此利用CORDIC算法計算函數是個較好的選擇。

四、CORDIC計算e^x Demo

1. 算法仿真分析

要計算e^x數值需要讓CORDIC工作在雙曲坐標的旋轉模式下,通過e^x = sinhx+coshx關系式間接求得。首先看下sinh和cosh函數的曲線,有個直觀認識。

我們用MATLAB毫不費力地驗證一下公式正確性:

在設計后也同樣要借助MATLAB進行仿真驗證。

2. CORDIC IP核

現在通過查看user guide得知CORDIC IP核的接口及主要特性。

o4YBAF9uH7GAeoe_AAEXmjcb690888.png

接口包括輸入笛卡爾數據輸入通道、相位輸入通道、全局信號以及數據輸出通道。該IP核有兩種結構:串行和并行,可根據數據吞吐量需求選擇,并行結構可以每個時鐘輸出一個計算結果。如果計算sinh和cosh,要向phase通道輸入相位信息,X_OUT是cosh(phase),Y_OUT是sinh(phase).輸入phase必須滿足數據范圍,否則出現不可預計結果。輸出幀結構及數據范圍如下:

pIYBAF9uH7OARASKAACJBvr-Sog572.png

其中輸入數據格式為2QN,輸出則是1QN。由于均是有符號數,也就是輸入整數部分3bit,輸出整數部分2bit。接下來對IP核進行配置,重點是第一頁,此處將其配置為計算sinh和cosh模式,采用并行優化的流水線結構。相位以角度為單位,輸入輸出位寬設置成16bit。

o4YBAF9uH7WAWgPKAAEbXDGFtVk789.png

3.HDL代碼設計及仿真驗證

設計代碼:
`timescale 1ns / 1ps

module cordic_ex#(parameter DIN_W = 16,
DOUT_W = 16)
(
input clk,
input [DIN_W-1:0] din,//2Q13
input din_vld,

output reg [DOUT_W+1-1:0] dout = 0,//2Q14
output reg dout_vld = 0
);

wire [DOUT_W*2-1 : 0] m_axis_dout_tdata;
wire m_axis_dout_tvalid;
wire signed [DOUT_W-1:0] sinh,cosh;

// ex = sinhx + coshx
always @(posedge clk)begin
dout end

assign sinh = m_axis_dout_tdata[DOUT_W*2-1 -:DOUT_W];
assign cosh = m_axis_dout_tdata[DOUT_W-1 -:DOUT_W];

always @(posedge clk)begin
if(m_axis_dout_tvalid)begin
dout_vld end
else
dout_vld end

cordic_0 cordic_cosh_sinh (
.aclk(clk), // input wire aclk
.s_axis_phase_tvalid(din_vld), // input wire s_axis_phase_tvalid
.s_axis_phase_tdata(din), // input wire [15 : 0] s_axis_phase_tdata
.m_axis_dout_tvalid(m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(m_axis_dout_tdata) // output wire [31 : 0] m_axis_dout_tdata
);

endmodule

cordic_ex

用MATLAB產生兩組數據,并將角度值定點化后作為設計模塊數據激勵:

pIYBAF9uH7uAccWfAAX_UP1GgPU919.png

testbench:
`timescale 1ns / 1ps

module cordic_ex_tb();

parameter CYC = 20;

reg clk;
reg [16-1:0] din;
reg din_vld;

wire signed [17-1:0] dout;
wire dout_vld;

cordic_ex#(.DIN_W(16),
.DOUT_W(16))
uut(
.clk (clk) ,
.din (din) ,//2Q13
.din_vld (din_vld) ,
.dout (dout) ,//2Q14
.dout_vld (dout_vld)
);

initial begin
clk = 1;
forever #(CYC/2) clk = ~clk;
end

initial begin
#1;
din = 0;
din_vld = 0;
#(CYC*10);

din_vld = 1;
din = 16'b0001010000011011;//pi * 1/5
#(CYC*1);
din = 16'b1110011011011110;//-pi * 1/4
#5;
$stop;
end

endmodule

cordic_ex_tb

仿真結果:

仿真波形表明,計算結果與MATLAB浮點運算相近,滿足一般計算需求。若想提高精度,可以增加CORDIC輸出數據位寬。

參考文獻:

1 ug479 7 Series DSP48E1 Slice User Guide.

2 Xilinx CORDIC算法(非常經典)_圖文_百度文庫 https://wenku.baidu.com/view/6c623aa8910ef12d2bf9e732.html

編輯:hfy


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

    關注

    554

    文章

    8058

    瀏覽量

    349696
  • FPGA
    +關注

    關注

    1630

    文章

    21781

    瀏覽量

    604913
  • Xilinx
    +關注

    關注

    71

    文章

    2169

    瀏覽量

    121843
  • 無線通信
    +關注

    關注

    58

    文章

    4595

    瀏覽量

    143724
收藏 人收藏

    評論

    相關推薦

    如何使用自然語言處理分析本數

    使用自然語言處理(NLP)分析本數據是一個復雜但系統的過程,涉及多個步驟和技術。以下是一個基本的流程,幫助你理解如何使用NLP來分析本數據: 1. 數據收集 收集文
    的頭像 發表于 12-05 15:27 ?365次閱讀

    三種常見平方根算法的電路設計及Verilog實現仿真

    一、平方根及三種常見平方根算法簡介 數學是物理的基礎,是廣大世界的基本組成部分,而數學運算數學理論的核心部分,數學運算有加減乘除乘方等基本
    的頭像 發表于 11-26 10:12 ?577次閱讀
    三種常見平方根<b class='flag-5'>算法</b>的電路設計及Verilog<b class='flag-5'>實現</b>與<b class='flag-5'>仿真</b>

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+內容簡介

    、AI芯片、多媒體處理芯片等)都是由四則運算器、濾波器、特殊信號發生器等基本算法電路構成的,熟練掌握這些基本算法電路是實現復雜算法電路的基礎
    發表于 11-21 17:14

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+介紹基礎硬件算法模塊

    數問題。因此,深入理解芯片所基于的算法是國產自主研發的關鍵。任何算法都是由加減四則運算、濾波器、特殊信號發生器等基本數學方法構成的,熟練掌握這些方法是
    發表于 11-21 17:05

    FPGA浮點四則運算實現過程

    由于定點的四則運算比較簡單,如加減法只要注意符號擴展,小數點對齊等問題即可。在本文中,運用在前一節描述的自定義浮點格式FPGA數的表示方法(下),完成浮點四則
    的頭像 發表于 11-16 11:19 ?538次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>中</b>浮點四則<b class='flag-5'>運算</b>的<b class='flag-5'>實現</b>過程

    邊緣計算在工業自動化的應用

    邊緣計算在工業自動化的應用日益廣泛,它通過將數據處理和計算能力移至靠近數據源的邊緣設備,實現了更高效、實時的工業自動化控制。以下是邊緣計算在工業自動化
    的頭像 發表于 10-24 14:30 ?552次閱讀

    云計算在大數據分析的應用

    云計算在大數據分析的應用廣泛且深入,它為用戶提供了存儲、計算、分析和預測的強大能力。以下是對云計算在大數據
    的頭像 發表于 10-24 09:18 ?545次閱讀

    PLC的邏輯運算方式有哪些

    PLC(可編程邏輯控制器)的邏輯運算方式主要包括以下幾種,這些邏輯運算在PLC編程扮演著至關重要的角色,用于實現各種復雜的控制邏輯。
    的頭像 發表于 07-24 16:55 ?748次閱讀

    神經網絡反向傳播算法的原理、數學推導及實現步驟

    傳播算法的原理、數學推導、實現步驟以及在深度學習的應用。 神經網絡概述 神經網絡是一種受人腦啟發的計算模型,由大量的神經元(或稱為節點)組成,每個神經元與其他神經元通過權重連接。神經
    的頭像 發表于 07-03 11:16 ?893次閱讀

    FPGA實現什么樣的算法

    FPGA功能如此強大,請問用FPGA實現或者比較適合實現什么樣的算法
    發表于 05-26 20:18

    基于FPGA的實時邊緣檢測系統設計,Sobel圖像邊緣檢測,FPGA圖像處理

    運行時, FPGA 并行運算平臺首先完成對攝像頭的初始化和寄存器配置,配置完成之后讀取實時的圖像數據存入 SDRAM 存儲器,在 FPGA 芯片內部并行
    發表于 05-24 07:45

    基于多速率DA的根升余弦濾波器的FPGA實現

    運算速度較慢。分布式算法(Distribute Arithmetic,DA)是另一種應用在FPGA中計算乘積和的算法。根據文獻[2],分布式算法
    發表于 03-25 14:21

    fpga仿真是什么

    FPGA仿真是一種驗證FPGA設計正確性的過程,主要用來分析設計電路邏輯關系的正確性。在FPGA設計
    的頭像 發表于 03-15 13:59 ?1584次閱讀

    運算放大器的工作原理和基本電路 使用運算放大器的電路設計

    ,其輸出信號可以是輸入信號加、減或微分、積分等數學運算的結果。由于早期應用于模擬計算機中用以實現數學運算,因而得名“運算放大器”。
    的頭像 發表于 02-25 16:43 ?7576次閱讀
    <b class='flag-5'>運算</b>放大器的工作原理和基本電路 使用<b class='flag-5'>運算</b>放大器的電路設計

    運算放大器的工作原理和基本電路

    運算放大器(Operational Amplifier,簡稱“運放”)是一種具有極高放大倍數的電路單元,通常結合反饋網絡共同組成某種功能模塊。它的核心特性是,其輸出信號可以是輸入信號經過加、減、微分、積分等數學運算后的結果。由于早期主要被應用于模擬計算機
    的頭像 發表于 02-06 11:36 ?1.5w次閱讀
    <b class='flag-5'>運算</b>放大器的工作原理和基本電路
    主站蜘蛛池模板: 天天躁夜夜| 一区二区在线观看高清| 四虎影视色费永久在线观看| 狠狠操亚洲| 全午夜免费一级毛片| 乱码精品一区二区三区| 国产精品天天看| 久久草在线观看| 午夜黄色影院| 激情视频综合网| 国产伦一区二区三区免费| 5566精品资源在线播放| 国产成人啪精品午夜在线观看 | 日韩毛片在线影视| 欧美性另类69xxx| 日本特级淫片免费看| 亚洲va中文字幕无码| 特黄色一级毛片| 性xxxxbbbb免费播放视频| 国产精品11页| 亚洲视频在线观看一区| 加勒比一本一道在线| 成人福利在线视频| 中文字幕一区二区三区四区| 99久久久久久久| 在线精品国产三级| 四虎成人影院网址| 经典三级一区在线播放| 久久久精品久久久久久久久久久| 丁香色婷婷| 国产乱码一区二区三区四川人| 又长又大又粗又硬3p免费视| 8050午夜一级二级全黄| 免费午夜视频| 狠狠干狠狠爱| 亚洲免费一| 四虎最新网址入口| 国产一区二区三区乱码| 国产美女视频一区二区二三区| 午夜寂寞视频在线观看| 视频在线观看免费网址|