91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

基于直方圖算法進(jìn)行FPGA架構(gòu)設(shè)計(jì)

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

掃碼添加小助手

加入工程師交流群

引言

直方圖統(tǒng)計(jì)在圖像增強(qiáng)和目標(biāo)檢測(cè)領(lǐng)域有重要應(yīng)用,比如直方圖均衡,梯度直方圖。直方圖的不同種類(lèi)和統(tǒng)計(jì)方法請(qǐng)見(jiàn)之前的文章。本章就是用FPGA來(lái)進(jìn)行直方圖的計(jì)算,并且利用FPGA的特性對(duì)計(jì)算過(guò)程進(jìn)行加速。安排如下:

首先基于直方圖算法進(jìn)行FPGA架構(gòu)設(shè)計(jì),這里主要考慮了如何加速以及FPGA資源的利用兩個(gè)因素;最后基于system Verilog搭建一個(gè)驗(yàn)證系統(tǒng)。

FPGA設(shè)計(jì)架構(gòu)

不論是圖像灰度直方圖還是梯度直方圖,本質(zhì)上是對(duì)數(shù)據(jù)的分布進(jìn)行計(jì)數(shù)。從FPGA角度來(lái)看,只關(guān)心以下幾點(diǎn):

1) 根據(jù)數(shù)據(jù)大小確定其分布區(qū)間,統(tǒng)計(jì)分布在不同區(qū)間的數(shù)據(jù)個(gè)數(shù),區(qū)間的大小可以調(diào)節(jié),比如灰度直方圖區(qū)間為1,梯度直方圖通常大于1;

2) 如何利用FPGA對(duì)直方圖統(tǒng)計(jì)進(jìn)行加速,以及如何考慮到芯片有限資源;

首先來(lái)考慮加速方式,直方圖統(tǒng)計(jì)過(guò)程用偽代碼表示為:

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

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

FPGA在加速計(jì)算中最主要就是利用并行化和流水線,并行化就是將一個(gè)任務(wù)拆解成多個(gè)子任務(wù),多個(gè)子任務(wù)并行完成。而流水線是在處理一個(gè)子任務(wù)的時(shí)候,下一個(gè)來(lái)的子任務(wù)也可以進(jìn)行處理,處理模塊不會(huì)等待。流水線本質(zhì)上是對(duì)子任務(wù)也進(jìn)行“分割”,分割的每一塊可以在處理模塊中同時(shí)進(jìn)行。

統(tǒng)計(jì)N個(gè)數(shù)據(jù),可以將N分成M份,在FPGA上同時(shí)進(jìn)行M個(gè)統(tǒng)計(jì),用偽代碼表示為:

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

如果區(qū)間不是2的冪次,就需要比較器,這樣并行M次,就需要M個(gè)同等比較器,這對(duì)資源消耗很大。因此目前設(shè)計(jì)僅僅支持2的冪次的區(qū)間。整個(gè)設(shè)計(jì)架構(gòu)如圖1.2。

圖2.1 流水線處理

圖2.2 直方圖統(tǒng)計(jì)架構(gòu)

主要分為以下幾個(gè)模塊:

1)statis:這個(gè)是核心計(jì)算模塊,統(tǒng)計(jì)數(shù)據(jù)分布。ram中存放直方圖統(tǒng)計(jì)數(shù)據(jù),地址對(duì)應(yīng)著數(shù)據(jù)分布區(qū)間。這里有一個(gè)問(wèn)題需要考慮,在對(duì)ram中直方圖統(tǒng)計(jì)數(shù)據(jù)計(jì)數(shù)時(shí),需要讀出然后計(jì)數(shù)。如果ram讀端口沒(méi)有寄存器,那么讀出來(lái)直接加1,再寫(xiě)入。但是這樣并不好,因?yàn)閞am不經(jīng)過(guò)寄存器時(shí)序不好。所以增加了一級(jí)寄存器,這樣就造成了寫(xiě)入的延時(shí),那么有可能下一次數(shù)據(jù)來(lái)臨也會(huì)讀取同樣地址的數(shù)據(jù),此時(shí)讀取到的直方圖數(shù)據(jù)就是還沒(méi)有寫(xiě)入的。為了解決這個(gè)問(wèn)題,判斷進(jìn)入的前后兩個(gè)數(shù)據(jù)是否相同,如果相同就不寫(xiě)入而繼續(xù)計(jì)數(shù),如果不同就寫(xiě)入。并行多個(gè)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:這個(gè)是并轉(zhuǎn)串。M個(gè)statis模塊會(huì)產(chǎn)生M組hist結(jié)果,這些結(jié)果還要進(jìn)行求和,那么就要用到加法樹(shù),如果M較大,會(huì)造成加法樹(shù)很大,多以這里加了serders可以調(diào)節(jié)加法樹(shù)資源。

