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)不再提示

教你們?nèi)绾问褂肰erilog HDL在FPGA上進(jìn)行圖像處理

OpenFPGA ? 來(lái)源:Hack電子 ? 作者:Hack電子 ? 2021-09-23 16:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

FPGA項(xiàng)目旨在詳細(xì)展示如何使用Verilog處理圖像,從Verilog中讀取輸入位圖圖像(.bmp),處理并將處理結(jié)果寫(xiě)入Verilog中的輸出位圖圖像。提供了用于讀取圖像、圖像處理和寫(xiě)入圖像的完整 Verilog 代碼 。

在這個(gè)FPGA Verilog項(xiàng)目中,一些簡(jiǎn)單的處理操作都是在Verilog中實(shí)現(xiàn)的,比如反相、亮度控制和閾值操作。圖像處理操作由“parameter.v”文件選擇,然后將處理后的圖像數(shù)據(jù)寫(xiě)入位圖圖像 output.bmp 以供驗(yàn)證。

所述圖像讀取Verilog代碼作為圖像傳感器/攝像機(jī)的模型的Verilog,它可以是用于在實(shí)時(shí)的功能驗(yàn)證真正有用的操作FPGA圖像處理項(xiàng)目。當(dāng)您想查看 BMP 格式的輸出圖像時(shí),圖像寫(xiě)入部分對(duì)于測(cè)試也非常有用。

在這個(gè)項(xiàng)目中,我在閱讀部分添加了一些簡(jiǎn)單的圖像處理代碼來(lái)制作圖像處理的示例,但是您可以輕松地將其刪除以獲得原始圖像數(shù)據(jù)。學(xué)生提出的所有相關(guān)問(wèn)題都在本文底部得到解答。

首先,Verilog 不能直接讀取圖像。要在 Verilog 中讀取 .bmp 圖像,需要將圖像從位圖格式轉(zhuǎn)換為十六進(jìn)制格式。下面是將位圖圖像轉(zhuǎn)換為 .hex 文件的 Matlab 示例代碼。輸入圖像大小為 768x512,圖像 .hex 文件包括位圖圖像的 R、G、B 數(shù)據(jù)。

b=imread('kodim24.bmp');%24-bitBMPimageRGB888

