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

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

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

使用MATLAB Simulink和HDL編碼器創(chuàng)建自定義IP--AWB

OpenFPGA ? 來(lái)源:OpenFPGA ? 2023-11-13 09:27 ? 次閱讀

使用 MATLAB HDL Coder 和 FPGA 快速實(shí)現(xiàn)自動(dòng)白平衡(AWB)

在此項(xiàng)目中,我們將使用 MATLAB Simulink 和 HDL 編碼器創(chuàng)建自定義 IP -- AWB。

MATLAB 設(shè)計(jì)

自動(dòng)白平衡模塊的設(shè)計(jì)是使用 HDL Coder 在 MATLAB 和 Simulink 中創(chuàng)建的。HDL Coder能夠生成 HDL 文件,這些文件可以作為 IP 在我們的目標(biāo) FPGA 中運(yùn)行。

AWB IP 設(shè)計(jì)旨在對(duì)每個(gè)時(shí)鐘 2 個(gè)像素求和,這些像素是從 Vivado 設(shè)計(jì)中的demosaic 輸出的 RGB 像素。

算法非常簡(jiǎn)單,對(duì)每個(gè)幀的 RGB 通道進(jìn)行求和并提供給微處理器。在微處理器中,像素的總和被劃分創(chuàng)建校正白平衡所需的校正因子。

除法是在 MicroBlaze 中完成的,雖然必須快速收集每幀的統(tǒng)計(jì)數(shù)據(jù),但除法不必那么快,因此為了節(jié)省邏輯資源,利用 Microblaze即可完成。

整體設(shè)計(jì)如下

db127edc-81c2-11ee-939d-92fbcf53809c.png

像素求和旨在捕獲將傳入的 AXI 流像素?cái)?shù)據(jù)分割為三個(gè)元素 R、G、B,然后在求和之前對(duì)這些像素中的每一個(gè)進(jìn)行緩沖。求和塊的輸出也被記錄。

db2d799e-81c2-11ee-939d-92fbcf53809c.png

求和塊本身非常簡(jiǎn)單。獲取輸入、有效和復(fù)位信號(hào)。復(fù)位信號(hào)連接到來(lái)自 AXI Stream 接口的 SOF 信號(hào)。而 AXI Valid 信號(hào)使能寄存器和累加。

db47e1a8-81c2-11ee-939d-92fbcf53809c.png

為了在每一幀結(jié)束時(shí)向微處理器生成 IRQ,我們使用了以下結(jié)構(gòu)

db59c634-81c2-11ee-939d-92fbcf53809c.png

一旦 MicroBlaze 定義了系數(shù)數(shù)據(jù),需要將其應(yīng)用于后面幀像素。

db716aaa-81c2-11ee-939d-92fbcf53809c.png

然后將它們連接起來(lái),為 AXI-stream提供最終的像素?cái)?shù)據(jù)。

當(dāng)然,也需要針對(duì) AWB 算法中插入延遲進(jìn)行平衡

db8eb434-81c2-11ee-939d-92fbcf53809c.png

完整的模塊設(shè)計(jì)如下:

dbaa8e34-81c2-11ee-939d-92fbcf53809c.png

MATLAB 測(cè)試

為了測(cè)試這個(gè)設(shè)計(jì),我們將在 MATLAB 中創(chuàng)建了一個(gè)測(cè)試平臺(tái),它提取圖像文件來(lái)提供算法

dbc9e82e-81c2-11ee-939d-92fbcf53809c.png

自定義 MATLAB 模塊用于輸入和接收?qǐng)D像,設(shè)置的 M 代碼如下所示:

closeall
[im,im_map]=imread("awb_test_img.jpg");
im_rgb=ind2rgb(im,im_map);
im_rgb=uint8(im_rgb*2^8);
imshow(im_rgb);
vsize=size(im_rgb,1);
hsize=size(im_rgb,2);
div_val=16;
fori=13
means(i)=mean(mean(im_rgb(:,:,i)/div_val));
end
max_mean=max(means);
im_corr=im_rgb;
fori=13
corr(i)=max_mean/means(i);
im_corr(:,:,i)=im_rgb(:,:,i)*corr(i);
end
figure()
imshow(im_corr)

要運(yùn)行模擬,我們首先需要做一些事情

dbe1d948-81c2-11ee-939d-92fbcf53809c.png

模擬輸入

