一. 引言
目前監視器有CRT、液晶等各種顯示類型,這些產品質量和技術規格有非常大的差異。目前國內外還沒有針對廣播級數字圖像監視器圖像質量的測試指標和測試方法標準,只有各個廠家給出的各個設備的出廠指標,應用單位無法得到真實的高清指標,也無法對其進行測量鑒定和驗收。為滿足測試的靈活性需要,需要有簡便的信號源發生器,以滿足各單位在數字電視節目制作、數字電視設備選型、系統設計、驗收以及節目制作的需要。
SD卡(Secure Digital Memory Card)中文翻譯為安全數碼卡,是一種基于半導體快閃記憶器的新一代記憶設備,目前,SD卡的存儲容量已高達16GB,它被廣泛地于便攜式裝置上使用,例如數碼相機、個人數碼助理(PDA)和多媒體播放器等。
本文采用YUV4:2:2 8bit格式信號源,以SD卡作為存儲設備,基于Altera公司的NiosⅡ軟核進行SD卡的數據讀取,將讀取的數據存入SRAM,由FPGA硬件開發進行SDI信號的輸出。
二. 數字監視器的測試信號及測量方法研究
根據SJ/T 11348-2006數字平板顯示器件測量方法和GY/T 11-092 “廣播用圖像監視器技術要求”,測量數字標準清晰度電視所需要的信號有:彩條信號、全白場、全黑場、極限八灰度等級信號、白窗口、黑窗口、黑白窗口、棋盤格信號的參數。
根據歐廣聯的技術標準Tech. 3213-E E.B.U. STANDARD FOR CHROMATICITY TOLERANCES FOR STUDIO MONITORS和Tech. 3263-E-second edition SPECIFICATION OF GRADE-1 COLOR PICTURE MONITORS以及SJ/T 11348-2006數字電視平板顯示器測量方法主要有:亮度、對比度、亮度均勻性、白色色度誤差、基色色度坐標、白色色度不均勻性、可視角、殘留影像和響應時間的測試方法。
三. 基于SOPC軟核的SD卡的讀取
1. 嵌入式FAT文件系統
Altera公司推出的NIOS II嵌入式處理器系統,是目前比較流行的SOPC。它通常由NIOS II處理器、Avalon總線結構和各種外圍設備(包括SDRAM控制器、DMA、CF卡控制器以及用戶自己設計的外圍設備等)的IP核三部分組成,Altera的SOPC builder系統開發工具可以自動生成這些組件以及聯結它們的總線。
為了便于控制器對SD卡進行操作,必須用文件系統來對SD卡進行管理,由于SD卡上的視頻生成文件是由裝有Windows操作系統的PC寫入,其文件系統為FAT12、FAT16或FAT32。所以在本控制器中需要實現兼容FAT12、FAT16 和FAT32 的文件系統。
在本控制器的設計中,需要對SD卡設計嵌入式文件系統,為視頻文件的讀取和管理提供了有效的手段。嵌入式文件系統以中間件的形式來設計,為應用程序提供初始化、打開、讀取、關閉、刪除等API函數接口。嵌入式文件系統劃分為三層結構:硬件驅動層、系統功能層及用戶接口層。其中硬件驅動層實現對SD卡底層操作,抽象底層硬件并為上層實現提供硬件接口無關函數;
系統功能層實現文件系統管理算法,提供文件系統功能函數;用戶接口層封裝功能層函數并為用戶程序提供文件應用編程操作接口API函數,屏蔽文件系統實現細節。本嵌入式文件系統設計層次圖如圖1所示。
圖1 嵌入式文件系統中間件架構
此文件系統包括硬件驅動層、系統功能層和用戶接口層。硬件接口層包含了對應的硬件設備驅動,支持SD模式下的SD卡設備。系統功能層主要處理FAT文件系統中FAT表、目錄、文件管理,是文件系統的核心。本項目設計的嵌入式文件系統兼容FAT12/16/32三種文件系統,能夠自動識別、區分和處理。
用戶接口層提供了應用程序所需的API函數,包括初始化、讀取、刪除等函數。根據本系統實際需要,用戶接口層的API 函數重點為文件的打開、讀取操作,下面以讀文件為例介紹其函數流程,其流程圖如圖2所示。

