上篇我們介紹了相關(guān)的算法原理以及外設(shè)特性,本篇我們將介紹一下基于FPGA的實(shí)時(shí)圖像邊緣檢測(cè)系統(tǒng)的實(shí)現(xiàn)方案,算法的Verilog實(shí)現(xiàn)以及最終實(shí)現(xiàn)的檢測(cè)效果。
一、 設(shè)計(jì)方案
整個(gè)系統(tǒng)主要分為以下5個(gè)部分:攝像頭傳感器配置部分;圖像數(shù)據(jù)采集與處理部分;圖像緩存部分;VGA顯示部分;以及PLL時(shí)鐘管理部分;如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
攝像頭傳感器配置部分
按照配置表中的參數(shù),將攝像頭配置為分辨率為1280*720像素點(diǎn)、RGB565數(shù)據(jù)格式、VGA時(shí)序輸出;然后通過I2C協(xié)議將參數(shù)配置給攝像頭的每個(gè)寄存器。
圖像數(shù)據(jù)采集與處理部分
攝像頭配置完成后,在攝像頭輸出時(shí)鐘pclk驅(qū)動(dòng)下,完成圖像數(shù)據(jù)的采集與處理;圖像采集模塊(capture)對(duì)攝像頭輸出的像素?cái)?shù)據(jù)進(jìn)行串并轉(zhuǎn)換,然后給到后續(xù)的圖像處理模塊,依次進(jìn)行灰度轉(zhuǎn)換(rgb565_gray)、高斯濾波(gs_filter)、二值化處理(gray_bin)、Sobel邊緣檢測(cè)(sobel);在進(jìn)行二值化處理時(shí),直接將灰度圖像二值化為0或1。
圖像緩存部分
主要是SDRAM讀寫控制邏輯(rw_control)與SDRAM接口(sdram_interface);其中,rw_control模塊作為Master向sdram_interface發(fā)起突發(fā)傳輸請(qǐng)求。主要有以下幾個(gè)功能:
跨時(shí)鐘域數(shù)據(jù)緩存;
乒乓緩存控制;
SDRAM讀寫優(yōu)先級(jí)的仲裁以產(chǎn)生讀寫傳輸請(qǐng)求、地址等。
sdram_interface模塊作為Slave執(zhí)行Master發(fā)起的突發(fā)傳輸請(qǐng)求,主要是根據(jù)接收到讀、寫請(qǐng)求以及數(shù)據(jù)、地址等,向SDRAM芯片發(fā)起各種命令、地址、數(shù)據(jù),實(shí)現(xiàn)SDRAM的數(shù)據(jù)存取。
VGA顯示部分
主要是實(shí)現(xiàn)1080*720@60分辨率的VGA顯示時(shí)序,驅(qū)動(dòng)VGA接口的顯示器顯示處理結(jié)果。
PLL時(shí)鐘管理部分
主要是產(chǎn)生整個(gè)工程需要使用的幾個(gè)時(shí)鐘,100MHz的SDRAM控制器與SDRAM工作時(shí)鐘、75MHz的VGA驅(qū)動(dòng)時(shí)鐘,24MHz的攝像頭xclk時(shí)鐘;圖1中使用不同的顏色對(duì)不同的時(shí)鐘域進(jìn)行了標(biāo)注。實(shí)際上,我們?cè)谠O(shè)計(jì)SDRAM控制器時(shí)需要考慮存儲(chǔ)器的帶寬是否大于實(shí)際所需吞吐量。而存儲(chǔ)器的帶寬是由其工作時(shí)鐘頻率決定的,但由于刷新、激活、預(yù)充電的存在,SDRAM的實(shí)際存取速度比其工作時(shí)鐘頻率略??;實(shí)際所需吞吐量是指單位時(shí)間內(nèi)向SDRAM寫入的數(shù)據(jù)量與從SDRAM讀出數(shù)據(jù)量之和。當(dāng)存儲(chǔ)器帶寬小于實(shí)際所需吞吐量時(shí),由于存取速度超過SDRAM的存取帶寬會(huì)導(dǎo)致數(shù)據(jù)來不及寫入或者讀出,此時(shí)無論寫數(shù)據(jù)緩沖器與讀數(shù)據(jù)緩沖器的深度設(shè)置為多大,必然會(huì)導(dǎo)致寫緩沖區(qū)上溢或者讀緩沖區(qū)下溢。對(duì)于高速視頻流緩存場(chǎng)景,這種問題會(huì)造成災(zāi)難性的問題。因此,在設(shè)計(jì)SDRAM控制器時(shí)需要根據(jù)數(shù)據(jù)存取速度合理設(shè)置SDRAM的工作時(shí)鐘頻率。
二、 主要模塊分析
接下來我們對(duì)部分模塊的Verilog代碼實(shí)現(xiàn)方案進(jìn)行簡(jiǎn)單介紹。
高斯濾波模塊與sobel邊緣檢測(cè)模塊都涉及到二維矩陣卷積,所以如何生成一個(gè)3*3的二維矩陣是我們需要考慮的。實(shí)際上,這里我們可以調(diào)用Quartus Prime軟件自帶的移位存儲(chǔ)器(shift_ram)IP核,將其配置為3個(gè)tap,每個(gè)tap之間的間距為1280個(gè)數(shù)據(jù),如下圖所示。然后對(duì)每個(gè)tap輸出的數(shù)據(jù)打兩拍即可得到3*3的像素矩陣。然后使用流水線實(shí)現(xiàn)像素?cái)?shù)據(jù)與模板權(quán)重的卷積計(jì)算,既能提高實(shí)時(shí)性又能保證時(shí)序性能。
圖2 移位存儲(chǔ)器結(jié)構(gòu)示意圖SDRAM控制器部分主要是對(duì)檢測(cè)結(jié)果進(jìn)行緩沖,由于我們使用的分辨率為1280*720,即使是二值(0、1)圖像也需要兩個(gè)大小為900Kbit的RAM存儲(chǔ)器進(jìn)行乒乓緩存,而我們使用的EP4CE6F17C8型號(hào)的FPGA片上RAM僅有270Kbit,遠(yuǎn)遠(yuǎn)不能滿足需求;所以這里為了保證數(shù)據(jù)完整性,選用SDRAM來實(shí)現(xiàn)雙緩沖。在實(shí)現(xiàn)乒乓緩存時(shí),使用sop(幀起始)與eop(幀結(jié)束)來控制完整數(shù)據(jù)幀緩存或丟棄。
SDRAM接口模塊主要是配置SDRAM芯片的工作模式、存取數(shù)據(jù),為了保證SDRAM芯片以較高的吞吐量存取數(shù)據(jù),這里將SDRAM配置成了連續(xù)突發(fā)模式、突發(fā)長(zhǎng)度為512。由于SDRAM的指令較多,工作時(shí)序比較復(fù)雜,這里選擇使用狀態(tài)機(jī)來設(shè)計(jì)SDRAM接口時(shí)序,狀態(tài)機(jī)設(shè)計(jì)如下圖所示:
圖3 SDRAM接口模塊狀態(tài)機(jī)轉(zhuǎn)移圖
三、 實(shí)現(xiàn)結(jié)果
SDRAM乒乓緩存部分仿真結(jié)果如下圖4所示;當(dāng)向bank0寫完第一幀數(shù)據(jù)之后,會(huì)丟棄下一幀數(shù)據(jù),直到bank3中的一幀數(shù)據(jù)完整讀完時(shí)才會(huì)切換讀寫bank,然后再緩存下一幀新的數(shù)據(jù)。從圖5所示仿真結(jié)果可以看到,成功實(shí)現(xiàn)了對(duì)SDRAM兩個(gè)Bank的交替存取,實(shí)現(xiàn)了乒乓緩存的效果。
圖4 乒乓緩存仿真結(jié)果
圖5 SDRAM存取仿真結(jié)果本設(shè)計(jì)最終實(shí)現(xiàn)結(jié)果如圖6所示,能夠?qū)崟r(shí)的檢測(cè)圖像邊緣,提取出目標(biāo)的輪廓,達(dá)到預(yù)期效果。但是由于光線影響等方面的原因,導(dǎo)致最終實(shí)現(xiàn)出來的效果不是非常完美。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21799瀏覽量
606194 -
檢測(cè)系統(tǒng)
+關(guān)注
關(guān)注
3文章
960瀏覽量
43177 -
圖像邊緣
+關(guān)注
關(guān)注
0文章
10瀏覽量
7344
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論