本文為明德?lián)P原創(chuàng)文章,轉(zhuǎn)載請注明出處!
很多朋友在工程模塊劃分的時候總會遇到很多問題,比如不知道如何下手、模塊劃分不合理等;當(dāng)然我最初也和大家一樣不知道如何下手,學(xué)習(xí)了明德?lián)P的課程后,再加上和老師的多多交流,我也總結(jié)出了一套方法思路,今天就通過明德?lián)P邊緣檢測工程來與大家分享一下模塊的劃分思路。
明德?lián)P邊緣檢測工程是明德?lián)P的網(wǎng)絡(luò)班、就業(yè)班的其中一個項(xiàng)目,實(shí)現(xiàn)了圖像的實(shí)時采集、邊緣檢測算法、存儲控制以及與串口等功能,涉及到了比較全面的知識與算法。一起來看看如何劃分模塊。
一、模塊劃分要點(diǎn)總結(jié)
1、列出項(xiàng)目的功能要求(客戶提出的產(chǎn)品功能要求)
2、畫出硬件的系統(tǒng)結(jié)構(gòu)框圖(添加外設(shè))
3、框圖中每個外圍接口都對應(yīng)有一個接口轉(zhuǎn)換模塊
接口轉(zhuǎn)換模塊的作用是將外圍器件的接口時序轉(zhuǎn)為通用的接口時序,或者將通用接口時序轉(zhuǎn)換為外圍器件接口時序,這樣使得FPGA內(nèi)部其他模塊不用再關(guān)心外圍接口的時序了。
MDY規(guī)范通用接口時序:
l data以及對應(yīng)的vld,傳輸單個數(shù)據(jù)格式
l MDY的包文格式,din,vld,SOP,EOP,MTY,ERR
l wren,waddr,wdata;rden,raddr,rdata,rdata_vld
4、考慮是否涉及指令系統(tǒng)(操作碼+數(shù)據(jù)格式)
上位機(jī),例如PC,ARM,DSP或者其他的器件,只涉及到一個接口,但是卻有很多指令或者命令功能要發(fā)送,因此就需要一個指令系統(tǒng)。
指令系統(tǒng)一定會涉及到命令、地址和數(shù)據(jù)。這種情況,肯定會有一個“寄存器解析模塊”,根據(jù)命令、地址和數(shù)據(jù),改變相應(yīng)的寄存器的值。
5、考慮外圍器件是否涉及寄存器配置
項(xiàng)目中有某些外設(shè),上電工作前需要進(jìn)行配置才能按要求工作。因此需要對外設(shè)內(nèi)部寄存器進(jìn)行讀寫,這一流程是通過FPGA來進(jìn)行配置。
遇到這個情況,使用MDY推薦的模塊寄存器配置結(jié)構(gòu):
寄存器配置表模塊+寄存器讀寫配置模塊+外設(shè)配置接口時序轉(zhuǎn)換模塊
6、根據(jù)實(shí)際情況,增加、補(bǔ)充或者拆分,優(yōu)化對應(yīng)模塊,隨時調(diào)整
原則:根據(jù)接口信號,看模塊間是否方便對接。接口就決定了模塊功能。所以在這一層的調(diào)整,一定要清楚接口的定義。
7、考慮是否涉及多路進(jìn)一路出,要用FIFO
調(diào)度FIFO要考慮自身帶寬能否滿足多路一起突發(fā)發(fā)送時的數(shù)據(jù)量情況。如果帶寬不滿足,就要要輸出給上游模塊RDY信號。此時RDY信號有效取決于自己設(shè)置FIFO的Almost Full信號。如果帶寬滿足則不必設(shè)RDY信號。
8、考慮是否涉及到速率匹配問題,要加上RDY信號或者FIFO
首先考慮與外圍器件通信的接口上是否需要rdy信號(FPGA內(nèi)部運(yùn)行頻率往往與設(shè)接口速率不一致),然后考慮FPGA內(nèi)部模塊間數(shù)據(jù)帶寬是否不一致,有等一等的情況。
二、邊緣檢測工程案例分析
根據(jù)前面總結(jié)的要點(diǎn),通過實(shí)際項(xiàng)目案例來分析一下FPGA內(nèi)部功能模塊是怎樣劃分的。這里我們選取已經(jīng)做過的圖像邊緣檢測項(xiàng)目,接下來按照上面總結(jié)的模塊劃分步驟,一步步完成模塊初步劃分!
1.列出項(xiàng)目的功能要求
本項(xiàng)目功能要求:系統(tǒng)上電,OV7670攝像頭將實(shí)時采集圖像數(shù)據(jù)傳送給FPGA,經(jīng)過FPGA算法處理獲得邊緣圖像,最終輸出邊緣圖像到顯示器上。
功能分析:
a) 選用攝像頭OV7670作為圖像采集
b) 攝像頭內(nèi)部寄存器需要上電配置,因此外設(shè)需要配置按鍵
c) FPGA內(nèi)部做邊緣檢測算法處理
d) 輸出給顯示器顯示(用VGA接口)
2.畫出硬件系統(tǒng)結(jié)構(gòu)框圖
根據(jù)步驟1總結(jié)出的功能要求,找到除FPGA外需要哪些外圍器件。
外圍器件總共需要三個:
a) 按鍵
b) 攝像頭OV7670
c) 顯示器
畫出系統(tǒng)框圖如下所示:
3.框圖中每個外圍接口都對應(yīng)有一個接口轉(zhuǎn)換模塊
a) 按鍵對應(yīng)的接口轉(zhuǎn)換模塊是按鍵消抖檢測模塊;
b) OV7670攝像頭對應(yīng)的接口轉(zhuǎn)換模塊是OV7670圖像采集模塊;
c) 顯示器與FPGA連接是VGA接口,因此其對應(yīng)的接口轉(zhuǎn)換模塊是VGA顯示驅(qū)動模塊。
完善后框圖如下所示:
4.考慮是否涉及指令系統(tǒng)
本項(xiàng)目不涉及指令系統(tǒng),因此這里可以跳過。
5.考慮外圍器件是否涉及寄存器配置
本項(xiàng)目中OV7670攝像頭部分涉及寄存器配置。使用MDY推薦模板:寄存器配置表模塊+寄存器讀寫配置模塊+外設(shè)配置接口時序轉(zhuǎn)換模塊;
由于外設(shè)OV7670配置接口使用的是SCCB協(xié)議,所以外設(shè)配置接口時序轉(zhuǎn)換模塊對外接口也應(yīng)該是SCCB,對內(nèi)是MDY規(guī)范接口。
補(bǔ)充后框圖如下所示:
6.根據(jù)實(shí)際情況,增加、補(bǔ)充或者拆分獨(dú)立對應(yīng)模塊,隨時調(diào)整
到第6步,根據(jù)數(shù)據(jù)流向,需要對模塊間的接口進(jìn)行詳細(xì)分析了,補(bǔ)充模塊或者將功能相同的模塊合并化簡。
a) OV7670圖像采集模塊輸出的圖像數(shù)據(jù)是RGB565格式,需要先將RGB565信號轉(zhuǎn)成灰度圖像,因此需要一個RGB轉(zhuǎn)灰度模塊;
b) 輸出的圖像灰度數(shù)據(jù)需要進(jìn)行高斯濾波處理,因此需要一個高斯濾波模塊;
c) 為了做邊緣檢測,需要將高斯濾波處理后的灰度圖像數(shù)據(jù)轉(zhuǎn)換為單bit數(shù)據(jù),因此需要一個灰度轉(zhuǎn)單bit模塊;
d) 轉(zhuǎn)換后的單bit數(shù)據(jù),需要經(jīng)過sobel算法處理才能得到圖像邊緣,因此需要一個sobel算法處理模塊;
e) 經(jīng)過sobel算法處理模塊輸出的圖像數(shù)據(jù)就可以輸出給顯示器了,但是為了圖像連續(xù)完整輸出、不斷幀,就需要做一下緩存,因此需要一個圖像緩存模塊。
補(bǔ)充后如下圖所示:
接下來將功能互斥、數(shù)據(jù)流向相關(guān)且接口一致的模塊做合并化簡處理,如下圖所示:
7.考慮是否涉及多路進(jìn)一路出,要用FIFo
本項(xiàng)目數(shù)據(jù)流方面沒有涉及多路進(jìn)一路出的問題,不需要考慮此處的FIFO問題。
8.考慮是否涉及到速率匹配問題,要加上RDY信號或者FIFO
首先考慮與外圍器件通信的接口上是否需要rdy信號
OV7670配置接口采用的SCCB協(xié)議,運(yùn)行頻率是100K,遠(yuǎn)小于FPGA內(nèi)部系統(tǒng)運(yùn)行頻率25M,所以外設(shè)配置接口時序轉(zhuǎn)換模塊與配置模塊間需要設(shè)rdy信號。
再考慮FPGA內(nèi)部模塊間運(yùn)行速率不匹配的情況
sobel算法處理模塊輸出的圖像數(shù)據(jù)發(fā)送給圖像緩存模塊,圖像緩存模塊要緩存一幅完整圖像需要等待,需要設(shè)一個FIFO。
為了完成乒乓操作,需要設(shè)立兩個FIFO才能實(shí)現(xiàn)寫FIFO A一幅完整圖像數(shù)據(jù),同時VGA顯示驅(qū)動模塊可以讀緩存好的FIFO B內(nèi)完整圖像數(shù)據(jù)。
因此圖像緩存模塊需要設(shè)兩個FIFO(實(shí)際項(xiàng)目中用片內(nèi)RAM代替了FIFO,本質(zhì)相同)。
最終得到的模塊圖如下所示:
到此,根據(jù)模塊劃分步驟一步步做下來,圖像邊緣檢測工程的模塊劃分雛形初步已經(jīng)完成。具體實(shí)踐中需要根據(jù)FPGA內(nèi)部信號的調(diào)整,隨時拆分或獨(dú)立來增減功能模塊。
以上就是我們做模塊劃分的基本思路,大家有什么問題可以加Q群544453837進(jìn)行交流,更多FPGA相關(guān)資料可以登錄明德?lián)P論壇進(jìn)行學(xué)習(xí)瀏覽:http://www.fpgabbs.cn/。