dc06baba-81c2-11ee-939d-92fbcf53809c.png

浮點(diǎn)結(jié)果

dc33ad22-81c2-11ee-939d-92fbcf53809c.png

定點(diǎn)結(jié)果

dc577fe0-81c2-11ee-939d-92fbcf53809c.png

為了生成定點(diǎn) HDL 解決方案,我們需要設(shè)置 HDL Coder生成器

dc8229de-81c2-11ee-939d-92fbcf53809c.pngdca5c650-81c2-11ee-939d-92fbcf53809c.png

Vivado 驗(yàn)證

導(dǎo)出IP核后,我們可以將其導(dǎo)入Vivado IP庫(kù)并將其添加到演示項(xiàng)目中。

dcd012d4-81c2-11ee-939d-92fbcf53809c.png

為了簡(jiǎn)化寄存器接口,我們使用 AXI GPIO 提供所需的系數(shù)。

dcefdef2-81c2-11ee-939d-92fbcf53809c.png

可以看到 AWB 提供 AXI Stream 輸入和輸出。

插入 AWB 后,接下來(lái)將在 Vitis 中的設(shè)計(jì)。

Vitis設(shè)計(jì)

算法非常簡(jiǎn)單

Status=XGpio_Initialize(&Gpio5,XPAR_AWB_AXI_GPIO_5_DEVICE_ID);
Status=XGpio_Initialize(&Gpio6,XPAR_AWB_AXI_GPIO_6_DEVICE_ID);
Status=XGpio_Initialize(&Gpio7,XPAR_AWB_AXI_GPIO_7_DEVICE_ID);

exp_scale=0.8;

