李杰++喬明軍++馬恩財++劉明鋒
摘要:針對PAL制模擬視頻用液晶顯示器進(jìn)行輸出觀察的需求,以FPGA為核心設(shè)計軟件程序,利用自定義雙口RAM對PAL和VGA信號之間的不同時鐘控制邏輯進(jìn)行匹配,并以行序號作為各模塊間的邏輯動作口令,實現(xiàn)了PAL制視頻轉(zhuǎn)換到VGA顯示。充分利用了FPGA可重構(gòu)特性,使系統(tǒng)開發(fā)和功能擴展更加簡單方便。
關(guān)鍵詞:PAL VGA FPGA
中圖分類號:TN791;TP273 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2014)08-0144-02
1 引言
模擬視頻用液晶顯示器進(jìn)行顯示,具有通用方便的優(yōu)點。在PAL制模擬視頻轉(zhuǎn)換VGA顯示的過程中,圖像數(shù)據(jù)量大、實時性要求高、控制邏輯復(fù)雜,故要求主控芯片對硬件和軟件編程的支持非常靈活,并具有很強的邏輯控制能力和很高的數(shù)據(jù)吞吐帶寬[1][2]。本文基于ALTERA Cyclone芯片,分別控制視頻解碼芯片MAX9526、視頻編碼芯片ADV7125、SDRAM構(gòu)建視頻采集顯示系統(tǒng),并采用硬件描述語言編寫控制邏輯,實現(xiàn)PAL制模擬視頻到VGA液晶顯示器的無失真顯示。
2 實現(xiàn)原理及框架
系統(tǒng)分為視頻數(shù)據(jù)解析模塊、液晶顯示控制模塊、SDRAM控制模塊、核心邏輯控制模塊。由于各模塊間時鐘不一致,利用雙口RAM進(jìn)行隔離實現(xiàn)數(shù)據(jù)通信和同步[3],使視頻輸入和視頻顯示流暢無沖突。由視頻數(shù)據(jù)解析模塊和液晶顯示控制模塊的行序號分配各個模塊的工作任務(wù)。系統(tǒng)結(jié)構(gòu)如圖1所示。
3 軟件模塊設(shè)計
3.1 視頻數(shù)據(jù)解析模塊
通過控制MAX9526將模擬視頻量化編碼成8位ITU-R BT.656編碼格式,輸出分辨率720×576,像素時鐘為27MHz。視頻數(shù)據(jù)解析模塊負(fù)責(zé)分離出有效圖像數(shù)據(jù),以一行數(shù)據(jù)為單位存儲到自定義雙口雙緩沖RAM中,并輸出行序號通知核心邏輯控制32模塊執(zhí)行相應(yīng)操作。本模塊時鐘由LLC數(shù)據(jù)輸出時鐘直接驅(qū)動以保證工作時序和LLC驅(qū)動數(shù)據(jù)的同步。
ITU-R BT.656視頻數(shù)據(jù)流的基準(zhǔn)信號為SAV/EAV,格式為FF0000XY,用來區(qū)分奇偶場和標(biāo)識一行數(shù)據(jù)的開始結(jié)束,字節(jié)XY表示該行數(shù)據(jù)的類型[4],實際只需尋找奇場數(shù)據(jù)行開始標(biāo)志FF000080和偶場數(shù)據(jù)行開始標(biāo)志FF0000C7。上電后,MAX9526開始對PAL制視頻信號進(jìn)行轉(zhuǎn)換輸出,程序邏輯首先進(jìn)行幀同步,即先尋找偶數(shù)場行標(biāo)志FF0000C7,再尋找到第一個FF000080則是奇數(shù)場的第一行。 由于數(shù)據(jù)量比較大和邏輯延遲的影響,所采用的雙口RAM作為數(shù)據(jù)緩沖,分為2個地址段進(jìn)行乒乓交替讀寫,讀寫地址根據(jù)輸出的行序號進(jìn)行判斷。將奇數(shù)行數(shù)據(jù)寫入低段地址,偶數(shù)行數(shù)據(jù)寫入高段地址。軟件流程圖如圖2所示。
圖象緩存采用32位SDRAM,所以雙口RAM要具有有8位寫入轉(zhuǎn)32位讀出的功能。其中RAM使用FPGA自帶的M4K空間,開辟四個連續(xù)M4K RAM,將寫入地址的低2位作為判據(jù),00寫入ram0,01寫入ram1,10寫入ram2,11寫入ram3。由于每行視頻數(shù)據(jù)對應(yīng)720字節(jié),即180個32位數(shù)據(jù),故讀出地址為0~179,讀出時將ram0、ram1、ram2、ram3同一地址的單字節(jié)數(shù)據(jù)合并為32位進(jìn)行輸出。
3.2 液晶顯示控制模塊
液晶顯示控制模塊時鐘工作在40MHz,由ALTPLL直接生成,控制顯示器分辨率800×600,刷新率60Hz。負(fù)責(zé)讀出雙口RAM中的模擬視頻數(shù)據(jù),并輸出行同步、列同步信號,控制ADV7125驅(qū)動顯示器輸出,同時提前一行時間輸出要顯示的VGA行序號,通知核心邏輯控制模塊在本模塊的雙口RAM中準(zhǔn)備VGA顯示數(shù)據(jù)[5][6]。軟件流程圖如圖3所示。
本模塊雙口RAM為32位寫入8位讀出,也分為2段地址,一塊地址數(shù)據(jù)用于顯示另一塊地址用于數(shù)據(jù)準(zhǔn)備,其讀寫方式與視頻數(shù)據(jù)解析模塊的雙口RAM類似。將720×576的圖像顯示在顯示器中間,其它區(qū)域以黑色顯示,則x偏移為40,y偏移為12。在軟件設(shè)計時,設(shè)定一個計數(shù)器,分別對行點和行數(shù)進(jìn)行計數(shù),根據(jù)時序分別輸出對應(yīng)的行列同步信號及相應(yīng)的像素點數(shù)據(jù)。由于VGA顯示的數(shù)據(jù)需要在顯示前準(zhǔn)備好,需在顯示第n-1行數(shù)據(jù)時,請求核心邏輯控制模塊將第n行的數(shù)據(jù)寫入到雙口RAM中。3.3 SDRAM控制模塊
SDRAM控制模塊負(fù)責(zé)控制其時序和讀寫操作,工作時鐘為20MHz。SDRAM存儲器具有易失性,要求在一定的時間內(nèi)對存儲內(nèi)容進(jìn)行刷新操作,本設(shè)計選用的SDRAM為64ms刷新4096行,即15.6us刷新一行。由于視頻數(shù)據(jù)不僅要寫入還要讀出到VGA顯示,為提高SDRAM利用效率,降低讀寫操作的延遲時間,采用full page讀寫模式[7]。在full page模式下,一個行地址可對SDRAM連續(xù)的讀出或?qū)懭?56個32位數(shù)據(jù),而一行視頻數(shù)據(jù)僅有180個32位數(shù)據(jù)。模擬視頻一幀圖像共576行,利用576個行地址分別寫入對應(yīng)的行數(shù)據(jù),就可完成數(shù)據(jù)緩沖工作。刷新操作采用self refresh模式,在每行數(shù)據(jù)讀出和寫入結(jié)束后進(jìn)行刷新。
3.3 核心邏輯控制模塊
核心邏輯控制模塊控制著系統(tǒng)邏輯的正確運行,根據(jù)視頻數(shù)據(jù)解析模塊和液晶顯示控制模塊的行序號的變化,分別計算相應(yīng)的雙口RAM操作地址,讀出一行視頻數(shù)據(jù)寫入到SDRAM中,從SDRAM中讀取一行數(shù)據(jù)寫入到雙口RAM中。由于模擬視頻是先奇數(shù)場數(shù)據(jù)后偶數(shù)場數(shù)據(jù),需要對數(shù)據(jù)進(jìn)行交叉存儲,故SDRAM寫入地址要根據(jù)奇偶場和行序號進(jìn)行計算。軟件流程圖如圖4所示。
為使軟件設(shè)計易于擴展和修改,所有的模塊通信邏輯均采用請求和回應(yīng)模型[8],即模塊A向模塊B發(fā)送請求信號后,B模塊執(zhí)行請求操作,待操作完成以后對模塊A發(fā)送回應(yīng)信號,只有當(dāng)模塊A在收到回應(yīng)信號后才停止發(fā)送請求信號,否則一直發(fā)送請求信號,在FPGA邏輯中請求信號線在沒有請求時為低,有請求時置高,并且一直為高直到收到回應(yīng)脈沖信號后再置低。模擬視頻數(shù)據(jù)寫入到SDRAM和從SDRAM讀出到VGA顯示,在實際運行中是有可能同時出現(xiàn)的,這樣可能會導(dǎo)致視頻數(shù)據(jù)的寫入或讀出錯誤,從而影響最終的顯示效果。當(dāng)出現(xiàn)這種情況時,請求和回應(yīng)模型會讓硬件邏輯對寫入或讀出請求進(jìn)行等待,當(dāng)一個操作結(jié)束以后再進(jìn)行另一個操作,寫入或讀出請求只有在收到操作完成的信號以后才會被清除,這樣就不會出現(xiàn)丟失數(shù)據(jù)或顯示畫面花屏的現(xiàn)象。endprint
因此需設(shè)計一個請求發(fā)生和結(jié)束模塊,把行序號轉(zhuǎn)換為請求信號,當(dāng)收到操作結(jié)束脈沖置低請求信號。行序號只在行的結(jié)束時發(fā)生變化,持續(xù)時間為一行視頻點所占的時間,設(shè)計中要將行序號用時鐘節(jié)拍進(jìn)行同步,并把變化時刻的行序號轉(zhuǎn)換為脈沖輸出。利用阻塞賦值編程,則新值和舊值會在變化的時刻相差為1,而其他時刻相差為0,這樣就實現(xiàn)了行序號到脈沖的轉(zhuǎn)換。
對于一行VGA信號,行刷新時間為27.8us,對于一行PAL信號,行刷新時間為69.4us,而SDRAM的時鐘為20M,并以full page模式進(jìn)行讀寫,一行720字節(jié)數(shù)據(jù)以32位讀出或?qū)懭霑r間為9.5us,由此可以得出在液晶顯示模塊請求VGA行數(shù)據(jù)并從SDRAM讀出到模塊的雙口RAM時,讓PAL行數(shù)據(jù)的寫入請求等待的時間不會超過PAL行數(shù)據(jù)刷新的時間,同時PAL行數(shù)據(jù)寫入SDRAM的時候,等待PAL行數(shù)據(jù)寫入結(jié)束時依然有(27.8-9.5)=18.3us的時間冗余,在此時間內(nèi)完全可以從SDRAM中讀出VGA需要顯示的行數(shù)據(jù),故硬件邏輯不會發(fā)生沖突。考慮到還要對SDRAM進(jìn)行行刷新,一次行刷新僅需0.35us的時間,可忽略不計。
4 結(jié)語
在實際工作中,系統(tǒng)對液晶的驅(qū)動穩(wěn)定可靠,并能準(zhǔn)確無失真的把模擬攝像頭拍攝的視頻圖像顯示在液晶顯示器上,同時將模擬視頻轉(zhuǎn)換為數(shù)字信號的過程,為下一步的圖像處理工作提供了硬件條件和軟件基礎(chǔ)。
參考文獻(xiàn)
[1]劉韜.FPGA數(shù)字電子系統(tǒng)設(shè)計與開發(fā)實例導(dǎo)航[M].北京:人民郵電出版社,2005.
[2]王彥.基于FPGA的工程設(shè)計與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2007.
[3]易鳳忍.用于視頻轉(zhuǎn)換系統(tǒng)的VGA控制器設(shè)計與實現(xiàn)[J].電視技術(shù),2013,37(23):69-72.
[4]趙宏陽.基于FPGA的高速多路視頻數(shù)據(jù)采集系統(tǒng)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(139):56-58.
[5]廖永清.基于FPGA的VGA圖像動態(tài)顯示控制器的設(shè)計與實現(xiàn)[J].電視技術(shù),2011(17):52-54.
[6]郭漢洲.基于ADV7125的目標(biāo)發(fā)生器[J].長春工業(yè)大學(xué)學(xué)報,2013,34(3):323-327.
[7]項力領(lǐng).單片SDRAM的數(shù)據(jù)讀寫乒乓操作設(shè)計[J].長春理工大學(xué)學(xué)報,2013,36(5):140-143.
[8]吳繼華.Verilog HDL設(shè)計與驗證[M].北京:人民郵電出版社,2006.endprint
因此需設(shè)計一個請求發(fā)生和結(jié)束模塊,把行序號轉(zhuǎn)換為請求信號,當(dāng)收到操作結(jié)束脈沖置低請求信號。行序號只在行的結(jié)束時發(fā)生變化,持續(xù)時間為一行視頻點所占的時間,設(shè)計中要將行序號用時鐘節(jié)拍進(jìn)行同步,并把變化時刻的行序號轉(zhuǎn)換為脈沖輸出。利用阻塞賦值編程,則新值和舊值會在變化的時刻相差為1,而其他時刻相差為0,這樣就實現(xiàn)了行序號到脈沖的轉(zhuǎn)換。
對于一行VGA信號,行刷新時間為27.8us,對于一行PAL信號,行刷新時間為69.4us,而SDRAM的時鐘為20M,并以full page模式進(jìn)行讀寫,一行720字節(jié)數(shù)據(jù)以32位讀出或?qū)懭霑r間為9.5us,由此可以得出在液晶顯示模塊請求VGA行數(shù)據(jù)并從SDRAM讀出到模塊的雙口RAM時,讓PAL行數(shù)據(jù)的寫入請求等待的時間不會超過PAL行數(shù)據(jù)刷新的時間,同時PAL行數(shù)據(jù)寫入SDRAM的時候,等待PAL行數(shù)據(jù)寫入結(jié)束時依然有(27.8-9.5)=18.3us的時間冗余,在此時間內(nèi)完全可以從SDRAM中讀出VGA需要顯示的行數(shù)據(jù),故硬件邏輯不會發(fā)生沖突??紤]到還要對SDRAM進(jìn)行行刷新,一次行刷新僅需0.35us的時間,可忽略不計。
4 結(jié)語
在實際工作中,系統(tǒng)對液晶的驅(qū)動穩(wěn)定可靠,并能準(zhǔn)確無失真的把模擬攝像頭拍攝的視頻圖像顯示在液晶顯示器上,同時將模擬視頻轉(zhuǎn)換為數(shù)字信號的過程,為下一步的圖像處理工作提供了硬件條件和軟件基礎(chǔ)。
參考文獻(xiàn)
[1]劉韜.FPGA數(shù)字電子系統(tǒng)設(shè)計與開發(fā)實例導(dǎo)航[M].北京:人民郵電出版社,2005.
[2]王彥.基于FPGA的工程設(shè)計與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2007.
[3]易鳳忍.用于視頻轉(zhuǎn)換系統(tǒng)的VGA控制器設(shè)計與實現(xiàn)[J].電視技術(shù),2013,37(23):69-72.
[4]趙宏陽.基于FPGA的高速多路視頻數(shù)據(jù)采集系統(tǒng)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(139):56-58.
[5]廖永清.基于FPGA的VGA圖像動態(tài)顯示控制器的設(shè)計與實現(xiàn)[J].電視技術(shù),2011(17):52-54.
[6]郭漢洲.基于ADV7125的目標(biāo)發(fā)生器[J].長春工業(yè)大學(xué)學(xué)報,2013,34(3):323-327.
[7]項力領(lǐng).單片SDRAM的數(shù)據(jù)讀寫乒乓操作設(shè)計[J].長春理工大學(xué)學(xué)報,2013,36(5):140-143.
[8]吳繼華.Verilog HDL設(shè)計與驗證[M].北京:人民郵電出版社,2006.endprint
因此需設(shè)計一個請求發(fā)生和結(jié)束模塊,把行序號轉(zhuǎn)換為請求信號,當(dāng)收到操作結(jié)束脈沖置低請求信號。行序號只在行的結(jié)束時發(fā)生變化,持續(xù)時間為一行視頻點所占的時間,設(shè)計中要將行序號用時鐘節(jié)拍進(jìn)行同步,并把變化時刻的行序號轉(zhuǎn)換為脈沖輸出。利用阻塞賦值編程,則新值和舊值會在變化的時刻相差為1,而其他時刻相差為0,這樣就實現(xiàn)了行序號到脈沖的轉(zhuǎn)換。
對于一行VGA信號,行刷新時間為27.8us,對于一行PAL信號,行刷新時間為69.4us,而SDRAM的時鐘為20M,并以full page模式進(jìn)行讀寫,一行720字節(jié)數(shù)據(jù)以32位讀出或?qū)懭霑r間為9.5us,由此可以得出在液晶顯示模塊請求VGA行數(shù)據(jù)并從SDRAM讀出到模塊的雙口RAM時,讓PAL行數(shù)據(jù)的寫入請求等待的時間不會超過PAL行數(shù)據(jù)刷新的時間,同時PAL行數(shù)據(jù)寫入SDRAM的時候,等待PAL行數(shù)據(jù)寫入結(jié)束時依然有(27.8-9.5)=18.3us的時間冗余,在此時間內(nèi)完全可以從SDRAM中讀出VGA需要顯示的行數(shù)據(jù),故硬件邏輯不會發(fā)生沖突。考慮到還要對SDRAM進(jìn)行行刷新,一次行刷新僅需0.35us的時間,可忽略不計。
4 結(jié)語
在實際工作中,系統(tǒng)對液晶的驅(qū)動穩(wěn)定可靠,并能準(zhǔn)確無失真的把模擬攝像頭拍攝的視頻圖像顯示在液晶顯示器上,同時將模擬視頻轉(zhuǎn)換為數(shù)字信號的過程,為下一步的圖像處理工作提供了硬件條件和軟件基礎(chǔ)。
參考文獻(xiàn)
[1]劉韜.FPGA數(shù)字電子系統(tǒng)設(shè)計與開發(fā)實例導(dǎo)航[M].北京:人民郵電出版社,2005.
[2]王彥.基于FPGA的工程設(shè)計與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2007.
[3]易鳳忍.用于視頻轉(zhuǎn)換系統(tǒng)的VGA控制器設(shè)計與實現(xiàn)[J].電視技術(shù),2013,37(23):69-72.
[4]趙宏陽.基于FPGA的高速多路視頻數(shù)據(jù)采集系統(tǒng)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(139):56-58.
[5]廖永清.基于FPGA的VGA圖像動態(tài)顯示控制器的設(shè)計與實現(xiàn)[J].電視技術(shù),2011(17):52-54.
[6]郭漢洲.基于ADV7125的目標(biāo)發(fā)生器[J].長春工業(yè)大學(xué)學(xué)報,2013,34(3):323-327.
[7]項力領(lǐng).單片SDRAM的數(shù)據(jù)讀寫乒乓操作設(shè)計[J].長春理工大學(xué)學(xué)報,2013,36(5):140-143.
[8]吳繼華.Verilog HDL設(shè)計與驗證[M].北京:人民郵電出版社,2006.endprint