2013-01-09 10:44:57 周三
FPGA_4K2K_WW02.pptx 總結:
這一周我主要是在PANEL板子上調試LVDS Format Conversion。我在modelsim上進行功能仿真時,產生的信號源比較有規律,特殊化了,因此有很多Bugs沒有觀察出來。后來用804A信號源進行測試時就發現該信號源DE有效行固定為2160,DE有效值固定為960,而DE有效行中無效值不固定,DE無效行的行數和個數不固定。因此DPRAM的存儲方式也要做相應的變化。我是將DE有效行和DE無效行分開處理。
1、數據處理模塊:實現將兩個時鍾內的數據組合輸出,需要這樣處理的數據有兩組。兩組數據處理完后得到dout1和dout2,再通過時鍾的上升沿分奇偶分別取出。取出時需要注意:由於DE有效行中有效值為960(偶數)剛好組合,而無效值不確定,當無效值為偶數時也剛好組合,當無效值為奇數時我將最后一個數據復制一次進行組合(剛好是DE有效的起點,因此我用DE有效脈沖進行判斷)再取出。而DE無效行的組合,我以DE有效行的最后一個行值line_total為單位進行划分組合。需要說明的是當line_total為偶數時,dout1和dout2剛好交錯取出,當line_total為奇數時,就會出現dout1重復取,但沒關系,因此此時dout1和dout2中DE、V、H是一一對應,而數據RGB可能不一樣。
2、DPRAM控制模塊:
讀控制:DE有效行中DE有效部分是分奇偶讀取,這由功能需求決定,為了防止讀空,讀的時機是當寫入數據達到de_active/2時才開始,DE有效行中DE無效部分是順序讀取。DE無效行也是順序讀取,需要注意的是DE無效行的起始點和終點,這是由寫入時的地址、DE無效行數和最后一個數所決定的。
寫控制:DE有效行的寫入地址是從0到line_total-1。而DE無效行的地址是從de_active到de_active+DE_IN_INVALID,其中DE_IN_INVALID的取值是要由讀寫速度決定的,由於讀取的時機是de_active/2,因此DE_IN_INVALID至少要大於de_active/2,本代碼取600。DE無效行的地址不能從0開始是因為DE有效行的存儲地址也是從0開始,可能會出現DE無效行的最后幾個數據被DE有效行數據的前面幾個數據所替換,導致結果有誤。DE無效行的存儲需要計算出其行數和計數器最后一個值,目的是供DPRAM讀取時控制DE無效行內的切換及與DE有效行間的切換。寫控制中DE有效行與DE無效行臨界切換,我用de_rise進行判斷。
任務:在ArriaV板子上實現松下信號源格式通過LVDS接口能在TPV的PANEL顯示。
因為松下信號源LVDS格式與PANEL的LVDS格式不同,因此需要寫個子模塊進行轉化。
4K2K@30HZ 4組LVDS分別為1,2,3,4。
TPV的PANEL中LVDS通道與像素關系如下:
1. LVDS1 will carry the pixels 0, 4, 8…..956, 960, 964, 968 …. 3836.
2. LVDS2 will carry the pixels 1, 5, 9 ….957, 961, 965, 969 …. 3837.
3. LVDS3 will carry the pixels 2, 6, 10 …..958, 962, 966, 970 …. 3838.
4. LVDS4 will carry the pixels 3, 7, 11 …..959, 963, 967, 971 …. 3839.
松下信號源中LVDS通道與像素關系如下:
1. LVDS1 will carry the pixels 0, 2, 4, 6, 8…..1916, 1918
2. LVDS2 will carry the pixels 1, 3, 5, 7, 9 ….1917, 1919
3. LVDS3 will carry the pixels 1920, 1922, 1924 …..3836, 3838
4. LVDS4 will carry the pixels 1921, 1923, 1925 …..3837, 3839
Figure 3: Arrangement of the LVDS Channels with pixel data. the relationship between the LVDS channel and the pixels carried per line. (The columns and rows start from 0 respectively. This is only for reference):
1. LVDS1 will carry the pixels 0, 4, 8…..956
2. LVDS2 will carry the pixels 1, 5, 9 ….957
3. LVDS3 will carry the pixels 2, 6, 10 …..958
4. LVDS4 will carry the pixels 3, 7, 11 …..959
5. LVDS5 will carry the pixels 960, 964, 968 …. 3836.
6. LVDS6 will carry the pixels 961, 965, 969 …. 3837.
7. LVDS7 will carry the pixels 962, 966, 970 …. 3838.
8. LVDS8 will carry the pixels 963, 967, 971 …. 3839.
初步想到通過DPRAM模塊去實現,但是在做的過程中發現DPRAM中寫的頻率是F,而讀的頻率是2*F,此時會出現讀空及重復讀之前的數據,想請教下我應該如何處理呢?
信號源:1,2,3,...,3840 打包兩個(如1和2,3和4,...,3839和3840)一組后存儲到DPRAM,再讀出來。打包會使時鍾減半,這樣導致的結果是DPRAM寫入時鍾是F,而讀出時鍾是2*F。解決方案是兩組信號源A和B同時處理,這樣可以保證每個時鍾源都存儲一組數據,時鍾也就不會減半,只是必須先存儲一半才可以讀出,先完成A組的讀取,后完成B組的讀取,這樣就可以保證一行正確地輸出。這個方法我已經寫好了,仿真通過。Ronnie的確厲害。
后來將LVDS FORMAT CONVERSION模塊加載到整個工程去,通過SignalTapII工具發現DE出錯,原因是在DE有效時需要分奇偶數,而在DE無效時只需順序讀取即可。而我是以一行(活動區域加隱藏區域為一行)直接整體進行奇偶讀取,導致DE的有效范圍和無效范圍混合了。
第一個注意:其實在加載完這個模塊時,我並沒有將經過這個模塊處理后的信號添加到SignalTapII中觀察,我就直接看接收信號與PANEL的顯示來判斷結果沒出來,還有Ronnie提示我應該針對這個模塊,加載這個模塊的信號進行觀察分析。
第二個注意:在用SignalTapII工具觀察該模塊信號時,發信DE出錯,我首先判斷的是經模塊處理DE被打亂,認為是正常的,其實我並沒有深入地分析,后面也是經過Ronnie說明才明白,我覺得他在整個工程的系統設計及具體實現思想上做了非常好的分析與設計,這讓我非常的佩服,我也希望自己能有系統概念,而不是一直停留在寫CODE和調試這種基礎上,當然目前的任務還是要強化基礎,學習系統設計。。。
第三個注意:在DE超過一行的所有無效域都必須按順序讀取。但DPRAM寫入時是以行為單位。而在讀取時卻把存儲空間簡單地分成前半部分為DE有效區(需要分奇偶讀取),后半部分為DE無效區(需要順序讀取),這樣會導致在一行全部為DE無效時,讀取出錯(可能導致V_SYN信號被分割)。
第四個注意:由於外部4K2K信號源很特別:DE有效部分固定為960,DE無效部分不固定。因此,在數據存入DPRAM時,DE有效部分和無效部分要分開處理,防止DE無效部分被DE有效部分覆蓋了。在讀取DPRAM中數據時,DE有效部分要分奇偶讀取,DE無效部分要注意起始點和結束點。
在不斷反復的調試中,我通過SignalTapII工具發現了很多問題,也解決了相關問題,有時遇到實在不懂、想不通的,我就請教Ronnie,發現他並不需要看代碼及仿真情況,就可以一下子知道我的錯誤,或者說他將整個系統可能出現的情況都想到了,很厲害,我到最后才發現原來很多問題都具有共同點,只是提取公約子,就可以很快解決了。如幀中行、行中列、DE有效區域和無效區域等等的處理。在不斷的修改代碼中,我發現我的編程越來越規范了,也越來越大膽了。
1917 |
1915 |
… |
3 |
1 |
1918 |
1916 |
… |
4 |
2 |
3839 |
3837 |
… |
1921 |
1919 |
3840 |
3838 |
… |
1922 |
1920 |
3837 |
3833 |
… |
5 |
1 |
3838 |
3834 |
… |
6 |
2 |
3839 |
3835 |
… |
7 |
3 |
3840 |
3836 |
… |
8 |
4 |
輸入數據如藍色所示。經過數據為144位,地址為12位的DPRAM模塊,其數具體存儲格式如紅色所示。輸出數據如綠色所示。
… |
959 |
958 |
… |
3 |
2 |
1 |
0 |
地址 |
DE無效數據
|
3837 |
1915 |
… |
1923 |
5 |
1919 |
1 |
數據存儲區域 |
3838 |
1916 |
… |
1924 |
6 |
1920 |
2 |
||
3839 |
1917 |
… |
1925 |
7 |
1921 |
3 |
||
3840 |
1918 |
… |
1926 |
8 |
1922 |
4 |
完成設計的第一步是將1,2,3,...,99,100。整理成每兩個一組輸出A。控制DPRAM讀寫時機。
寫程序時,在看仿真結果后發現控制信號要與輸入信號同步處理才能正確地輸出,但控制信號又無法提前一個時鍾,因此要通過逆向思維和換位思考的方法,如果改變不控制信號,那可以將輸入信號延時一個時鍾輸出,這樣控制信號就能與輸入信號同步。
寫程序的注意要點:在實現LVDS FORMAT CONVERSION的過程中,我一開始沒有注意到自己很多處都用到的組合邏輯來編寫(assign語句),因此在后面查找錯誤的時候花了很多時間:用SignalTapII觀察信號,發現用assign語句實現的信號輸出都不對。還好Ronnie看了下,很有經驗地說將程序中涉及到的assign語句全部用時序邏輯去實現,本來以為修改了會造成數據信號與控制信號不一致,相差一兩個時鍾,后來一修改發現我的擔心是多余的,居然一下子就正確地輸出了。分析了下原因:可能是組合邏輯會產生眾多無法想象到的行刺、競爭冒險、延時等無法控制的干擾。因此得出一個結論就是代碼盡可能地用時序邏輯實現,盡量不用組合邏輯語法實現。
在實現行的動態控制中,我發現只要每次保存好計數器的最后一個值就可以了。在實現格式轉化的過程中涉及行、列、幀等的控制,全部都歸結為計數器的處理,要特別注意行內DE有效周期(用DE的邊沿檢測判斷)和幀內DE無效行數(用幀的邊沿檢測判斷)。
882E/882EA是美國Quantum Data公司推出的最新的視頻測試儀器。其HDMI接口支持最新的HDMI 1。3標准,具有最大36比特/像素(12比特/分量)深色模式,完全符合CEA-861-D格式。882EA裝備分析功能以測試HDMI 1.3的源設備。
804A是QD全接口高清信號源,支持,4路HDMI,VGA,YPbPr等接口,能進行HDCP,CEC,EDID測試,最新804A,能輸出3D圖片,能輸出4K*2K解析度圖片,支持最新中國國標測試圖片。
特點
4 路HDMI 1.4 video/audio output
VGA,CVBS,YPbPr,LR Audio,S-Video
Multichannel Digital Audio Output (HDMI, SPDIF,TOSLink)
Compressed and uncompressed audio (LPCM, Dolby Digital,DTS)
3D Patterns
支持中國國標測試圖
以上是882E/882EA/804A高清信號源的詳細信息,由深圳市三經光電科技有限公司自行提供,如果您對882E/882EA/804A高清信號源的信息有什么疑問,請與該公司進行進一步聯系,獲取882E/882EA/804A高清信號源的更多信息。