国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

基于直方圖算法進行FPGA架構設計

454398 ? 來源:AI加速微信公眾號 ? 作者:AI加速微信公眾號 ? 2020-12-10 16:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

直方圖統計在圖像增強和目標檢測領域有重要應用,比如直方圖均衡,梯度直方圖。直方圖的不同種類和統計方法請見之前的文章。本章就是用FPGA來進行直方圖的計算,并且利用FPGA的特性對計算過程進行加速。安排如下:

首先基于直方圖算法進行FPGA架構設計,這里主要考慮了如何加速以及FPGA資源的利用兩個因素;最后基于system Verilog搭建一個驗證系統。

FPGA設計架構

不論是圖像灰度直方圖還是梯度直方圖,本質上是對數據的分布進行計數。從FPGA角度來看,只關心以下幾點:

1) 根據數據大小確定其分布區間,統計分布在不同區間的數據個數,區間的大小可以調節,比如灰度直方圖區間為1,梯度直方圖通常大于1;

2) 如何利用FPGA對直方圖統計進行加速,以及如何考慮到芯片有限資源;

首先來考慮加速方式,直方圖統計過程用偽代碼表示為:

For(int i=0;i Index = get_index(data[i]);
Hist[index]++;
}

Get_index函數是為了確定數據屬于哪個區間,如果區間大小為1,那么index就是數據自身。如果區間是平均分布,那么就需要進行數據的大小比較。如果區間大小是2的冪次,那么index只需要數據進行移位得到。

FPGA在加速計算中最主要就是利用并行化和流水線,并行化就是將一個任務拆解成多個子任務,多個子任務并行完成。而流水線是在處理一個子任務的時候,下一個來的子任務也可以進行處理,處理模塊不會等待。流水線本質上是對子任務也進行“分割”,分割的每一塊可以在處理模塊中同時進行。

統計N個數據,可以將N分成M份,在FPGA上同時進行M個統計,用偽代碼表示為:

For(int k=0;k //并行化
For(int i=0;i Index = get_index(data[k][i]);
Hist[k][index]++;
}
}

如果區間不是2的冪次,就需要比較器,這樣并行M次,就需要M個同等比較器,這對資源消耗很大。因此目前設計僅僅支持2的冪次的區間。整個設計架構如圖1.2。

圖2.1 流水線處理

圖2.2 直方圖統計架構

主要分為以下幾個模塊:

1)statis:這個是核心計算模塊,統計數據分布。ram中存放直方圖統計數據,地址對應著數據分布區間。這里有一個問題需要考慮,在對ram中直方圖統計數據計數時,需要讀出然后計數。如果ram讀端口沒有寄存器,那么讀出來直接加1,再寫入。但是這樣并不好,因為ram不經過寄存器時序不好。所以增加了一級寄存器,這樣就造成了寫入的延時,那么有可能下一次數據來臨也會讀取同樣地址的數據,此時讀取到的直方圖數據就是還沒有寫入的。為了解決這個問題,判斷進入的前后兩個數據是否相同,如果相同就不寫入而繼續計數,如果不同就寫入。并行多個statis模塊的代碼為:

genvar i;
generate
for(i=0;i

statis #(
.PIX_BW(PIX_BW),
.HIST_BW(HIST_BW),
.ADDR_BW(HIST_LEN_BW),
.BIN_W(BIN_W)

)u_statis(
.clk(clk),
.rst(rst),
.clr(clr),

.enable(1'b1),
.pix_valid(pix_valid),
.pix(img_i[i*PIX_BW +: PIX_BW]),

.hist_rd(branch_hist_rd),
.hist_raddr(branch_hist_raddr),
.hist(branch_hist[i*HIST_BW +: HIST_BW])
);

end
endgenerate

2)serders:這個是并轉串。M個statis模塊會產生M組hist結果,這些結果還要進行求和,那么就要用到加法樹,如果M較大,會造成加法樹很大,多以這里加了serders可以調節加法樹資源。

3) addTree:加法樹。
module addTree #(
parameter DATA_BW = 32,//bit width of data
parameter TREE_DEPTH = 3,//depth of the add tree
parameter ADD_N = 4//add number
)
(
input clk,
input rst,
input [ADD_N*DATA_BW-1:0] adnd_x,
input [ADD_N*DATA_BW-1:0] adnd_y,
input adnd_valid,
output reg[DATA_BW-1:0] finl_sum,
output reg finl_sum_valid

);

reg [TREE_DEPTH-1:0]midl_valid;

genvar dept_i, leaf_i;
generate
for(dept_i=TREE_DEPTH-1;dept_i>=0;dept_i=dept_i-1)begin: ADD_DPET
localparam LEAF_N = 2**dept_i;