k=1;
fori=5121%imageiswrittenfromthelastrowtothefirstrow
forj=1:768
a(k)=b(i,j,1);
a(k+1)=b(i,j,2);
a(k+2)=b(i,j,3);
k=k+3;
end
end
fid=fopen('kodim24.hex','wt');
fprintf(fid,'%x
',a);
disp('Textfilewritedone');disp('');
fclose(fid);

要讀取圖像十六進(jìn)制數(shù)據(jù)文件,Verilog 使用以下命令:readmemb 如果圖像數(shù)據(jù)在二進(jìn)制文本文件中。讀取圖像.hex 文件后,將RGB 圖像數(shù)據(jù)保存到內(nèi)存中并讀出進(jìn)行處理。

下面是圖像讀取和處理部分的Verilog代碼:

/**********************************************************************************/
/********************模塊用于讀取和處理圖像**************/
/*********************************************************************************/
/******************************************************************************/
/******************Moduleforreadingandprocessingimage**************/
/******************************************************************************/
`include"parameter.v"//Includedefinitionfile
//fpga4student.com:FPGAprojectsforstudents
//FPGAproject:ImageprocessinginVerilog
moduleimage_read
#(
parameterWIDTH=768,//Imagewidth
HEIGHT=512,//Imageheight
INFILE="./img/kodim01.hex",//imagefile
START_UP_DELAY=100,//Delayduringstartuptime
HSYNC_DELAY=160,//DelaybetweenHSYNCpulses
VALUE=100,//valueforBrightnessoperation
THRESHOLD=90,//ThresholdvalueforThresholdoperation
SIGN=1//Signvalueusingforbrightnessoperation
//SIGN=0:Brightnesssubtraction
//SIGN=1:Brightnessaddition
)
(
inputHCLK,//clock
inputHRESETn,//Reset(activelow)
outputVSYNC,//Verticalsynchronouspulse
//Thissignalisoftenawaytoindicatethatoneentireimageistransmitted.
//Justcreateandisnotused,willbeusedonceavideoormanyimagesaretransmitted.
outputregHSYNC,//Horizontalsynchronouspulse
//AnHSYNCindicatesthatonelineoftheimageistransmitted.
//Usedtobeahorizontalsynchronoussignalsforwritingbmpfile.
outputreg[7:0]DATA_R0,//8bitReddata(even)
outputreg[7:0]DATA_G0,//8bitGreendata(even)
outputreg[7:0]DATA_B0,//8bitBluedata(even)
outputreg[7:0]DATA_R1,//8bitReddata(odd)
outputreg[7:0]DATA_G1,//8bitGreendata(odd)
outputreg[7:0]DATA_B1,//8bitBluedata(odd)
//Processandtransmit2pixelsinparalleltomaketheprocessfaster,youcanmodifytotransmit1pixelsormoreifneeded
outputctrl_done//Doneflag
);
//-------------------------------------------------
//InternalSignals
//-------------------------------------------------
parametersizeOfWidth=8;//datawidth
parametersizeOfLengthReal=1179648;//imagedata:1179648bytes:512*768*3
//localparametersforFSM
localparamST_IDLE=2'b00,//idlestate
ST_VSYNC=2'b01,//stateforcreatingvsync
ST_HSYNC=2'b10,//stateforcreatinghsync
ST_DATA=2'b11;//statefordataprocessing
reg[1:0]cstate,//currentstate
nstate;//nextstate
regstart;//startsignal:triggerFinitestatemachinebeginningtooperate
regHRESETn_d;//delayedresetsignal:usetocreatestartsignal
regctrl_vsync_run;//controlsignalforvsynccounter
reg[8:0]ctrl_vsync_cnt;//counterforvsync
regctrl_hsync_run;//controlsignalforhsynccounter
reg[8:0]ctrl_hsync_cnt;//counterforhsync
regctrl_data_run;//controlsignalfordataprocessing
reg[7:0]total_memory[0:sizeOfLengthReal-1];//memorytostore8-bitdataimage
//temporarymemorytosaveimagedata:sizewillbeWIDTH*HEIGHT*3
integertemp_BMP[0:WIDTH*HEIGHT*3-1];
integerorg_R[0:WIDTH*HEIGHT-1];//temporarystorageforRcomponent
integerorg_G[0:WIDTH*HEIGHT-1];//temporarystorageforGcomponent
integerorg_B[0:WIDTH*HEIGHT-1];//temporarystorageforBcomponent
//countingvariables
integeri,j;
//temporarysignalsforcalculation:detailsinthepaper.
integertempR0,tempR1,tempG0,tempG1,tempB0,tempB1;//temporaryvariablesincontrastandbrightnessoperation

integervalue,value1,value2,value4;//temporaryvariablesininvertandthresholdoperation
reg[9:0]row;//rowindexoftheimage
reg[10:0]col;//columnindexoftheimage
reg[18:0]data_count;//datacountingforentirepixelsoftheimage
//-------------------------------------------------//
//--------Readingdatafrominputfile----------//
//-------------------------------------------------//
initialbegin
$readmemh(INFILE,total_memory,0,sizeOfLengthReal-1);//readfilefromINFILE
end
//use3intermediatesignalsRGBtosaveimagedata
always@(start)begin
if(start==1'b1)begin
for(i=0;ib1&&HRESETn_d==1'b0)//__0___|1|___0____:startingpulse
start<=?1'b1;
else
start<=?1'b0;
end
end
//-----------------------------------------------------------------------------------------------//
//FinitestatemachineforreadingRGB888datafrommemoryandcreatinghsyncandvsyncpulses--//
//-----------------------------------------------------------------------------------------------//
always@(posedgeHCLK,negedgeHRESETn)
begin
if(~HRESETn)begin
cstate<=?ST_IDLE;
????end
????else?begin
????????cstate?<=?nstate;?//?update?next?state?
????end
end
//-----------------------------------------//
//---------?State?Transition?--------------//
//-----------------------------------------//
//?IDLE?.?VSYNC?.?HSYNC?.?DATA
always?@(*)?begin
?case(cstate)
??ST_IDLE:?begin
???if(start)
????nstate?=?ST_VSYNC;
???else
????nstate?=?ST_IDLE;
??end???
??ST_VSYNC:?begin
???if(ctrl_vsync_cnt?==?START_UP_DELAY)?
????nstate?=?ST_HSYNC;
???else
????nstate?=?ST_VSYNC;
??end
??ST_HSYNC:?begin
???if(ctrl_hsync_cnt?==?HSYNC_DELAY)?
????nstate?=?ST_DATA;
???else
????nstate?=?ST_HSYNC;
??end??
??ST_DATA:?begin
???if(ctrl_done)
????nstate?=?ST_IDLE;
???else?begin
????if(col?==?WIDTH?-?2)
?????nstate?=?ST_HSYNC;
????else
?????nstate?=?ST_DATA;
???end
??end
?endcase
end
//?-------------------------------------------------------------------?//
//?---?counting?for?time?period?of?vsync,?hsync,?data?processing?----??//
//?-------------------------------------------------------------------?//
always?@(*)?begin
?ctrl_vsync_run?=?0;
?ctrl_hsync_run?=?0;
?ctrl_data_run??=?0;
?case(cstate)
??ST_VSYNC:??begin?ctrl_vsync_run?=?1;?end??//?trigger?counting?for?vsync
??ST_HSYNC:??begin?ctrl_hsync_run?=?1;?end?//?trigger?counting?for?hsync
??ST_DATA:??begin?ctrl_data_run??=?1;?end?//?trigger?counting?for?data?processing
?endcase
end
//?counters?for?vsync,?hsync
always@(posedge?HCLK,?negedge?HRESETn)
begin
????if(~HRESETn)?begin
????????ctrl_vsync_cnt?<=?0;
??ctrl_hsync_cnt?<=?0;
????end
????else?begin
????????if(ctrl_vsync_run)
???ctrl_vsync_cnt?<=?ctrl_vsync_cnt?+?1;?//?counting?for?vsync
??else?
???ctrl_vsync_cnt?<=?0;
???
????????if(ctrl_hsync_run)
???ctrl_hsync_cnt?<=?ctrl_hsync_cnt?+?1;?//?counting?for?hsync??
??else
???ctrl_hsync_cnt?<=?0;
????end
end
//?counting?column?and?row?index??for?reading?memory?
always@(posedge?HCLK,?negedge?HRESETn)
begin
????if(~HRESETn)?begin
????????row?<=?0;
??col?<=?0;
????end
?else?begin
??if(ctrl_data_run)?begin
???if(col?==?WIDTH?-?2)?begin
????row?<=?row?+?1;
???end
???if(col?==?WIDTH?-?2)?
????col?<=?0;
???else?
????col?<=?col?+?2;?//?reading?2?pixels?in?parallel
??end
?end
end
//-------------------------------------------------//
//----------------Data?counting----------?---------//
//-------------------------------------------------//
always@(posedge?HCLK,?negedge?HRESETn)
begin
????if(~HRESETn)?begin
????????data_count?<=?0;
????end
????else?begin
????????if(ctrl_data_run)
???data_count?<=?data_count?+?1;
????end
end
assign?VSYNC?=?ctrl_vsync_run;
assign?ctrl_done?=?(data_count?==?196607)??1'b1:1'b0;//doneflag
//-------------------------------------------------//
//-------------Imageprocessing---------------//
//-------------------------------------------------//
always@(*)begin

HSYNC=1'b0;
DATA_R0=0;
DATA_G0=0;
DATA_B0=0;
DATA_R1=0;
DATA_G1=0;
DATA_B1=0;
if(ctrl_data_run)begin

HSYNC=1'b1;
`ifdefBRIGHTNESS_OPERATION
/**************************************/
/*BRIGHTNESSADDITIONOPERATION*/
/**************************************/
if(SIGN==1)begin
//R0
tempR0=org_R[WIDTH*row+col]+VALUE;
if(tempR0>255)
DATA_R0=255;
else
DATA_R0=org_R[WIDTH*row+col]+VALUE;
//R1
tempR1=org_R[WIDTH*row+col+1]+VALUE;
if(tempR1>255)
DATA_R1=255;
else
DATA_R1=org_R[WIDTH*row+col+1]+VALUE;
//G0
tempG0=org_G[WIDTH*row+col]+VALUE;
if(tempG0>255)
DATA_G0=255;
else
DATA_G0=org_G[WIDTH*row+col]+VALUE;
tempG1=org_G[WIDTH*row+col+1]+VALUE;
if(tempG1>255)
DATA_G1=255;
else
DATA_G1=org_G[WIDTH*row+col+1]+VALUE;
//B
tempB0=org_B[WIDTH*row+col]+VALUE;
if(tempB0>255)
DATA_B0=255;
else
DATA_B0=org_B[WIDTH*row+col]+VALUE;
tempB1=org_B[WIDTH*row+col+1]+VALUE;
if(tempB1>255)
DATA_B1=255;
else
DATA_B1=org_B[WIDTH*row+col+1]+VALUE;
end
elsebegin
/**************************************/
/*BRIGHTNESSSUBTRACTIONOPERATION*/
/**************************************/
//R0
tempR0=org_R[WIDTH*row+col]-VALUE;
if(tempR0THRESHOLD)begin
DATA_R0=255;
DATA_G0=255;
DATA_B0=255;
end
elsebegin
DATA_R0=0;
DATA_G0=0;
DATA_B0=0;
end
value1=(org_R[WIDTH*row+col+1]+org_G[WIDTH*row+col+1]+org_B[WIDTH*row+col+1])/3;
if(value1>THRESHOLD)begin
DATA_R1=255;
DATA_G1=255;
DATA_B1=255;
end
elsebegin
DATA_R1=0;
DATA_G1=0;
DATA_B1=0;
end
`endif
end
end

endmodule

“parameter.v”文件也是定義輸入輸出文件的路徑和名稱。對(duì)圖像進(jìn)行處理后,需要將處理后的數(shù)據(jù)寫(xiě)入輸出圖像進(jìn)行驗(yàn)證。

以下Verilog代碼是將處理后的圖像數(shù)據(jù)寫(xiě)入位圖圖像進(jìn)行驗(yàn)證:

/********************寫(xiě)入.bmp圖像的模塊************/
/**************************************************************/
moduleimage_write#(parameter
WIDTH=768,//Imagewidth
HEIGHT=512,//Imageheight
INFILE="output.bmp",//Outputimage
BMP_HEADER_NUM=54//Headerforbmpimage
)
(
inputHCLK,//Clockinput
HRESETn,//Resetactivelow
inputhsync,//Hsyncpulse
input[7:0]DATA_WRITE_R0,//Red8-bitdata(odd)
input[7:0]DATA_WRITE_G0,//Green8-bitdata(odd)
input[7:0]DATA_WRITE_B0,//Blue8-bitdata(odd)
input[7:0]DATA_WRITE_R1,//Red8-bitdata(even)
input[7:0]DATA_WRITE_G1,//Green8-bitdata(even)
input[7:0]DATA_WRITE_B1,//Blue8-bitdata(even)
outputregWrite_Done
);
//fpga4student.comFPGAprojects,Verilogprojects,VHDLprojects
//-----------------------------------//
//-------Headerdataforbmpimage-----//
//-------------------------------------//
//WindowsBMPfilesbeginwitha54-byteheader
initialbegin
BMP_header[0]=66;BMP_header[28]=24;
BMP_header[1]=77;BMP_header[29]=0;
BMP_header[2]=54;BMP_header[30]=0;
BMP_header[3]=0;BMP_header[31]=0;
BMP_header[4]=18;BMP_header[32]=0;
BMP_header[5]=0;BMP_header[33]=0;
BMP_header[6]=0;BMP_header[34]=0;
BMP_header[7]=0;BMP_header[35]=0;
BMP_header[8]=0;BMP_header[36]=0;
BMP_header[9]=0;BMP_header[37]=0;
BMP_header[10]=54;BMP_header[38]=0;
BMP_header[11]=0;BMP_header[39]=0;
BMP_header[12]=0;BMP_header[40]=0;
BMP_header[13]=0;BMP_header[41]=0;
BMP_header[14]=40;BMP_header[42]=0;
BMP_header[15]=0;BMP_header[43]=0;
BMP_header[16]=0;BMP_header[44]=0;
BMP_header[17]=0;BMP_header[45]=0;
BMP_header[18]=0;BMP_header[46]=0;
BMP_header[19]=3;BMP_header[47]=0;
BMP_header[20]=0;BMP_header[48]=0;
BMP_header[21]=0;BMP_header[49]=0;
BMP_header[22]=0;BMP_header[50]=0;
BMP_header[23]=2;BMP_header[51]=0;
BMP_header[24]=0;BMP_header[52]=0;
BMP_header[25]=0;BMP_header[53]=0;
BMP_header[26]=1;BMP_header[27]=0;
end
//---------------------------------------------------------//
//--------------Write.bmpfile----------------------//
//----------------------------------------------------------//
initialbegin
fd=$fopen(INFILE,"wb+");
end
always@(Write_Done)begin//oncetheprocessingwasdone,bmpimagewillbecreated
if(Write_Done==1'b1)begin
for(i=0;i

位圖圖像的標(biāo)頭數(shù)據(jù)非常重要,在這里發(fā)布。如果沒(méi)有標(biāo)題數(shù)據(jù),則無(wú)法正確顯示寫(xiě)入的圖像。在 Verilog HDL 中,$fwrite 命令用于將數(shù)據(jù)寫(xiě)入文件。

接下來(lái),讓我們編寫(xiě)一個(gè)測(cè)試平臺(tái) Verilog 代碼來(lái)驗(yàn)證圖像處理操作。

`timescale1ns/1ps/**************************************************/
/*******Testbenchforsimulation****************/
/*********************************************/
//fpga4student.comFPGAprojects,Verilogprojects,VHDLprojects
//Verilogproject:ImageprocessinginVerilog
`include"parameter.v"//includedefinitionfilemoduletb_simulation;
//------------------//InternalSignals
//-------------------------------------------------
regHCLK,HRESETn;
wirevsync;
wirehsync;
wire[7:0]data_R0;
wire[7:0]data_G0;
wire[7:0]data_B0;
wire[7:0]data_R1;
wire[7:0]data_G1;
wire[7:0]data_B1;
wireenc_done;
image_read#(.INFILE(`INPUTFILENAME))
u_image_read
(.HCLK(HCLK),
.HRESETn(HRESETn),
.VSYNC(vsync),
.HSYNC(hsync),
.DATA_R0(data_R0),
.DATA_G0(data_G0),
.DATA_B0(data_B0),
.DATA_R1(data_R1),
.DATA_G1(data_G1),
.DATA_B1(data_B1),
.ctrl_done(enc_done)
);
image_write#(.INFILE(`OUTPUTFILENAME))
u_image_write(
.HCLK(HCLK),
.HRESETn(HRESETn),
.hsync(hsync),
.DATA_WRITE_R0(data_R0),
.DATA_WRITE_G0(data_G0),
.DATA_WRITE_B0(data_B0),
.DATA_WRITE_R1(data_R1),
.DATA_WRITE_G1(data_G1),
.DATA_WRITE_B1(data_B1),
.Write_Done()
);
//-------------//TestVectors
//-------------------------------------
initial
begin
HCLK=0;
forever#10HCLK=~HCLK;
end
initial
begin
HRESETn=0;
#25HRESETn=1;
endendmodule