while(1){

r=XGpio_DiscreteRead(&Gpio5,1);
g=XGpio_DiscreteRead(&Gpio5,2);
b=XGpio_DiscreteRead(&Gpio6,1);

if(r>=g&&r>=b){
r_corr=1.0*32768*exp_scale;
g_corr=((float)r/(float)g)*32768*exp_scale;
b_corr=((float)r/(float)b)*32768*exp_scale;
}
elseif(g>=r&&g>=b){
r_corr=((float)g/(float)r)*32768*exp_scale;
g_corr=1.0*32768*exp_scale;
b_corr=((float)g/(float)b)*32768*exp_scale;
}
elseif(b>=r&&b>=g){
r_corr=((float)b/(float)r)*32768*exp_scale;
g_corr=((float)b/(float)g)*32768*exp_scale;
b_corr=1.0*32768*exp_scale;
}


XGpio_DiscreteWrite(&Gpio6,2,(int)r_corr);
XGpio_DiscreteWrite(&Gpio7,1,(int)g_corr);
XGpio_DiscreteWrite(&Gpio7,2,(int)b_corr);

總結(jié)

MATLAB HDL Coder 和 FPGA聯(lián)合開(kāi)發(fā),可以快速進(jìn)行算法設(shè)計(jì)。

審核編輯:湯梓紅

聲明:本文內(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)注

    1625

    文章

    21620

    瀏覽量

    601232
  • matlab
    +關(guān)注

    關(guān)注

    181

    文章

    2960

    瀏覽量

    230024
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3573

    瀏覽量

    133980
  • Simulink
    +關(guān)注

    關(guān)注

    22

    文章

    522

    瀏覽量

    62243

原文標(biāo)題:使用 MATLAB HDL Coder 和 FPGA 快速實(shí)現(xiàn)自動(dòng)白平衡(AWB)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PYNQ設(shè)計(jì)案例:基于HDL語(yǔ)言+Vivado的自定義IP創(chuàng)建

    作者:Mculover666 1.實(shí)驗(yàn)?zāi)康?用HDL語(yǔ)言+Vivado創(chuàng)建一個(gè)掛載在AXI總線上的自定義IP核 2.實(shí)驗(yàn)步驟 2.1.創(chuàng)建
    的頭像 發(fā)表于 12-21 16:34 ?3388次閱讀
    PYNQ設(shè)計(jì)案例:基于<b class='flag-5'>HDL</b>語(yǔ)言+Vivado的<b class='flag-5'>自定義</b><b class='flag-5'>IP</b>核<b class='flag-5'>創(chuàng)建</b>

    講解MATLAB/Simulink HDL使用入門(mén)

    我們將使用實(shí)例講解MATLAB / Simulink HDL 使用入門(mén)。
    的頭像 發(fā)表于 11-06 09:12 ?1216次閱讀
    講解<b class='flag-5'>MATLAB</b>/<b class='flag-5'>Simulink</b> <b class='flag-5'>HDL</b>使用入門(mén)

    使用USRP E310和MATLABSimulink進(jìn)行原型設(shè)計(jì)和測(cè)試軟件定義的無(wú)線電

    原型,驗(yàn)證和測(cè)試實(shí)際的無(wú)線系統(tǒng)。使用這種支持包用USRP?E310 SDR,您可以使用雙(2×2)發(fā)送實(shí)時(shí)的RF信號(hào)的工作,并接收流。您也可以實(shí)現(xiàn)自定義硬件設(shè)計(jì),使用HDL編碼器?或嵌入式編碼
    發(fā)表于 12-21 07:56

    matlab自定義函數(shù)調(diào)用的方法

    matlab自定義函數(shù)調(diào)用的方法 命令文件/函數(shù)文件+ 函數(shù)文件 - 多
    發(fā)表于 11-29 13:14 ?88次下載

    SIMULINK線的處理/SIMULINK自定義功能模塊

    SIMULINK線的處理/SIMULINK自定義功能模塊     SIMULINK模型的構(gòu)建是通過(guò)用線將各種功能模塊進(jìn)行連接而構(gòu)成的。用鼠標(biāo)可以
    發(fā)表于 06-19 12:51 ?5192次閱讀

    EDK中PS2自定義IP

    Xilinx FPGA工程例子源碼:EDK中PS2自定義IP
    發(fā)表于 06-07 11:44 ?4次下載

    在NI Multisim中創(chuàng)建自定義元器件

    在NI Multisim中創(chuàng)建自定義元器件,NI Multisim雖然強(qiáng)大但芯片太少所以總結(jié)這方法
    發(fā)表于 07-20 17:21 ?0次下載

    利用SDSoC創(chuàng)建自定義硬件

    SDSoC是開(kāi)發(fā)Zynq-7000 SoC應(yīng)用程序的理想工具,當(dāng)您可以在自己的定制板平臺(tái)上實(shí)現(xiàn)設(shè)計(jì)時(shí),SDSoC變得更加強(qiáng)大。 有了這個(gè)視頻,看看創(chuàng)建自己的自定義硬件是多么容易..
    的頭像 發(fā)表于 11-26 06:25 ?2519次閱讀

    自定義sobel濾波IP核,IP接口遵守AXI Stream協(xié)議

    自定義sobel濾波IPIP接口遵守AXI Stream協(xié)議
    的頭像 發(fā)表于 08-06 06:04 ?3868次閱讀

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 03-15 19:39 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創(chuàng)建</b>

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 07-06 18:50 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創(chuàng)建</b>

    Vivado設(shè)計(jì)套件用戶(hù)指南:創(chuàng)建和打包自定義IP

    電子發(fā)燒友網(wǎng)站提供《Vivado設(shè)計(jì)套件用戶(hù)指南:創(chuàng)建和打包自定義IP.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 14:54 ?0次下載
    Vivado設(shè)計(jì)套件用戶(hù)指南:<b class='flag-5'>創(chuàng)建</b>和打包<b class='flag-5'>自定義</b><b class='flag-5'>IP</b>

    Vivado Design Suite用戶(hù)指南:創(chuàng)建和打包自定義IP

    電子發(fā)燒友網(wǎng)站提供《Vivado Design Suite用戶(hù)指南:創(chuàng)建和打包自定義IP.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 11:34 ?0次下載
    Vivado Design Suite用戶(hù)指南:<b class='flag-5'>創(chuàng)建</b>和打包<b class='flag-5'>自定義</b><b class='flag-5'>IP</b>

    如何在Matlab自定義Message

    自定義Message 當(dāng)我們的 message 消息比較復(fù)雜時(shí),通常要用到自定義的 message 消息,MATLAB 2020b以上的版本自帶了ROS Toolbox Interface
    的頭像 發(fā)表于 11-15 18:12 ?1172次閱讀
    如何在<b class='flag-5'>Matlab</b>中<b class='flag-5'>自定義</b>Message

    創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL).pdf》資料免費(fèi)下載
    發(fā)表于 09-19 10:50 ?0次下載
    <b class='flag-5'>創(chuàng)建</b><b class='flag-5'>自定義</b>的基于閃存的引導(dǎo)加載程序(BSL)