wire[DATA_BW-1:0] midl_sum[LEAF_N-1:0];

for(leaf_i=0;leaf_i

reg [DATA_BW-1:0] midl_add_x;
reg [DATA_BW-1:0] midl_add_y;

if(dept_i==TREE_DEPTH-1)begin
always @(posedge clk)begin
midl_add_x midl_add_y end
end
else begin
always @(posedge clk)begin
midl_add_x midl_add_y end
end

adder #(
.DATA_BW(DATA_BW)
)
u_adder(
.adnd_x(midl_add_x),
.adnd_y(midl_add_y),
.sum(midl_sum[leaf_i])

);

end

if(dept_i==TREE_DEPTH-1)
always @(posedge clk)begin
midl_valid[dept_i] end
else
always @(posedge clk)begin
midl_valid[dept_i] end

end

endgenerate

always @(posedge clk)begin
finl_sum end

always @(posedge clk)begin
if(rst)
finl_sum_valid else
finl_sum_valid end

endmodule

4) accum:累加器。如果加法樹沒有完成M個hist數據的求和,那么就需要通過累加器來完成。

o4YBAF9uDqWAayv7AAByjAeQGbU256.png

圖2.3 對ram的處理

驗證結構

1) img_trans:這個是隨機化圖像數據定義,主要通過SV中constraint來對圖像大小做一些約束;

class img_trans;

rand int img_w;
rand int img_h;
rand int img_blank;
rand logic[`PIX_BW-1:0] img[`MAX_IMG_W*`MAX_IMG_H];

constraint img_cfg_cnst{
img_w img_w > 0;
img_w % `PARALL == 0;
img_h img_h > 0;
img_blank img_blank >= 0;

}

extern function void write(input string f_name);

endclass

2) driver:產生image并且發送給DUT,同時通過mailbox發送給ref_model用于對比;
class img_obj;
logic [`PIX_BW-1:0] img_que[$];
endclass

class driver;

int img_w;
int img_h;
int img_blank;
logic [`PARALL*`PIX_BW-1:0] img;
logic [`PIX_BW-1:0] img_ele;
img_obj imgObj;
img_trans imgTrans;

extern task drive(mailbox img_mbx, virtual img_inf.test imgInf);

endclass

3) ref_model:自己統計直方圖和DUT的結果進行比對;

class ref_modl;

logic [`PIX_BW-1:0] img;
int addr;
img_obj imgObj;
int hist[`HIST_LEN];

extern task calc(input logic clk, mailbox img_mbx);
extern task comp(virtual img_inf.test imgInf);
extern task run(input logic clk, mailbox img_mbx, virtual img_inf.test imgInf);
extern function void clear();

endclass

o4YBAF9uDqeAUrozAAEPRvgT6Rs060.png

圖3.1 驗證架構圖

最后添加一下modelsim仿真波形文件和結果,純粹為了增加篇幅。

圖3.2 modelsim仿真波形和結果

