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

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

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

FPGA加法截位處理方法介紹

pdh的FPGA ? 來(lái)源:pdh的FPGA ? 2024-04-18 16:53 ? 次閱讀

本模塊實(shí)現(xiàn)輸入與輸出位寬相同數(shù)據(jù)加法,并對(duì)結(jié)果進(jìn)行四舍五入截位,對(duì)標(biāo)matlab round函數(shù)。

`timescale 1ns/1ns


module data_in_width_out_width_add_round #
(
    parameter DATA_WIDTH   = 16                             
)
(
    // 系統(tǒng)接口
    input                               i_clk_sys       ,
    input                               i_rst           ,
        
    // 數(shù)據(jù)輸入
    input  signed   [DATA_WIDTH-1:0]    i_din_a         ,
    input                               i_din_a_vld     ,
    input  signed   [DATA_WIDTH-1:0]    i_din_b         ,
    input                               i_din_b_vld     ,
    
    // 數(shù)據(jù)輸出
    output signed   [DATA_WIDTH-1:0]    o_dout          ,
    output                              o_dout_vld  
);


/****************************************************************************/
/*  parameter
/****************************************************************************/


/****************************************************************************/
/*  signal
/****************************************************************************/
logic signed    [DATA_WIDTH-1+1:0]  din_add_result          ;
logic                               din_add_result_vld      ;
logic signed    [DATA_WIDTH-1+2:0]  din_add_result_round    ;
logic signed    [DATA_WIDTH-1:0]    din_add_result_truncate ;        
logic                               din_add_result_vld_1dly ;
logic                               din_add_result_vld_2dly ;        
   
/****************************************************************************/
/*  process
/****************************************************************************/
always @(posedge i_clk_sys or posedge i_rst)                    // 數(shù)據(jù)加法
begin 
    if (i_rst)
    begin 
        din_add_result <= {{DATA_WIDTH+1}{1'b0}};
    end
    else 
    begin 
        din_add_result <= i_din_a + i_din_b;
    end
end


always @(posedge i_clk_sys)                
begin 
    din_add_result_vld <= i_din_a_vld && i_din_b_vld;
end


always @(posedge i_clk_sys)                                     // 數(shù)據(jù)四舍五入,根據(jù)要舍棄的位寬加不同的值
begin 
    if (din_add_result[DATA_WIDTH] == 1'b0)                     // 每次加法先擴(kuò)充一個(gè)符號(hào)位,再對(duì)小數(shù)點(diǎn)位置進(jìn)行 加減 0.5
    begin 
        din_add_result_round <= {din_add_result[DATA_WIDTH],din_add_result + 1'b1}; 
    end 
    else                                                        // 4'b1000}; +4bit 1是為了modelsim仿真,modelsim仿真規(guī)定小數(shù)至少3位
    begin 
        din_add_result_round <= {din_add_result[DATA_WIDTH],din_add_result - 1'b1};  
    end
end


always @(posedge i_clk_sys or posedge i_rst)                    // 數(shù)據(jù)截位
begin 
    if (i_rst)
    begin 
        din_add_result_truncate <= {DATA_WIDTH{1'b0}};
    end
    else if (din_add_result_round[DATA_WIDTH+1] == din_add_result_round[DATA_WIDTH])
    begin                                                       // 如果數(shù)據(jù)沒有溢出,舍棄最后一位,賦值; 先補(bǔ)充符號(hào)位,再取表示起始bit為1,包含bit1并往上升DATA_WIDTH-1位
        din_add_result_truncate <= {din_add_result_round[DATA_WIDTH+1],din_add_result_round[1+ :(DATA_WIDTH-1)]};
    end
    else if (din_add_result_round[DATA_WIDTH+1] == 1'b0 && din_add_result_round[DATA_WIDTH] == 1'b1)
    begin                                                       // 如果正數(shù)溢出了,就給一個(gè)設(shè)置的位寬bit正數(shù)最大值,'h7fff 
        din_add_result_truncate <= {1'b0,{(DATA_WIDTH-1){1'b1}}};
    end
    else if (din_add_result_round[DATA_WIDTH+1] == 1'b1 && din_add_result_round[DATA_WIDTH] == 1'b0)
    begin                                                       // 如果負(fù)數(shù)溢出了,就給一個(gè)設(shè)置的位寬bit負(fù)數(shù)最大值,'h8000
        din_add_result_truncate <= {1'b1,{(DATA_WIDTH-1){1'b0}}};
    end    
end


always @(posedge i_clk_sys)                                     // 數(shù)據(jù)有效流水打拍
begin 
    din_add_result_vld_1dly <= din_add_result_vld;
    din_add_result_vld_2dly <= din_add_result_vld_1dly;


    o_dout                  <= din_add_result_truncate;
    o_dout_vld              <= din_add_result_vld_2dly;
end


endmodule

代碼中如果直接截位,數(shù)據(jù)的輸出將會(huì)產(chǎn)生直流,所以需要對(duì)數(shù)據(jù)的符號(hào)位進(jìn)行判斷,并進(jìn)行處理。簡(jiǎn)單的思路如下:

1.數(shù)據(jù)先進(jìn)行加法。

2.對(duì)加法后的結(jié)果,進(jìn)行判斷,正數(shù)+0.5,負(fù)數(shù)-0.5,此操作用于去除直流。

3.再對(duì)去除直流后的結(jié)果,進(jìn)行需要的截位取值,例如16bit+16bit=17bit,而最終的輸出結(jié)果,如果要16bit,那就去掉末位,也可以只要15bit,去掉末2bit,只要bit15-bit2。

上述代碼是簡(jiǎn)單的例子處理,輸入進(jìn)來(lái)的兩種數(shù)據(jù)同位寬,輸出也用同位寬輸出。后續(xù)可以改進(jìn)。



審核編輯:劉清

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

    關(guān)注

    1625

    文章

    21636

    瀏覽量

    601308
  • matlab
    +關(guān)注

    關(guān)注

    182

    文章

    2960

    瀏覽量

    230044

原文標(biāo)題:FPGA加法截位處理

文章出處:【微信號(hào):pdh的FPGA,微信公眾號(hào):pdh的FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在FPGA中實(shí)現(xiàn)高效的compressor加法樹呢?

    大規(guī)模的整數(shù)加法在數(shù)字信號(hào)處理和圖像視頻處理領(lǐng)域應(yīng)用很多,其對(duì)資源消耗很多,如何能依據(jù)FPGA物理結(jié)構(gòu)特點(diǎn)來(lái)有效降低加法樹的資源和改善其時(shí)序
    的頭像 發(fā)表于 11-08 09:06 ?1415次閱讀
    如何在<b class='flag-5'>FPGA</b>中實(shí)現(xiàn)高效的compressor<b class='flag-5'>加法</b>樹呢?

    為什么研究浮點(diǎn)加法運(yùn)算,對(duì)FPGA實(shí)現(xiàn)方法很有必要?

    處理等方面受到了限制,由于FPGA中關(guān)于浮點(diǎn)數(shù)的運(yùn)算只能自行設(shè)計(jì),因此,研究浮點(diǎn)加法運(yùn)算的FPGA實(shí)現(xiàn)方法很有必要。
    發(fā)表于 07-05 06:21

    如何利用FPGA實(shí)現(xiàn)高速流水線浮點(diǎn)加法器研究?

    處理等方面受到了限制,為什么研究浮點(diǎn)加法運(yùn)算的FPGA實(shí)現(xiàn)方法很有必要? 因?yàn)?b class='flag-5'>FPGA中關(guān)于浮點(diǎn)數(shù)的運(yùn)算只能自行設(shè)計(jì) 。
    發(fā)表于 08-15 08:00

    32位處理器的開發(fā)與8位處理器的開發(fā)有哪些明顯的不同?

    32位處理器的開發(fā)與8位處理器的開發(fā)有哪些明顯的不同?開發(fā)一個(gè)32位的嵌入式系統(tǒng)需要哪些工具和環(huán)境呢?32位嵌入式系統(tǒng)的開發(fā)過程中存在哪些技術(shù)難點(diǎn)?有什么方法去應(yīng)對(duì)呢?
    發(fā)表于 04-19 08:11

    求一種在FPGA上實(shí)現(xiàn)單精度浮點(diǎn)加法運(yùn)算的方法

    介紹一種在FPGA上實(shí)現(xiàn)的單精度浮點(diǎn)加法運(yùn)算器,運(yùn)算器算法的實(shí)現(xiàn)考慮了FPGA器件本身的特點(diǎn),算法處理流程的拆分和模塊的拆分,便于流水設(shè)計(jì)的
    發(fā)表于 04-29 06:27

    Intel 64位處理器,Intel 64位處理器結(jié)構(gòu)原理

    Intel 64位處理器,Intel 64位處理器結(jié)構(gòu)原理 現(xiàn)在人們廣泛使用的是由32位微處理器構(gòu)成的計(jì)算系統(tǒng),但是32位的計(jì)算和操作系統(tǒng)不能支持
    發(fā)表于 03-26 15:07 ?3288次閱讀

    華清遠(yuǎn)見FPGA代碼-使用函數(shù)實(shí)現(xiàn)簡(jiǎn)單的八位處理

    華清遠(yuǎn)見FPGA代碼-使用函數(shù)實(shí)現(xiàn)簡(jiǎn)單的八位處理
    發(fā)表于 10-27 18:07 ?4次下載

    FPGA信號(hào)位策略研究

    FPGA中,隨著信號(hào)處理的層次加深,對(duì)信號(hào)進(jìn)行乘、累加、濾波等運(yùn)算后,可能輸入時(shí)僅為8位位寬的信號(hào)會(huì)擴(kuò)展成幾十位位寬,位寬越寬,占用的硬件資源就越多,但位寬超過一定范圍后,位寬的增寬并不會(huì)對(duì)處理
    發(fā)表于 11-18 12:37 ?1966次閱讀
    <b class='flag-5'>FPGA</b>信號(hào)<b class='flag-5'>截</b>位策略研究

    單片機(jī)位處理指令的使用方法

    1.位處理指令的一般性說明 在分類時(shí)將位傳送歸入傳送指令類,條件轉(zhuǎn)移歸入程序控制類。其余位操作歸為位處理指令。 位邏輯運(yùn)算以C為目標(biāo),/ b i t表示?。╞ i t)的非值運(yùn)算,但不影響原值。
    發(fā)表于 04-10 16:22 ?2586次閱讀
    單片機(jī)<b class='flag-5'>位處理</b>指令的使用<b class='flag-5'>方法</b>

    揭秘FPGA跨時(shí)鐘域處理的三大方法

    跨時(shí)鐘域處理方法,這三種方法可以說是 FPGA 界最常用也最實(shí)用的方法,這三種方法包含了單 b
    的頭像 發(fā)表于 12-05 16:41 ?1603次閱讀

    介紹3種方法跨時(shí)鐘域處理方法

    介紹3種跨時(shí)鐘域處理方法,這3種方法可以說是FPGA界最常用也最實(shí)用的方法,這三種
    的頭像 發(fā)表于 09-18 11:33 ?2.2w次閱讀
    <b class='flag-5'>介紹</b>3種<b class='flag-5'>方法</b>跨時(shí)鐘域<b class='flag-5'>處理</b><b class='flag-5'>方法</b>

    fpga實(shí)現(xiàn)加法和減法運(yùn)算的方法是什么

    FPGA實(shí)現(xiàn)加法和減法運(yùn)算非常簡(jiǎn)單,實(shí)現(xiàn)乘法和除法可以用IP,那實(shí)現(xiàn)對(duì)數(shù)和指數(shù)運(yùn)算該用什么呢?
    發(fā)表于 08-05 09:37 ?1365次閱讀
    <b class='flag-5'>fpga</b>實(shí)現(xiàn)<b class='flag-5'>加法</b>和減法運(yùn)算的<b class='flag-5'>方法</b>是什么

    為什么研究浮點(diǎn)加法運(yùn)算,對(duì)FPGA實(shí)現(xiàn)方法很有必要?

    ,浮點(diǎn)加法器是現(xiàn)代信號(hào)處理系統(tǒng)中最重要的部件之一。FPGA是當(dāng)前數(shù)字電路研究開發(fā)的一種重要實(shí)現(xiàn)形式,它與全定制ASIC電路相比,具有開發(fā)周期短、成本低等優(yōu)點(diǎn)。 但多數(shù)FPGA不支持浮點(diǎn)
    的頭像 發(fā)表于 09-22 10:40 ?994次閱讀
    為什么研究浮點(diǎn)<b class='flag-5'>加法</b>運(yùn)算,對(duì)<b class='flag-5'>FPGA</b>實(shí)現(xiàn)<b class='flag-5'>方法</b>很有必要?

    基于FPGA實(shí)現(xiàn)Mem加法

    前段時(shí)間和幾個(gè)人閑談,看看在FPGA里面實(shí)現(xiàn)一個(gè)Mem加法器怎么玩兒
    的頭像 發(fā)表于 10-17 10:22 ?562次閱讀
    基于<b class='flag-5'>FPGA</b>實(shí)現(xiàn)Mem<b class='flag-5'>加法</b>器

    HarmonyOS開發(fā)實(shí)例:【手勢(shì)屏】

    基于手勢(shì)處理屏能力,介紹了手勢(shì)屏的實(shí)現(xiàn)過程。樣例主要包括以下功能
    的頭像 發(fā)表于 04-11 22:38 ?442次閱讀
    HarmonyOS開發(fā)實(shí)例:【手勢(shì)<b class='flag-5'>截</b>屏】