一種基于FPGA的多路視頻通道控制系統(tǒng)設(shè)計
視頻監(jiān)控以其直觀、方便、信息內(nèi)容豐富而廣泛應(yīng)用于許多場合。視頻監(jiān)控成為人們生活中不可缺少的技術(shù)。在一些危險場所,用視頻監(jiān)控代替人工監(jiān)視,可以保證人們的生命安全。鑒于一路視頻的視野范圍有限,要充分收集目標(biāo)的信息,就需要有多路視頻來對同一個物體在不同方位進(jìn)行監(jiān)控。因此需要有一個良好的控制手段,確保多路視頻控制穩(wěn)定,可靠。針對織布機告警系統(tǒng)的需求,提出一種基于FPGA的多路視頻通道控制系統(tǒng),本系統(tǒng)設(shè)計利用FPGA間接控制2塊MAX4312選通所需要的視頻通道,實現(xiàn)各個視頻通道間相互切換。根據(jù)開關(guān)控制信號的設(shè)計思想在FPGA中對撥動開關(guān)輸入信號做去抖動處理,然后對不同的開關(guān)操作進(jìn)行編碼,最后將信號送給DSP進(jìn)行處理。
1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)總體結(jié)構(gòu)如圖1所示。在1臺工業(yè)織布機上安裝了16個CCD圖像傳感器對布匹進(jìn)行圖像監(jiān)控,通過2片MAX4312選擇16路圖像視頻信號中的一路,經(jīng)可編程視頻輸入器件SAA7111處理后從VP0輸出數(shù)字圖像信號。同時SAA7111輸出相應(yīng)的行、場同步信號HS,VS以及與HS鎖定的時鐘信號LLC、LLC2,利用這些信號在EP3C25F324C8中對圖像進(jìn)行預(yù)處理。然后將處理后的圖像通過PPI口送給BF561中進(jìn)行算法處理,最后將處理結(jié)果送給報警和狀態(tài)指示裝置,實現(xiàn)織布機告警功能。為了使圖像監(jiān)控更方便,該系統(tǒng)設(shè)計增添了電平撥動開關(guān)和脈沖撥動開關(guān)。電平開關(guān)使輸入圖像停止切換,固定于其中一路視頻輸人圖像。脈沖開關(guān)可以左右撥動,每次向左或向右撥動都會產(chǎn)生一個很短的上升沿脈沖,同時圖像向前或向后進(jìn)行切換,實現(xiàn)手動選擇視頻輸入通道的功能。
2 軟件模塊設(shè)計
2.1 開關(guān)控制信號
實際工程中,BF56l連接在FPGA上的PF引腳比較少。為了節(jié)約資源,只通過BF561中的BF9來識別2個撥動開關(guān)的動作。因此首先需要將2個撥動開關(guān)輸入信號在FPGA中進(jìn)行處理整合,得到合適的信號。
本系統(tǒng)開關(guān)控制信號的設(shè)計思想:由于設(shè)計這個信號的目的是識別開關(guān)控制動作。因此,只要任何一個開關(guān)發(fā)生了動作就需要產(chǎn)生一個脈沖。如果只有脈沖信號就只能知道開關(guān)發(fā)生了動作,而不知道是哪個開關(guān)發(fā)生了什么動作。所以,要識別具體是哪個開關(guān)發(fā)生了什么動作就必須配合雙口RAM中的數(shù)據(jù)進(jìn)行解碼。該系統(tǒng)設(shè)計的脈沖持續(xù)時間對BF561來說并不重要,只要BF561能識別這個脈沖即可。由于系統(tǒng)中的2個撥動開關(guān),一個是電平撥動開關(guān),另一個是脈沖撥動開關(guān),因此,只要根據(jù)電平撥動開關(guān)的動作制作相應(yīng)的脈沖信號,再用這個信號與脈沖撥動開關(guān)產(chǎn)生的原始信號邏輯相與,就能得到所需要的目的信號。
由于撥動開關(guān)是機械觸點,當(dāng)其斷開、閉合時會有相應(yīng)的前沿、后沿抖動,為了使每次動作都只做一次響應(yīng),就必須對原始開關(guān)信號做去抖動處理。抖動信號可以分為2種:一種是時間很短的干擾信號,如高頻毛刺;另一種是時間較長的干擾信號,如開關(guān)抖動。這里的撥動開關(guān)都是人為操作,因此每次觸發(fā)的時間都不會很短,一般小于10 Hz。根據(jù)上述分析開關(guān)抖動信號屬于后一種。因此在每次開關(guān)操作后,對其產(chǎn)生的信號進(jìn)行連續(xù)采樣,如果每次采樣都是低電平或者都是高電平,就認(rèn)為此信號不是抖動,確實開關(guān)狀態(tài)發(fā)生了變化。整個設(shè)計過程使用Verilog硬件描述語言編寫,然后在QuartusⅡ平臺上編譯,并采用SignalTapⅡLogic Arlalvzer對信號采樣分析,調(diào)試通過后連同其他程序一起燒寫進(jìn)FPGA的配置器件EPCSl6中。圖2~圖4分別是各個開關(guān)動作去抖動前和去抖動后的實時信號采樣圖。去抖動模塊中的部分代碼如下:
其中,clk為13.5 MHz頻率的時鐘信號,clk_cnt為采樣時間間隔計數(shù)器,當(dāng)clk_cnt為135 000時采樣1次,即每隔10 ms采樣1次。寄存器shuru_temp存儲前一次開關(guān)信號狀態(tài),shum存儲當(dāng)前開關(guān)信號狀態(tài)。如果shuru_temp的值等于shtlm的值,則計數(shù)器teST_cnt自動加l。如果連續(xù)4次采樣值相等,即test_cnt=4時去抖動輸出才隨輸入變化。
用電平撥動開關(guān)信號作為輸入,制作了一個脈沖信號用于識別開關(guān)動作,其代碼如下:
代碼中寄存器level_cONtrl_TEMP存儲level_contrl延時256個時鐘周期后的信號,然后用level_eontrl_TEMP中存儲的信號與level_co-ntrl的值相異或產(chǎn)生所需要的脈沖信號。
調(diào)試中發(fā)現(xiàn),去抖動后的信號經(jīng)?;煊谐掷m(xù)時間很短的高頻脈沖干擾信號,因此設(shè)計中使用兩級D觸發(fā)器延時來徹底消除高頻脈沖干擾,其程序代碼如下:
2.2 雙口RAM及開關(guān)信號編碼設(shè)計
雙口RAM分為真、假2種雙口。真雙口2個端口都可以讀寫,互不干擾。本次設(shè)計根據(jù)實際需要,添加的RAM模塊一端只讀,另一端只寫,讀寫互不干擾。根據(jù)上述分析可知,開關(guān)控制信號只能知道有開關(guān)控制動作發(fā)生,但是不能識別具體哪個開關(guān)發(fā)生了動作。因此,設(shè)計中首先利用MegaWizardPlug_In Manager中的宏功能塊RAM:2_PORT產(chǎn)生1個雙口RAM存儲塊,然后對這個宏功能模塊的參數(shù)進(jìn)行適當(dāng)調(diào)整,產(chǎn)生一個滿足自己特定要求的模塊,如圖5所示。
設(shè)計過程中,首先將開關(guān)動作進(jìn)行編碼。然后將編碼后的數(shù)據(jù)存進(jìn)空間大小為8的雙口RAM中。當(dāng)BF561檢測到PF9上的脈沖后,在PF中斷中讀取RAM中指定地址的數(shù)據(jù),然后根據(jù)這個數(shù)據(jù)進(jìn)行開關(guān)狀態(tài)解碼并按解碼后的控制信息對2塊MAX4312器件進(jìn)行操作以控制視頻通道。對開關(guān)動作進(jìn)行的編碼程序代碼如下:
整個設(shè)計有4種開關(guān)動作,程序中分別將其編碼成數(shù)據(jù)0l、02、03、04,然后將編碼后的這4個數(shù)據(jù)存入雙口模塊中,等待BF561來讀取并進(jìn)行解碼。圖6是SignalTapⅡLogic Analyzer中對脈沖開關(guān)向右撥動后存入RAM中的數(shù)據(jù)進(jìn)行采樣。
程序中RAM的讀信號rden_signal是由DSP發(fā)送的地址信號DSP_A、BANK選擇信號DSP_AMSl以及DSP讀信號DSP_ARE進(jìn)行控制的。當(dāng)DSP不從雙口讀取數(shù)據(jù)時,必須給DSP的數(shù)據(jù)線賦值高阻,以免影響SDRAM對DSP數(shù)據(jù)線的操作。賦值指令如下:assignDSP_D=(rden_signal=l 'b1)?DSP_D_TEMP;8 'hzz;其中DSP_D_TEMP是從雙口中讀取的數(shù)據(jù)。
3 結(jié)論
首先介紹了整個系統(tǒng)的工業(yè)背景和硬件架構(gòu),然后著重闡述了怎樣在FPGA中處理開關(guān)控制信號,以達(dá)到可靠響應(yīng)每個開關(guān)動作的目的。整個設(shè)計程序是在QuartusⅡ平臺上用Verilog硬件描述語言編寫,利用QuartusⅡ中的下載工具和SignalTapⅡLogic Analyzer工具進(jìn)行下載、實時采樣,并多次調(diào)試驗證。本次設(shè)計已經(jīng)成功應(yīng)用于布機告警系統(tǒng)中,每次撥動開關(guān)都能準(zhǔn)確、可靠的切換視頻通道。雖然此系統(tǒng)中只有兩種開關(guān),但是整個程序的設(shè)計思想對多種開關(guān)控制也是通用的,只需在細(xì)節(jié)上稍作改變就能識別多種開關(guān)動作。