本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
很多(duō)朋友在(zài)工程模块(kuài)劃(huà)分(fēn)的(de)时(shí)候總(zǒng)会(huì)遇到(dào)很多(duō)問(wèn)題(tí),比如(rú)不(bù)知道(dào)如(rú)何下(xià)手(shǒu)、模块(kuài)劃(huà)分(fēn)不(bù)合理等;當然我(wǒ)最(zuì)初也(yě)和(hé)大家(jiā)一(yī)樣(yàng)不(bù)知道(dào)如(rú)何下(xià)手(shǒu),学習了(le)明(míng)德揚的(de)課程後(hòu),再加上(shàng)和(hé)老(lǎo)师(shī)的(de)多(duō)多(duō)交流,我(wǒ)也(yě)總(zǒng)結出(chū)了(le)一(yī)套(tào)方(fāng)法思(sī)路(lù),今天(tiān)就(jiù)通(tòng)过(guò)明(míng)德揚邊(biān)緣檢测工程来(lái)與(yǔ)大家(jiā)分(fēn)享一(yī)下(xià)模块(kuài)的(de)劃(huà)分(fēn)思(sī)路(lù)。
明(míng)德揚邊(biān)緣檢测工程是(shì)明(míng)德揚的(de)网(wǎng)絡班、就(jiù)業班的(de)其中(zhōng)一(yī)个(gè)項目,实現(xiàn)了(le)图(tú)像的(de)实时(shí)采集、邊(biān)緣檢测算法、存儲控制以(yǐ)及(jí)與(yǔ)串口(kǒu)等功能(néng),涉及(jí)到(dào)了(le)比較全(quán)面(miàn)的(de)知識與(yǔ)算法。一(yī)起来(lái)看(kàn)看(kàn)如(rú)何劃(huà)分(fēn)模块(kuài)。
一(yī)、模块(kuài)劃(huà)分(fēn)要(yào)點(diǎn)總(zǒng)結
1、列出(chū)項目的(de)功能(néng)要(yào)求(客戶提(tí)出(chū)的(de)産品功能(néng)要(yào)求)
2、画(huà)出(chū)硬(yìng)件(jiàn)的(de)系(xì)統結構框图(tú)(添加外(wài)設)
3、框图(tú)中(zhōng)每个(gè)外(wài)圍接口(kǒu)都对(duì)應(yìng)有(yǒu)一(yī)个(gè)接口(kǒu)轉(zhuǎn)換模块(kuài)
接口(kǒu)轉(zhuǎn)換模块(kuài)的(de)作用(yòng)是(shì)将外(wài)圍器件(jiàn)的(de)接口(kǒu)时(shí)序轉(zhuǎn)为(wèi)通(tòng)用(yòng)的(de)接口(kǒu)时(shí)序,或(huò)者(zhě)将通(tòng)用(yòng)接口(kǒu)时(shí)序轉(zhuǎn)換为(wèi)外(wài)圍器件(jiàn)接口(kǒu)时(shí)序,这(zhè)樣(yàng)使得FPGA內(nèi)部(bù)其他(tā)模块(kuài)不(bù)用(yòng)再關(guān)心(xīn)外(wài)圍接口(kǒu)的(de)时(shí)序了(le)。
MDY規範通(tòng)用(yòng)接口(kǒu)时(shí)序:
l data以(yǐ)及(jí)对(duì)應(yìng)的(de)vld,傳輸單个(gè)數據(jù)格式
l MDY的(de)包(bāo)文(wén)格式,din,vld,SOP,EOP,MTY,ERR
l wren,waddr,wdata;rden,raddr,rdata,rdata_vld
4、考慮是(shì)否涉及(jí)指令系(xì)統(操作碼+數據(jù)格式)
上(shàng)位機(jī),例如(rú)PC,ARM,DSP或(huò)者(zhě)其他(tā)的(de)器件(jiàn),只(zhī)涉及(jí)到(dào)一(yī)个(gè)接口(kǒu),但是(shì)卻有(yǒu)很多(duō)指令或(huò)者(zhě)命令功能(néng)要(yào)發(fà)送,因(yīn)此(cǐ)就(jiù)需要(yào)一(yī)个(gè)指令系(xì)統。
指令系(xì)統一(yī)定(dìng)会(huì)涉及(jí)到(dào)命令、地(dì)址和(hé)數據(jù)。这(zhè)種(zhǒng)情(qíng)況,肯定(dìng)会(huì)有(yǒu)一(yī)个(gè)“寄存器解(jiě)析模块(kuài)”,根(gēn)據(jù)命令、地(dì)址和(hé)數據(jù),改變(biàn)相應(yìng)的(de)寄存器的(de)值。
5、考慮外(wài)圍器件(jiàn)是(shì)否涉及(jí)寄存器配置
項目中(zhōng)有(yǒu)某些外(wài)設,上(shàng)電(diàn)工作前(qián)需要(yào)進(jìn)行配置才能(néng)按要(yào)求工作。因(yīn)此(cǐ)需要(yào)对(duì)外(wài)設內(nèi)部(bù)寄存器進(jìn)行读(dú)写,这(zhè)一(yī)流程是(shì)通(tòng)过(guò)FPGA来(lái)進(jìn)行配置。
遇到(dào)这(zhè)个(gè)情(qíng)況,使用(yòng)MDY推薦的(de)模块(kuài)寄存器配置結構:
寄存器配置表(biǎo)模块(kuài)+寄存器读(dú)写配置模块(kuài)+外(wài)設配置接口(kǒu)时(shí)序轉(zhuǎn)換模块(kuài)
6、根(gēn)據(jù)实際情(qíng)況,增加、補充或(huò)者(zhě)拆分(fēn),优化(huà)对(duì)應(yìng)模块(kuài),随时(shí)調整
原則:根(gēn)據(jù)接口(kǒu)信(xìn)号(hào),看(kàn)模块(kuài)間(jiān)是(shì)否方(fāng)便对(duì)接。接口(kǒu)就(jiù)決定(dìng)了(le)模块(kuài)功能(néng)。所(suǒ)以(yǐ)在(zài)这(zhè)一(yī)层的(de)調整,一(yī)定(dìng)要(yào)清(qīng)楚接口(kǒu)的(de)定(dìng)義。
7、考慮是(shì)否涉及(jí)多(duō)路(lù)進(jìn)一(yī)路(lù)出(chū),要(yào)用(yòng)FIFO
調度(dù)FIFO要(yào)考慮自(zì)身(shēn)带(dài)宽(kuān)能(néng)否滿足多(duō)路(lù)一(yī)起突發(fà)發(fà)送时(shí)的(de)數據(jù)量(liàng)情(qíng)況。如(rú)果(guǒ)带(dài)宽(kuān)不(bù)滿足,就(jiù)要(yào)要(yào)輸出(chū)給(gěi)上(shàng)遊模块(kuài)RDY信(xìn)号(hào)。此(cǐ)时(shí)RDY信(xìn)号(hào)有(yǒu)效取(qǔ)決于(yú)自(zì)己設置FIFO的(de)Almost Full信(xìn)号(hào)。如(rú)果(guǒ)带(dài)宽(kuān)滿足則不(bù)必設RDY信(xìn)号(hào)。
8、考慮是(shì)否涉及(jí)到(dào)速率匹(pǐ)配問(wèn)題(tí),要(yào)加上(shàng)RDY信(xìn)号(hào)或(huò)者(zhě)FIFO
首先(xiān)考慮與(yǔ)外(wài)圍器件(jiàn)通(tòng)信(xìn)的(de)接口(kǒu)上(shàng)是(shì)否需要(yào)rdy信(xìn)号(hào)(FPGA內(nèi)部(bù)運行頻率往往與(yǔ)設接口(kǒu)速率不(bù)一(yī)致(zhì)),然後(hòu)考慮FPGA內(nèi)部(bù)模块(kuài)間(jiān)數據(jù)带(dài)宽(kuān)是(shì)否不(bù)一(yī)致(zhì),有(yǒu)等一(yī)等的(de)情(qíng)況。
二(èr)、邊(biān)緣檢测工程案(àn)例分(fēn)析
根(gēn)據(jù)前(qián)面(miàn)總(zǒng)結的(de)要(yào)點(diǎn),通(tòng)过(guò)实際項目案(àn)例来(lái)分(fēn)析一(yī)下(xià)FPGA內(nèi)部(bù)功能(néng)模块(kuài)是(shì)怎樣(yàng)劃(huà)分(fēn)的(de)。这(zhè)里(lǐ)我(wǒ)们(men)選取(qǔ)已經(jīng)做过(guò)的(de)图(tú)像邊(biān)緣檢测項目,接下(xià)来(lái)按照上(shàng)面(miàn)總(zǒng)結的(de)模块(kuài)劃(huà)分(fēn)步驟,一(yī)步步完成(chéng)模块(kuài)初步劃(huà)分(fēn)!
1.列出(chū)項目的(de)功能(néng)要(yào)求
本(běn)項目功能(néng)要(yào)求:系(xì)統上(shàng)電(diàn),OV7670攝像头(tóu)将实时(shí)采集图(tú)像數據(jù)傳送給(gěi)FPGA,經(jīng)过(guò)FPGA算法处理獲得邊(biān)緣图(tú)像,最(zuì)終(zhōng)輸出(chū)邊(biān)緣图(tú)像到(dào)顯示器上(shàng)。
功能(néng)分(fēn)析:
a) 選用(yòng)攝像头(tóu)OV7670作为(wèi)图(tú)像采集
b) 攝像头(tóu)內(nèi)部(bù)寄存器需要(yào)上(shàng)電(diàn)配置,因(yīn)此(cǐ)外(wài)設需要(yào)配置按鍵
c) FPGA內(nèi)部(bù)做邊(biān)緣檢测算法处理
d) 輸出(chū)給(gěi)顯示器顯示(用(yòng)VGA接口(kǒu))
2.画(huà)出(chū)硬(yìng)件(jiàn)系(xì)統結構框图(tú)
根(gēn)據(jù)步驟1總(zǒng)結出(chū)的(de)功能(néng)要(yào)求,找(zhǎo)到(dào)除FPGA外(wài)需要(yào)哪些外(wài)圍器件(jiàn)。
外(wài)圍器件(jiàn)總(zǒng)共(gòng)需要(yào)三(sān)个(gè):
a) 按鍵
b) 攝像头(tóu)OV7670
c) 顯示器
画(huà)出(chū)系(xì)統框图(tú)如(rú)下(xià)所(suǒ)示:
3.框图(tú)中(zhōng)每个(gè)外(wài)圍接口(kǒu)都对(duì)應(yìng)有(yǒu)一(yī)个(gè)接口(kǒu)轉(zhuǎn)換模块(kuài)
a) 按鍵对(duì)應(yìng)的(de)接口(kǒu)轉(zhuǎn)換模块(kuài)是(shì)按鍵消抖檢测模块(kuài);
b) OV7670攝像头(tóu)对(duì)應(yìng)的(de)接口(kǒu)轉(zhuǎn)換模块(kuài)是(shì)OV7670图(tú)像采集模块(kuài);
c) 顯示器與(yǔ)FPGA連(lián)接是(shì)VGA接口(kǒu),因(yīn)此(cǐ)其对(duì)應(yìng)的(de)接口(kǒu)轉(zhuǎn)換模块(kuài)是(shì)VGA顯示驅動(dòng)模块(kuài)。
完善後(hòu)框图(tú)如(rú)下(xià)所(suǒ)示:
4.考慮是(shì)否涉及(jí)指令系(xì)統
本(běn)項目不(bù)涉及(jí)指令系(xì)統,因(yīn)此(cǐ)这(zhè)里(lǐ)可(kě)以(yǐ)跳过(guò)。
5.考慮外(wài)圍器件(jiàn)是(shì)否涉及(jí)寄存器配置
本(běn)項目中(zhōng)OV7670攝像头(tóu)部(bù)分(fēn)涉及(jí)寄存器配置。使用(yòng)MDY推薦模板:寄存器配置表(biǎo)模块(kuài)+寄存器读(dú)写配置模块(kuài)+外(wài)設配置接口(kǒu)时(shí)序轉(zhuǎn)換模块(kuài);
由(yóu)于(yú)外(wài)設OV7670配置接口(kǒu)使用(yòng)的(de)是(shì)SCCB協議,所(suǒ)以(yǐ)外(wài)設配置接口(kǒu)时(shí)序轉(zhuǎn)換模块(kuài)对(duì)外(wài)接口(kǒu)也(yě)應(yìng)該是(shì)SCCB,对(duì)內(nèi)是(shì)MDY規範接口(kǒu)。
補充後(hòu)框图(tú)如(rú)下(xià)所(suǒ)示:
6.根(gēn)據(jù)实際情(qíng)況,增加、補充或(huò)者(zhě)拆分(fēn)独立对(duì)應(yìng)模块(kuài),随时(shí)調整
到(dào)第(dì)6步,根(gēn)據(jù)數據(jù)流向(xiàng),需要(yào)对(duì)模块(kuài)間(jiān)的(de)接口(kǒu)進(jìn)行詳细(xì)分(fēn)析了(le),補充模块(kuài)或(huò)者(zhě)将功能(néng)相同(tóng)的(de)模块(kuài)合并化(huà)簡。
a) OV7670图(tú)像采集模块(kuài)輸出(chū)的(de)图(tú)像數據(jù)是(shì)RGB565格式,需要(yào)先(xiān)将RGB565信(xìn)号(hào)轉(zhuǎn)成(chéng)灰度(dù)图(tú)像,因(yīn)此(cǐ)需要(yào)一(yī)个(gè)RGB轉(zhuǎn)灰度(dù)模块(kuài);
b) 輸出(chū)的(de)图(tú)像灰度(dù)數據(jù)需要(yào)進(jìn)行高(gāo)斯濾波(bō)处理,因(yīn)此(cǐ)需要(yào)一(yī)个(gè)高(gāo)斯濾波(bō)模块(kuài);
c) 为(wèi)了(le)做邊(biān)緣檢测,需要(yào)将高(gāo)斯濾波(bō)处理後(hòu)的(de)灰度(dù)图(tú)像數據(jù)轉(zhuǎn)換为(wèi)單bit數據(jù),因(yīn)此(cǐ)需要(yào)一(yī)个(gè)灰度(dù)轉(zhuǎn)單bit模块(kuài);
d) 轉(zhuǎn)換後(hòu)的(de)單bit數據(jù),需要(yào)經(jīng)过(guò)sobel算法处理才能(néng)得到(dào)图(tú)像邊(biān)緣,因(yīn)此(cǐ)需要(yào)一(yī)个(gè)sobel算法处理模块(kuài);
e) 經(jīng)过(guò)sobel算法处理模块(kuài)輸出(chū)的(de)图(tú)像數據(jù)就(jiù)可(kě)以(yǐ)輸出(chū)給(gěi)顯示器了(le),但是(shì)为(wèi)了(le)图(tú)像連(lián)續完整輸出(chū)、不(bù)斷幀,就(jiù)需要(yào)做一(yī)下(xià)緩存,因(yīn)此(cǐ)需要(yào)一(yī)个(gè)图(tú)像緩存模块(kuài)。
補充後(hòu)如(rú)下(xià)图(tú)所(suǒ)示:
接下(xià)来(lái)将功能(néng)互斥、數據(jù)流向(xiàng)相關(guān)且接口(kǒu)一(yī)致(zhì)的(de)模块(kuài)做合并化(huà)簡处理,如(rú)下(xià)图(tú)所(suǒ)示:
7.考慮是(shì)否涉及(jí)多(duō)路(lù)進(jìn)一(yī)路(lù)出(chū),要(yào)用(yòng)FIFo
本(běn)項目數據(jù)流方(fāng)面(miàn)沒(méi)有(yǒu)涉及(jí)多(duō)路(lù)進(jìn)一(yī)路(lù)出(chū)的(de)問(wèn)題(tí),不(bù)需要(yào)考慮此(cǐ)处的(de)FIFO問(wèn)題(tí)。
8.考慮是(shì)否涉及(jí)到(dào)速率匹(pǐ)配問(wèn)題(tí),要(yào)加上(shàng)RDY信(xìn)号(hào)或(huò)者(zhě)FIFO
首先(xiān)考慮與(yǔ)外(wài)圍器件(jiàn)通(tòng)信(xìn)的(de)接口(kǒu)上(shàng)是(shì)否需要(yào)rdy信(xìn)号(hào)
OV7670配置接口(kǒu)采用(yòng)的(de)SCCB協議,運行頻率是(shì)100K,遠(yuǎn)小于(yú)FPGA內(nèi)部(bù)系(xì)統運行頻率25M,所(suǒ)以(yǐ)外(wài)設配置接口(kǒu)时(shí)序轉(zhuǎn)換模块(kuài)與(yǔ)配置模块(kuài)間(jiān)需要(yào)設rdy信(xìn)号(hào)。
再考慮FPGA內(nèi)部(bù)模块(kuài)間(jiān)運行速率不(bù)匹(pǐ)配的(de)情(qíng)況
sobel算法处理模块(kuài)輸出(chū)的(de)图(tú)像數據(jù)發(fà)送給(gěi)图(tú)像緩存模块(kuài),图(tú)像緩存模块(kuài)要(yào)緩存一(yī)幅完整图(tú)像需要(yào)等待,需要(yào)設一(yī)个(gè)FIFO。
为(wèi)了(le)完成(chéng)乒乓操作,需要(yào)設立两(liǎng)个(gè)FIFO才能(néng)实現(xiàn)写FIFO A一(yī)幅完整图(tú)像數據(jù),同(tóng)时(shí)VGA顯示驅動(dòng)模块(kuài)可(kě)以(yǐ)读(dú)緩存好(hǎo)的(de)FIFO B內(nèi)完整图(tú)像數據(jù)。
因(yīn)此(cǐ)图(tú)像緩存模块(kuài)需要(yào)設两(liǎng)个(gè)FIFO(实際項目中(zhōng)用(yòng)片(piàn)內(nèi)RAM代(dài)替了(le)FIFO,本(běn)質(zhì)相同(tóng))。
最(zuì)終(zhōng)得到(dào)的(de)模块(kuài)图(tú)如(rú)下(xià)所(suǒ)示:
到(dào)此(cǐ),根(gēn)據(jù)模块(kuài)劃(huà)分(fēn)步驟一(yī)步步做下(xià)来(lái),图(tú)像邊(biān)緣檢测工程的(de)模块(kuài)劃(huà)分(fēn)雛形初步已經(jīng)完成(chéng)。具體(tǐ)实踐中(zhōng)需要(yào)根(gēn)據(jù)FPGA內(nèi)部(bù)信(xìn)号(hào)的(de)調整,随时(shí)拆分(fēn)或(huò)独立来(lái)增減功能(néng)模块(kuài)。
以(yǐ)上(shàng)就(jiù)是(shì)我(wǒ)们(men)做模块(kuài)劃(huà)分(fēn)的(de)基本(běn)思(sī)路(lù),大家(jiā)有(yǒu)什麼(me)問(wèn)題(tí)可(kě)以(yǐ)加Q群(qún)544453837進(jìn)行交流,更(gèng)多(duō)FPGA相關(guān)資料可(kě)以(yǐ)登录(lù)明(míng)德揚論壇進(jìn)行学習浏覽:http://www.fpgabbs.cn/。














