邊(biān)緣檢测工程:灰度(dù)轉(zhuǎn)換模块(kuài)代(dài)碼解(jiě)析(附設計(jì)模板)
本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!作者(zhě):陳刀(dāo)刀(dāo)
灰度(dù)轉(zhuǎn)換模块(kuài)的(de)功能(néng):該模块(kuài)将接收(shōu)到(dào)的(de)RGB數據(jù)經(jīng)过(guò)灰度(dù)轉(zhuǎn)換公式計(jì)算,輸出(chū)灰度(dù)數據(jù)給(gěi)下(xià)一(yī)个(gè)模块(kuài)。
一(yī)、設計(jì)架構
RGB图(tú)像轉(zhuǎn)換成(chéng)灰度(dù)图(tú)像的(de)公式为(wèi):Gray = (red * 70 + green * 150 + bule *30)>>8
公式中(zhōng)的(de)RGB是(shì)888格式,即R、G、B均用(yòng)8比特(tè)表(biǎo)示。注意(yì),本(běn)模块(kuài)輸入(rù)的(de)是(shì)565格式,即R、G、B分(fēn)别是(shì)5、6、5表(biǎo)示。
RGB565轉(zhuǎn)成(chéng)RGB888的(de)方(fāng)法,只(zhī)要(yào)後(hòu)面(miàn)補0或(huò)者(zhě)低位即可(kě)。例如(rú)R後(hòu)面(miàn)補3个(gè)0。
如(rú)上(shàng)图(tú),第(dì)1个(gè)像素進(jìn)来(lái)的(de)din为(wèi)16’h0001,即R=5’b00000,G=6’b000000,B=5’b00001。
改为(wèi)RGB888格式後(hòu),R=8’b00000000,G=8b’00000000,B=8’b00001000
如(rú)上(shàng)图(tú),第(dì)2个(gè)像素進(jìn)来(lái)的(de)din为(wèi)16’h0203,即R=5’b00000,G=6’b001010,B=5’b00011。
改为(wèi)RGB888格式後(hòu),R=8’b00000000,G=8’b00001010,B=8’b00000011。
二(èr)、信(xìn)号(hào)的(de)意(yì)義
|
信(xìn)号(hào) |
類(lèi)型 |
意(yì)義 |
|
Clk |
輸入(rù)信(xìn)号(hào) |
时(shí)鐘(zhōng)信(xìn)号(hào)。 |
|
rst_n |
輸入(rù)信(xìn)号(hào) |
複位信(xìn)号(hào),低電(diàn)平有(yǒu)效。 |
|
din |
輸入(rù)信(xìn)号(hào) |
輸入(rù)數據(jù),16位。 |
|
din_vld |
輸入(rù)信(xìn)号(hào) |
數據(jù)有(yǒu)效信(xìn)号(hào),din_vld为(wèi)1,數據(jù)有(yǒu)效,din_vld为(wèi)0,數據(jù)无效。 |
|
din_sop |
輸入(rù)信(xìn)号(hào) |
第(dì)一(yī)个(gè)有(yǒu)效數據(jù)指示信(xìn)号(hào),本(běn)幀的(de)第(dì)1个(gè)像素。 |
|
din_eop |
輸入(rù)信(xìn)号(hào) |
最(zuì)後(hòu)一(yī)个(gè)有(yǒu)效數據(jù)指示信(xìn)号(hào),本(běn)幀最(zuì)後(hòu)1个(gè)像素 |
|
dout |
輸出(chū)信(xìn)号(hào) |
輸出(chū)的(de)灰度(dù)图(tú)像數據(jù)。收(shōu)到(dào)din_vld有(yǒu)效信(xìn)号(hào)时(shí),dout輸出(chū)的(de)數據(jù)为(wèi)(red * 70 + green * 150 + bule *30)的(de)值右(yòu)移8位。 |
|
dout_vld |
輸出(chū)信(xìn)号(hào) |
輸出(chū)數據(jù)的(de)有(yǒu)效指示信(xìn)号(hào),dout_vld为(wèi)1时(shí),數據(jù)有(yǒu)效,dout_vld为(wèi)0,數據(jù)无效。 |
|
dout_sop |
輸出(chū)信(xìn)号(hào) |
輸出(chū)的(de)第(dì)一(yī)个(gè)有(yǒu)效數據(jù)指示信(xìn)号(hào)吧,本(běn)幀的(de)第(dì)1个(gè)像素。 |
|
dout_eop |
輸出(chū)信(xìn)号(hào) |
輸出(chū)的(de)最(zuì)後(hòu)一(yī)个(gè)有(yǒu)效數據(jù)指示信(xìn)号(hào),本(běn)幀最(zuì)後(hòu)1个(gè)像素。 |
|
red |
內(nèi)部(bù)信(xìn)号(hào) |
RGB图(tú)像中(zhōng)紅(hóng)色(sè)數據(jù)。該數據(jù)为(wèi)8位,0到(dào)2位補0。3到(dào)7位为(wèi)有(yǒu)效數據(jù)的(de)11到(dào)15位。 |
|
green |
內(nèi)部(bù)信(xìn)号(hào) |
RGB图(tú)像中(zhōng)的(de)綠(lǜ)色(sè)數據(jù)。該數據(jù)为(wèi)8位,0到(dào)1位補0,2到(dào)7位为(wèi)有(yǒu)效數據(jù)的(de)5到(dào)10位。 |
|
bule |
內(nèi)部(bù)型号(hào) |
RGB图(tú)像中(zhōng)的(de)藍(lán)色(sè)數據(jù)。該數據(jù)为(wèi)8位,0到(dào)2位補0,3到(dào)7位为(wèi)有(yǒu)效數據(jù)的(de)0到(dào)4位。 |
三(sān)、參考代(dài)碼
下(xià)面(miàn)展(zhǎn)出(chū)本(běn)模块(kuài)的(de)設計(jì),欢迎進(jìn)一(yī)步交流,如(rú)果(guǒ)需要(yào)源代(dài)碼,欢迎與(yǔ)本(běn)人(rén)聯系(xì)。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
module rgb565_gray( clk , rst_n , din , din_vld , din_sop , din_eop , dout , dout_vld , dout_sop , dout_eop );
input clk ; input rst_n ; input [15:0] din ; input din_vld ; input din_sop ; input din_eop ;
output [7:0] dout ; output dout_vld ; output dout_sop ; output dout_eop ;
reg [7:0] dout ; reg dout_vld ; reg dout_sop ; reg dout_eop ;
wire [7:0] red ; wire [7:0] green ; wire [7:0] bule ;
assign red = {din[15:11] , 3’b0}; assign green = {din[10:5] , 2’b0}; assign bule = {din[4:0] , 3’b0};
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin dout <= 8'd0; end else if(din_vld)begin dout <= (red * 70 + green * 150 + bule *30) >> 8; end end
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin dout_vld <= 1'b0; end else begin dout_vld <= din_vld; end end
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin dout_sop <= 1'b0; end else begin dout_sop <= din_sop; end end
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin dout_eop <= 1'b0; end else begin dout_eop <= din_eop; end end
endmodule |
明(míng)德揚專注FPGA研究,我(wǒ)司正(zhèng)在(zài)連(lián)载两(liǎng)本(běn)書(shū)籍:《基于(yú)FPGA至(zhì)簡設計(jì)法实現(xiàn)的(de)图(tú)像邊(biān)緣檢测系(xì)統》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=691)、《ASIC和(hé)FPGA时(shí)序約束(shù)理論與(yǔ)應(yìng)用(yòng)》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=705),有(yǒu)興趣點(diǎn)擊閱读(dú)。也(yě)欢迎加入(rù)群(qún)(838209674),及(jí)时(shí)獲取(qǔ)最(zuì)新的(de)文(wén)章(zhāng)信(xìn)息,个(gè)性(xìng)化(huà)問(wèn)題(tí)也(yě)可(kě)以(yǐ)找(zhǎo)我(wǒ)哦:Q1277642036(陳刀(dāo)刀(dāo))。