3) addTree:加法樹(shù)。
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:累加器。如果加法樹(shù)沒(méi)有完成M個(gè)hist數(shù)據(jù)的求和,那么就需要通過(guò)累加器來(lái)完成。

o4YBAF9uDqWAayv7AAByjAeQGbU256.png

圖2.3 對(duì)ram的處理

驗(yàn)證結(jié)構(gòu)

1) img_trans:這個(gè)是隨機(jī)化圖像數(shù)據(jù)定義,主要通過(guò)SV中constraint來(lái)對(duì)圖像大小做一些約束;

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:產(chǎn)生image并且發(fā)送給DUT,同時(shí)通過(guò)mailbox發(fā)送給ref_model用于對(duì)比;
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:自己統(tǒng)計(jì)直方圖和DUT的結(jié)果進(jìn)行比對(duì);

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 驗(yàn)證架構(gòu)圖

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

圖3.2 modelsim仿真波形和結(jié)果

編輯:hfy

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

    關(guān)注

    1660

    文章

    22412

    瀏覽量

    636285
  • 直方圖
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    X (Twitter) 推薦系統(tǒng)架構(gòu)設(shè)計(jì)深度解析

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

    AMD UltraScale架構(gòu):高性能FPGA與SoC的技術(shù)剖析

    AMD UltraScale架構(gòu):高性能FPGA與SoC的技術(shù)剖析 在當(dāng)今的電子設(shè)計(jì)領(lǐng)域,高性能FPGA和MPSoC/RFSoC的需求日益增長(zhǎng)。AMD的UltraScale架構(gòu)憑借其創(chuàng)
    的頭像 發(fā)表于 12-15 14:35 ?557次閱讀

    基于DSP與FPGA異構(gòu)架構(gòu)的高性能伺服控制系統(tǒng)設(shè)計(jì)

    DSP+FPGA架構(gòu)在伺服控制模塊中的應(yīng)用,成功解決了高性能伺服系統(tǒng)對(duì)實(shí)時(shí)性、精度和復(fù)雜度的多重需求。通過(guò)合理的功能劃分,DSP專(zhuān)注于復(fù)雜算法和上層控制,FPGA處理高速硬件任務(wù),兩者
    的頭像 發(fā)表于 12-04 15:38 ?573次閱讀
    基于DSP與<b class='flag-5'>FPGA</b>異構(gòu)<b class='flag-5'>架構(gòu)</b>的高性能伺服控制系統(tǒng)設(shè)計(jì)

    AES和SM4算法的可重構(gòu)分析

    一、AES和SM4算法特點(diǎn)分析 基于前面幾篇分享,我們對(duì)AES和SM4的算法流程有了較為清晰的認(rèn)識(shí),接下來(lái)對(duì)AES和SM4算法的共同點(diǎn)進(jìn)行分析,得出二者的可重
    發(fā)表于 10-23 07:26

    FPGA+DSP/ARM架構(gòu)開(kāi)發(fā)與應(yīng)用

    自中高端FPGA技術(shù)成熟以來(lái),FPGA+DSP/ARM架構(gòu)的硬件設(shè)計(jì)在眾多工業(yè)領(lǐng)域得到廣泛應(yīng)用。例如無(wú)線通信、圖像處理、工業(yè)控制、儀器測(cè)量等。
    的頭像 發(fā)表于 10-15 10:39 ?4279次閱讀
    <b class='flag-5'>FPGA</b>+DSP/ARM<b class='flag-5'>架構(gòu)</b>開(kāi)發(fā)與應(yīng)用

    基于FPGA的CLAHE圖像增強(qiáng)算法設(shè)計(jì)

    CLAHE圖像增強(qiáng)算法又稱(chēng)為對(duì)比度有限的自適應(yīng)直方圖均衡算法,其算法原理是通過(guò)有限的調(diào)整圖像局部對(duì)比度來(lái)增強(qiáng)有效信號(hào)和抑制噪聲信號(hào)。
    的頭像 發(fā)表于 10-15 10:14 ?650次閱讀
    基于<b class='flag-5'>FPGA</b>的CLAHE圖像增強(qiáng)<b class='flag-5'>算法</b>設(shè)計(jì)

    25年11月上海FPGA算法實(shí)現(xiàn)與應(yīng)用技術(shù)高級(jí)研修分享

    。希望有更多的朋友參與其中,一起深入研究和探討,一起成長(zhǎng)。   適合參加的對(duì)象:適合于使用FPGA器件進(jìn)行科研和產(chǎn)品開(kāi)發(fā)的工程技術(shù)人員,也適合于相關(guān)領(lǐng)域的教師和研究生。參加學(xué)習(xí)的學(xué)員只需要具有
    發(fā)表于 10-11 11:55

    TensorRT-LLM的大規(guī)模專(zhuān)家并行架構(gòu)設(shè)計(jì)

    之前文章已介紹引入大規(guī)模 EP 的初衷,本篇將繼續(xù)深入介紹 TensorRT-LLM 的大規(guī)模專(zhuān)家并行架構(gòu)設(shè)計(jì)與創(chuàng)新實(shí)現(xiàn)。
    的頭像 發(fā)表于 09-23 14:42 ?1106次閱讀
    TensorRT-LLM的大規(guī)模專(zhuān)家并行<b class='flag-5'>架構(gòu)設(shè)</b>計(jì)

    AI的核心操控:從算法到硬件的協(xié)同進(jìn)化

    到頂層的應(yīng)用算法,共同構(gòu)成AI的“智能引擎”。 算法層:模型架構(gòu)與訓(xùn)練控制 現(xiàn)代AI的核心是深度學(xué)習(xí)算法,其操控依賴(lài)于神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)設(shè)計(jì)和訓(xùn)
    的頭像 發(fā)表于 09-08 17:51 ?985次閱讀

    深入剖析RabbitMQ高可用架構(gòu)設(shè)計(jì)

    在微服務(wù)架構(gòu)中,消息隊(duì)列故障導(dǎo)致的系統(tǒng)不可用率高達(dá)27%!如何構(gòu)建一個(gè)真正可靠的消息中間件架構(gòu)?本文將深入剖析RabbitMQ高可用設(shè)計(jì)的核心要點(diǎn)。
    的頭像 發(fā)表于 08-18 11:19 ?956次閱讀

    基于FPGA實(shí)現(xiàn)FOC算法之PWM模塊設(shè)計(jì)

    哈嘍,大家好,從今天開(kāi)始正式帶領(lǐng)大家從零到一,在FPGA平臺(tái)上實(shí)現(xiàn)FOC算法,整個(gè)算法的框架如下圖所示,如果大家對(duì)算法的原理不是特別清楚的話,可以先去百度上學(xué)習(xí)一下,本教程著重介紹實(shí)現(xiàn)
    的頭像 發(fā)表于 07-17 15:21 ?3493次閱讀
    基于<b class='flag-5'>FPGA</b>實(shí)現(xiàn)FOC<b class='flag-5'>算法</b>之PWM模塊設(shè)計(jì)

    基于FPGA的壓縮算法加速實(shí)現(xiàn)

    本設(shè)計(jì)中,計(jì)劃實(shí)現(xiàn)對(duì)文件的壓縮及解壓,同時(shí)優(yōu)化壓縮中所涉及的信號(hào)處理和計(jì)算密集型功能,實(shí)現(xiàn)對(duì)其的加速處理。本設(shè)計(jì)的最終目標(biāo)是證明在充分并行化的硬件體系結(jié)構(gòu) FPGA 上實(shí)現(xiàn)該算法時(shí),可以大大提高該算法
    的頭像 發(fā)表于 07-10 11:09 ?2389次閱讀
    基于<b class='flag-5'>FPGA</b>的壓縮<b class='flag-5'>算法</b>加速實(shí)現(xiàn)

    【高云GW5AT-LV60 開(kāi)發(fā)套件試用體驗(yàn)】基于開(kāi)發(fā)板進(jìn)行深度學(xué)習(xí)實(shí)踐,并盡量實(shí)現(xiàn)皮膚病理圖片的識(shí)別

    說(shuō)了。 首先想先對(duì)一張圖片進(jìn)行相關(guān)算法的處理,不如比較開(kāi)源的有對(duì)輸入的灰度圖像執(zhí)行自適應(yīng)直方圖均衡化 (AHE)。或者 CLAHE(Contrast Limited Adaptive Histogram
    發(fā)表于 06-11 22:35

    Xilinx Ultrascale系列FPGA的時(shí)鐘資源與架構(gòu)解析

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

    MRAM存儲(chǔ)替代閃存,FPGA升級(jí)新技術(shù)

    優(yōu)化的架構(gòu)設(shè)計(jì)和成熟的制程技術(shù),具備內(nèi)置的硬擦除器、錯(cuò)誤檢測(cè)和校正機(jī)制,為用戶(hù)提供了可靠的開(kāi)發(fā)環(huán)境。用戶(hù)可利用最新的Radiant工具,直接實(shí)現(xiàn)MRAM的編程接口,支持多種存儲(chǔ)容量和數(shù)據(jù)速率。利用這些FPGA器件,用戶(hù)可以受益于低功耗F
    發(fā)表于 03-08 00:10 ?1960次閱讀