最后,我們擁有一切來(lái)運(yùn)行模擬來(lái)驗(yàn)證圖像處理代碼。讓我們使用下圖作為輸入位圖文件:

運(yùn)行仿真 6ms,關(guān)閉仿真并打開(kāi)輸出圖像以檢查結(jié)果。以下是參數(shù).v中選定操作處理的輸出圖像:

由于讀取代碼是為了模擬目的而對(duì)圖像傳感器/相機(jī)進(jìn)行建模,因此建議不要合成代碼。如果你真的想綜合處理代碼并直接在FPGA上運(yùn)行,你需要將代碼中的這些圖像數(shù)組(total_memory、temp_BMP、org_R、org_B、org_G)替換為塊存儲(chǔ)器(RAM)和設(shè)計(jì)地址生成器來(lái)讀取圖像塊內(nèi)存中的數(shù)據(jù)。

問(wèn)題的答案:

此圖像處理項(xiàng)目的完整 Verilog 代碼可在此處下載。運(yùn)行模擬大約 6ms 并關(guān)閉模擬,然后您將能夠看到輸出圖像。

https://github.com/suisuisi/FPGAandImage/blob/main/Image/012_Others/Verilog_Image_Processing.zip

讀取部分作為圖像傳感器/相機(jī)的 Verilog 模型運(yùn)行(輸出 RGB 數(shù)據(jù)、HSYNC、VSYNC、HCLK)。Verilog 圖像讀取代碼對(duì)于實(shí)時(shí) FPGA 圖像/視頻項(xiàng)目中的功能驗(yàn)證非常有用。