圖2 文件系統讀文件流程圖
2. SOPC硬件開發
首先在Quartus II中建立自己的工程,然后啟動SOPC Builder添加模塊集組件庫或用戶自定義模塊,添加各模塊的時候,即可對NiosII CPU和各外設模塊的特性,例如存儲器的大小,SDRAM的時序參數等,以及各IP模塊在系統中的映射地址分配等進行設定。設定復位地址和異常地址后,啟動SOPC Builder中的Generate,使之生成用于綜合和仿真的文件。然后使用Quartus II軟件中的Assignment->pins對各模塊端口引腳鎖定,對生成的NiosII系統進行仿真、綜合、適配和下載。 該系統所涉及的Nios II硬件系統包括如下模塊:
Nios II/s處理器核;外部SRAM;三態橋;4位輸入\輸出PIO(SD卡data接口);8位輸出PIO(SD卡的CMD和CLK);PLL鎖相環;JTAG UART;
3. SOPC軟件開發
啟動Nios II IDE,使用它提供的New Project向導,建立C/C++應用工程和系統庫工程。在這個步驟中需要指定新工程名、目標硬件及工程模板。工程名由用戶自己命名,目標硬件就是SOPC Builder生成的ptf文件,在本設計中為monitor_test.ptf,Nios II IDE需要從這個文件中獲取該系統的相關信息。在向導中還可以選擇工程模板,它可以幫助用戶盡可能快速地推出可運行系統,每個模板包括一系列軟件文件和工程設置。
在新建應用工程的過程中,NiosII IDE會為工程創建系統庫system library,系統庫是驅動程序集,提供對目標硬件的訪問。
在程序窗口,用戶根據自己的需求對模板中的源程序進行編輯和修改,完成后,先對C/C++應用工程系統屬性進行設置,以使編譯器編譯出更高效、占有空間更小的代碼。具體操作為:將應用工程和系統庫工程中的Optimization Level均選擇為Optimize most(-O3)。
然后,在屬性對話框中打開System Library,打開屬性頁面進行設置。建立工程時,systemlibrary頁面為根據自己的系統建立的默認設置,用戶可根據自己的需求修改相關的設置。
在本設計中,在Use auto-generated linker script選項中選擇SRAM,一般情況下不設置成flash,因為flash運行速度較RAM要慢得多。標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)可根據用戶需要自行設置,在本系統中有jtag_uart可選擇,而NiosII IDE的console是jtat_uart的終端,用戶能很方便的觀察程序運行的結果。使用標準輸入、標準輸出、標準錯誤函數是最簡單的控制I/O設備的方法。HAL系統庫在后臺管理sdin、stdout和stderr函數,它可以使用戶通過相關通道來發送和接收字符。例如,系統庫會控制printf()的輸出給標準輸出,控制perror()的輸出給標準錯誤。假設stdout設置成uart,則下面的簡單C/C++程序即能將字符hello world!發送給uart,通過串口終端或串口調試助手可以看到結果。
到此,應用工程系統屬性設置完畢,接下來對工程進行編譯連接,生成elf文件。編譯沒有錯誤,在將程序下載到目標板之前,先在NiosII IDE里進行調試,驗證程序功能的正確性。調試前將USB-Blaster II下載線連接到硬件平臺的JTAG口,接上電源,同時將硬件配制文件(.sof文件)下載到目標板上的FPGA中。
選擇Run->Debug As->Nios II Hardware,即可進入調試界面進行硬件調試。調試完成,就可以在目標硬件上運行程序了。
4. SD卡文件讀取的實現
在向SD卡發送CMD0之前需要發送74個時鐘,因為上電初期,電壓上升過程根據SD卡組織的計算約合64個CLK周期才可以到達SD卡的正常工作電壓;后10個CLK是為了使主機與SD卡同步。在發送CMD0時將CS置0,然后讀取SD卡的響應,如果為01,則繼續發送命令CMD1,如果不是01,則重新進行74個時鐘延遲,重新發送CMD0。如果CMD1的響應為00,則說明初始化成功。其流程圖如圖3所示。

圖3 SD卡初始化流程圖
SD卡支持單塊(命令字為CMD17) 和多塊(命令字為CMD18) 讀操作。多塊讀操作指的是從制定的位置開始讀,直到SD卡接收到一個停止命令(命令字為CMD12) 才停止讀操作。單塊的讀操作數據塊的長度只能是512字節。
本設計采用的流程圖如圖4所示,操作時,可首先向SD卡發送讀數據塊的命令字CMD17, 在接收到SD卡的響應信號(0X00) 后,再根據默認起始地址(0xFE), 然后讀取512字節的數據, 并后跟兩字節的CRC校驗,當發送CMD12時終止讀操作。

