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