3.在這個(gè)項(xiàng)目中,我添加了圖像處理部分,做一個(gè)圖像增強(qiáng)的例子。如果您只想使用圖像傳感器模型來(lái)驗(yàn)證您的圖像處理設(shè)計(jì),您可以輕松移除處理部分以僅獲取原始圖像數(shù)據(jù)。

4.圖像保存到三個(gè)獨(dú)立的RGB mem中:由于Matlab代碼是將圖像16進(jìn)制文件從最后一行寫(xiě)到第一行,所以RGB保存代碼(org_R, org_B, org_G)在讀取temp_BMP內(nèi)存時(shí)也是這樣做的,保存RGB數(shù)據(jù)正確。如果您想以不同的方式進(jìn)行,您可以相應(yīng)地更改它。

5.如果您想更改圖像大小,您可能會(huì)發(fā)現(xiàn)以下對(duì) BMP 標(biāo)題的解釋很有用:

圖像大小=768*512*3=1179648字節(jié)
BMP標(biāo)題=54字節(jié)
BMP文件大小=圖像大小+BMP標(biāo)題=1179702字節(jié)
將其轉(zhuǎn)換為十六進(jìn)制數(shù):1179702 inDecimal=120036inHexade
然后 BMP 文件的 4 字節(jié)大小:00H, 12 inHexa=18Decimal,00H,36inHexa=54Decimal
這就是我們?nèi)绾蔚玫揭韵轮担?BMP_header[2]=54;
BMP_header[3]=0;
BMP_header[4]=18;
BMP_header[5]=0;
圖像寬度= 768 =>十六進(jìn)制:0x0300。圖像寬度的 4 個(gè)字節(jié)是
0、3、0、0。這就是您獲得以下值的方式:BMP_header[18]=0;
BMP_header[19]=3;
BMP_header[20]=0;
BMP_header[21]=0;
圖像高度= 512 =>十六進(jìn)制:0x0200。圖像寬度的 4 個(gè)字節(jié)是0, 2, 0, 0。這就是我們?nèi)绾蔚玫揭韵轮担?BMP_header[22]=0;
BMP_header[23]=2;
BMP_header[24]=0;
BMP_header[25]=0;
  1. 您不應(yīng)綜合此代碼,因?yàn)樗皇菫樵?FPGA 上運(yùn)行而設(shè)計(jì)的,而是用于功能驗(yàn)證目的. 如果你真的想合成這段代碼(讀取和處理)并將圖像加載到 FPGA中直接在 FPGA 上處理,請(qǐng)將所有 temp. 變量 (org_R, org_B, org_G, tmp_BMP = total_memory) 并生成地址以讀取圖像數(shù)據(jù)(刪除 always @(start) 和所有“for 循環(huán)” - 這些用于模擬目的)。
    有兩種方式:1. 寫(xiě)一段RAM代碼,用$readmemh將圖像數(shù)據(jù)初始化到內(nèi)存中;2. 使用 Xilinx Core Generator 或 Altera MegaFunction 生成塊存儲(chǔ)器并將圖像數(shù)據(jù)加載到存儲(chǔ)器的初始值(Xilinx Core Gen. 為 .coe 文件,Altera MegaFunction 為 .mif 文件),然后從存儲(chǔ)器中讀取圖像數(shù)據(jù)并處理它(FSM 設(shè)計(jì))。

  2. 在這個(gè)項(xiàng)目中,為了加快處理速度,同時(shí)讀取兩個(gè)偶數(shù)和舊像素,但您可以根據(jù)您的設(shè)計(jì)更改正在讀取的像素?cái)?shù)。

  3. 編寫(xiě)Verilog代碼對(duì)于測(cè)試目的也非常有幫助,因?yàn)槟梢钥吹紹MP 格式的輸出。