編輯:hfy

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

    關注

    1660

    文章

    22408

    瀏覽量

    636247
  • 直方圖
    +關注

    關注

    0

    文章

    21

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    X (Twitter) 推薦系統架構設計深度解析

    推薦系統到底是如何理解海量用戶與內容的?本期文章帶你深入 X (前 Twitter) 推薦算法庫的底層源碼。解構推薦系統關鍵的“漏斗型”架構——從高效的雙塔召回到復雜精妙的 Transformer
    的頭像 發表于 02-25 23:56 ?4763次閱讀

    AMD UltraScale架構:高性能FPGA與SoC的技術剖析

    AMD UltraScale架構:高性能FPGA與SoC的技術剖析 在當今的電子設計領域,高性能FPGA和MPSoC/RFSoC的需求日益增長。AMD的UltraScale架構憑借其創
    的頭像 發表于 12-15 14:35 ?555次閱讀

    基于DSP與FPGA異構架構的高性能伺服控制系統設計

    DSP+FPGA架構在伺服控制模塊中的應用,成功解決了高性能伺服系統對實時性、精度和復雜度的多重需求。通過合理的功能劃分,DSP專注于復雜算法和上層控制,FPGA處理高速硬件任務,兩者
    的頭像 發表于 12-04 15:38 ?570次閱讀
    基于DSP與<b class='flag-5'>FPGA</b>異構<b class='flag-5'>架構</b>的高性能伺服控制系統設計

    AES和SM4算法的可重構分析

    一、AES和SM4算法特點分析 基于前面幾篇分享,我們對AES和SM4的算法流程有了較為清晰的認識,接下來對AES和SM4算法的共同點進行分析,得出二者的可重
    發表于 10-23 07:26

    FPGA+DSP/ARM架構開發與應用

    自中高端FPGA技術成熟以來,FPGA+DSP/ARM架構的硬件設計在眾多工業領域得到廣泛應用。例如無線通信、圖像處理、工業控制、儀器測量等。
    的頭像 發表于 10-15 10:39 ?4274次閱讀
    <b class='flag-5'>FPGA</b>+DSP/ARM<b class='flag-5'>架構</b>開發與應用

    基于FPGA的CLAHE圖像增強算法設計

    CLAHE圖像增強算法又稱為對比度有限的自適應直方圖均衡算法,其算法原理是通過有限的調整圖像局部對比度來增強有效信號和抑制噪聲信號。
    的頭像 發表于 10-15 10:14 ?648次閱讀
    基于<b class='flag-5'>FPGA</b>的CLAHE圖像增強<b class='flag-5'>算法</b>設計

    25年11月上海FPGA算法實現與應用技術高級研修分享

    。希望有更多的朋友參與其中,一起深入研究和探討,一起成長。   適合參加的對象:適合于使用FPGA器件進行科研和產品開發的工程技術人員,也適合于相關領域的教師和研究生。參加學習的學員只需要具有
    發表于 10-11 11:55

    TensorRT-LLM的大規模專家并行架構設

    之前文章已介紹引入大規模 EP 的初衷,本篇將繼續深入介紹 TensorRT-LLM 的大規模專家并行架構設計與創新實現。
    的頭像 發表于 09-23 14:42 ?1103次閱讀
    TensorRT-LLM的大規模專家并行<b class='flag-5'>架構設</b>計

    AI的核心操控:從算法到硬件的協同進化

    到頂層的應用算法,共同構成AI的“智能引擎”。 算法層:模型架構與訓練控制 現代AI的核心是深度學習算法,其操控依賴于神經網絡的結構設計和訓
    的頭像 發表于 09-08 17:51 ?983次閱讀

    深入剖析RabbitMQ高可用架構設

    在微服務架構中,消息隊列故障導致的系統不可用率高達27%!如何構建一個真正可靠的消息中間件架構?本文將深入剖析RabbitMQ高可用設計的核心要點。
    的頭像 發表于 08-18 11:19 ?955次閱讀

    基于FPGA實現FOC算法之PWM模塊設計

    哈嘍,大家好,從今天開始正式帶領大家從零到一,在FPGA平臺上實現FOC算法,整個算法的框架如下圖所示,如果大家對算法的原理不是特別清楚的話,可以先去百度上學習一下,本教程著重介紹實現
    的頭像 發表于 07-17 15:21 ?3490次閱讀
    基于<b class='flag-5'>FPGA</b>實現FOC<b class='flag-5'>算法</b>之PWM模塊設計

    基于FPGA的壓縮算法加速實現

    本設計中,計劃實現對文件的壓縮及解壓,同時優化壓縮中所涉及的信號處理和計算密集型功能,實現對其的加速處理。本設計的最終目標是證明在充分并行化的硬件體系結構 FPGA 上實現該算法時,可以大大提高該算法
    的頭像 發表于 07-10 11:09 ?2389次閱讀
    基于<b class='flag-5'>FPGA</b>的壓縮<b class='flag-5'>算法</b>加速實現

    【高云GW5AT-LV60 開發套件試用體驗】基于開發板進行深度學習實踐,并盡量實現皮膚病理圖片的識別

    說了。 首先想先對一張圖片進行相關算法的處理,不如比較開源的有對輸入的灰度圖像執行自適應直方圖均衡化 (AHE)。或者 CLAHE(Contrast Limited Adaptive Histogram
    發表于 06-11 22:35

    Xilinx Ultrascale系列FPGA的時鐘資源與架構解析

    Ultrascale是賽靈思開發的支持包含步進功能的增強型FPGA架構,相比7系列的28nm工藝,Ultrascale采用20nm的工藝,主要有2個系列:Kintex和Virtex
    的頭像 發表于 04-24 11:29 ?2604次閱讀
    Xilinx Ultrascale系列<b class='flag-5'>FPGA</b>的時鐘資源與<b class='flag-5'>架構</b>解析

    MRAM存儲替代閃存,FPGA升級新技術

    優化的架構設計和成熟的制程技術,具備內置的硬擦除器、錯誤檢測和校正機制,為用戶提供了可靠的開發環境。用戶可利用最新的Radiant工具,直接實現MRAM的編程接口,支持多種存儲容量和數據速率。利用這些FPGA器件,用戶可以受益于低功耗F
    發表于 03-08 00:10 ?1960次閱讀