圖4 SD卡讀操作流程圖
四. 基于FPGA的SDI接口的研究與開發
SDI接口是一種基于標準清晰度視頻格式的串行數字接口,傳送4:2:2串行數字分量信號,傳輸速率高達270Mbps。SDI接口硬件電路由電源電路、均衡器clc014、串并轉換芯片CLC011、驅動器clc007、并串轉換芯片cy7b9234、Cyclone III EP3C25Q240等芯片組成。
本文在FPGA平臺上完成如圖5所示功能,由SRAM讀出10bit并行數據進入FIFO,FIFO的讀時鐘,讀使能、寫時鐘、寫使能可以分別控制;FIFO讀出的10bit并行數據進入編碼器,進行擾碼和生成NRZI碼,輸出的10bit并行數據進入SDI模塊的并串轉換,從而完成SDI的輸出。

圖5 本課題原理圖
YUV4:2:2格式中每個像素16位,FOURCC(Four Character Code)碼為UYVY,其中每個像素都是編碼為四個連續字節的兩個像素。這樣會使得色度水平下采樣乘以系數2。此格式,色度字節和亮度字節是翻轉的,如圖6。

圖6 UYVY內存布局
本文按照YUV 4:2:2的格式的文件存儲,計算得出每行的抽樣點為1728(864*2)個,一共[page]625行。在程序開始先設置一個行、列的循環累加的程序,隨著時鐘上升沿的到來,列數(cnt_line)就會自動加1,等加到1728的時候cnt_line回到1,而行數(cnt_row)會加1,如此一來便可以方便的對每一幀圖像每行每列的數據進行發送。
在行消隱期間,留出了8個數據字的位置,用來傳送定時基準信號。對于625/50掃描標準,EAV的位置是字1440-1443,SAV的位置是1724-1727。每個定時基準信號由4個字組成,這4個字的數列可用16進制計數符號表示為:3FF 000 000 XYZ。前三個字3FF、000和000是固定前綴,作為定時標志符號,只為SAV和EAV同步信息的開始做出標志。XYZ代表一個可變的字,它包括確定的信息:場標志符號;垂直消隱的狀態;行消隱的狀態。圖7描繪出625/50掃描標準的每楨定時基準信號的位置。

圖7 625/50掃描標準的定時基準信號位置
XYZ為10bit的字,其中比特0和比特1定為二進制數0,以便與8比特量化接口兼容,比特9是1,比特6、7、8是可變二進制數,分別用H、V、F表示。F是場標志符,F=0表示在第一場期間;F=1表示在第二場期間。V是垂直消隱標識符,V=0表示有效場期間;V=1表示場消隱期間。H是行消隱標識符,H=0表示有效行開始出(SAV);H=1表示有效行結束處(EAV)。
字XYZ中的比特2、3、4、5的值也是可變的,他們取決于比特F、V、和H的值,可對F、V、H進行2比特誤差檢測以及1比特誤差校正,表1表明了P0、P1、P2、P3與F、V、H間的關系。
因此,本設計在第1440和第1724列發送3AA(1111111111),第1441、1442、1725、1726列發送000(0000000000),在第1727列按照圖6所示發送其相應的SAV,在第1443行按照圖7所示發送相應的EAV。從第0列到第1439列按照Cb、Y、Cr順序發送有效數據。在場消隱和行消隱期間,沒有用于傳送輔助數據的對應Y樣點的字必須賦予16進制040,對應Cb和Cr樣點的字必須賦予16進制數200。
本文編碼部分由FPGA來實現,在編碼模塊里設置了2個模塊,倍頻模塊和FIFO模塊。倍頻模塊完成對27MHz輸入信號進行10倍頻處理,然后按照擾碼編碼原理進行編碼,編碼是按并行數據的每一比特位進行的,在編碼模塊的輸出端是進行擾碼后的10bit并行數據。

五. 小 結
本文完成了信號源的設計和測試方法的研究,并完成了信號發生器的實現。最終實現了在計算機中生成的監視器測試信號輸入到本硬件板卡上,再通過SDI接口輸出,顯示到數字監視器上。根據GY/T 11-092“廣播用圖像監視器技術要求”中關于監視器性能要求,由光電轉換裝置以及示波器完成相應參數的測試。
本文中針對各個測試指標建立以YUV4:2:2 10bit的數字監視器測試信號源,然后用PC將SD卡格式化為fat格式或fat32格式,再將信號源存入SD卡中;本課題設計的嵌入式文件系統兼容FAT12/16/32 三種文件系統,能夠自動識別、區分和處理。
本文雖然實現了對SD卡的讀取以及由SDI接口輸出到監視器上,但實時性上尚未達到滿足視頻實時播出的效果,比如在測量亮拖尾和暗拖尾時需要播放視頻測試文件等。本課題將無法完成相應的測試工作,隨著SD卡本身讀取速度的提高以及我們在程序上對SRAM的讀取控制的精確性的提高,是可以實現對SD卡視頻文件讀取的實時播出的。B&P