9.如果要做實(shí)時(shí)圖像處理,可以查看camera接口代碼這個(gè):https://www.fpga4student.com/2018/08/basys-3-fpga-ov7670-camera.html

參考:https://www.fpga4student.com/2016/11/image-processing-on-fpga-verilog.html

編輯:jq
聲明:本文內(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

    文章

    22415

    瀏覽量

    636542
  • 圖像處理
    +關(guān)注

    關(guān)注

    29

    文章

    1342

    瀏覽量

    59564
  • verilog代碼
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Verilog HDL語(yǔ)法學(xué)習(xí)筆記

    Verilog HDL 語(yǔ) 言 最 初 是 作為 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后來(lái)被著名的 Cadence Design Systems 公司收購(gòu))模擬器產(chǎn)品開(kāi)發(fā)的硬件建模語(yǔ)言。
    的頭像 發(fā)表于 03-04 15:04 ?5308次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語(yǔ)法學(xué)習(xí)筆記

    FPGA 入門(mén)必看:Verilog 與 VHDL 編程基礎(chǔ)解析!

    很多開(kāi)發(fā)者第一次接觸FPGA,都會(huì)有同樣的疑問(wèn):FPGA是硬件,不是軟件,怎么寫(xiě)程序?答案就是用硬件描述語(yǔ)言(HDL),最常用的就是Verilog和VHDL。今天,我們就帶你入門(mén),搞清
    的頭像 發(fā)表于 01-19 09:05 ?469次閱讀
    <b class='flag-5'>FPGA</b> 入門(mén)必看:<b class='flag-5'>Verilog</b> 與 VHDL 編程基礎(chǔ)解析!

    【產(chǎn)品介紹】Modelsim:HDL語(yǔ)言仿真軟件

    概述ModelSim是業(yè)界最優(yōu)秀的HDL語(yǔ)言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的單內(nèi)核支持VHDL和Verilog混合仿真的仿真器。它采用直接優(yōu)化的編譯技術(shù)、Tcl/Tk技術(shù)、和單一內(nèi)核
    的頭像 發(fā)表于 11-13 11:41 ?511次閱讀
    【產(chǎn)品介紹】Modelsim:<b class='flag-5'>HDL</b>語(yǔ)言仿真軟件

    將蜂鳥(niǎo)E203的內(nèi)核移植到fpga之后該怎么進(jìn)行二次開(kāi)發(fā)呢?

    你們好!請(qǐng)問(wèn)一下我將蜂鳥(niǎo)E203的內(nèi)核移植到fpga之后該怎么進(jìn)行二次開(kāi)發(fā)呢?比如我想點(diǎn)亮板子上的led?驅(qū)動(dòng)攝像頭進(jìn)行圖像識(shí)別?這些該如何
    發(fā)表于 11-10 07:09

    蜂鳥(niǎo)處理上進(jìn)行RT-Thread+ESP8266 wifi模塊開(kāi)發(fā)

    本隊(duì)伍編號(hào)CICC3042,本文介紹蜂鳥(niǎo)處理器上運(yùn)行RT-Thread實(shí)時(shí)操作系統(tǒng),并進(jìn)行ESP8266wifi模塊開(kāi)發(fā)。 蜂鳥(niǎo)配套的sdk中提供了RT-Thread的移植 ht
    發(fā)表于 10-31 09:02

    沒(méi)有開(kāi)發(fā)板的情況,Vivado上進(jìn)行蜂鳥(niǎo)E203的基礎(chǔ)內(nèi)核的drystone跑分

    e203_hbirdv2-masterriscv-toolsfpga_test4simdhrystone4simdhrystone.verilog,然后這里我們?yōu)榱吮WC仿真時(shí)有訪問(wèn)文件的權(quán)限,因此我們首先必須將上述文件與tb.top
    發(fā)表于 10-27 06:35

    vivado上進(jìn)行benchmark跑分(微架構(gòu)優(yōu)化之前)

    :(coremark4sim.verilog) 確定coremark4sim文件的絕對(duì)路徑: E:e203_Socriscv-toolsfpga_test4simcoremark4sim 我們已跑通源工程,
    發(fā)表于 10-24 09:39

    沒(méi)有開(kāi)發(fā)板的情況下,Vivado上進(jìn)行蜂鳥(niǎo)E203的基礎(chǔ)內(nèi)核的drystone跑分

    e203_hbirdv2-masterriscv-toolsfpga_test4simdhrystone4simdhrystone.verilog,然后這里我們?yōu)榱吮WC仿真時(shí)有訪問(wèn)文件的權(quán)限,因此我們首先必須將上述文件與tb.top
    發(fā)表于 10-24 07:36

    如何利用Verilog HDLFPGA上實(shí)現(xiàn)SRAM的讀寫(xiě)測(cè)試

    本篇將詳細(xì)介紹如何利用Verilog HDLFPGA上實(shí)現(xiàn)SRAM的讀寫(xiě)測(cè)試。SRAM是一種非易失性存儲(chǔ)器,具有高速讀取和寫(xiě)入的特點(diǎn)。
    的頭像 發(fā)表于 10-22 17:21 ?4361次閱讀
    如何利用<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b>上實(shí)現(xiàn)SRAM的讀寫(xiě)測(cè)試

    使用Simulink自動(dòng)生成浮點(diǎn)運(yùn)算HDL代碼(Part 1)

    引言 想要實(shí)現(xiàn)浮點(diǎn)運(yùn)算功能,如果自己寫(xiě)Verilog代碼,需要花費(fèi)較多的時(shí)間和精力。好在Simulink HDL Coder工具箱提供了自動(dòng)代碼生成技術(shù)。下圖展示了HDL Coder如何生成浮點(diǎn)運(yùn)算
    發(fā)表于 10-22 06:48

    基于FPGA開(kāi)發(fā)板TSP的串口通信設(shè)計(jì)

    本文詳細(xì)介紹基于Terasic FPGA開(kāi)發(fā)板TSP(又名C5P和OSK)和其板載CP2102N USB-UART橋接芯片的串口通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)采用Verilog HDL編寫(xiě)UART收發(fā)控制器,通過(guò)CP2102N實(shí)現(xiàn)
    的頭像 發(fā)表于 10-15 11:05 ?4471次閱讀
    基于<b class='flag-5'>FPGA</b>開(kāi)發(fā)板TSP的串口通信設(shè)計(jì)

    基于FPGA利用sm4進(jìn)行實(shí)時(shí)圖像加密

    求一份fpga上利用sm4進(jìn)行實(shí)時(shí)圖像加密的文件
    發(fā)表于 09-15 19:05

    FPGA 加持,友思特圖像采集卡高速預(yù)處理助力視覺(jué)系統(tǒng)運(yùn)行提速增效

    圖像預(yù)處理圖像處理關(guān)鍵環(huán)節(jié),可優(yōu)化數(shù)據(jù)傳輸、減輕主機(jī)負(fù)擔(dān),其算法可在FPGA等硬件上執(zhí)行。友思特FPG
    的頭像 發(fā)表于 08-13 17:41 ?1127次閱讀
    <b class='flag-5'>FPGA</b> 加持,友思特<b class='flag-5'>圖像</b>采集卡高速預(yù)<b class='flag-5'>處理</b>助力視覺(jué)系統(tǒng)運(yùn)行提速增效

    FPGA Verilog HDL語(yǔ)法之編譯預(yù)處理

    的語(yǔ)句)。Verilog HDL編譯系統(tǒng)通常先對(duì)這些特殊的命令進(jìn)行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起
    的頭像 發(fā)表于 03-27 13:30 ?1444次閱讀
    <b class='flag-5'>FPGA</b> <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語(yǔ)法之編譯預(yù)<b class='flag-5'>處理</b>

    一文詳解Verilog HDL

    Verilog HDL(Hardware Description Language)是一種硬件描述語(yǔ)言,用于從算法級(jí)、門(mén)級(jí)到開(kāi)關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模?,F(xiàn)實(shí)生活中多用于專用集成電路
    的頭像 發(fā)表于 03-17 15:17 ?4308次閱讀
    一文詳解<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>