1 SPI信號結構
并行傳輸系統(tǒng)SPI包括一位時鐘信號、8位數(shù)據(jù)信號、一位幀同步信號PSYNC和一位數(shù)據(jù)有效信號DVALID。幀同步信號對應TS包的同步字節(jié)047H,DVALID信號用來區(qū)分TS包的長度為188個字節(jié)或204個字節(jié)。當TS包長為188字節(jié)時,DVALID信號一直為高,同時所有信號都與時鐘信號保持同步。SPI數(shù)據(jù)格式如圖所示。
2 ASI接口
ASI傳輸流可以有不同數(shù)據(jù)速率,但傳輸速率恒定,為270Mbps,因此ASI可以發(fā)送和接收不同速率的MPEG-2數(shù)據(jù)。ASI傳輸系統(tǒng)為分層結構。最高層、第2層使用MPEG-2標準ISO/IEC 13818-(Systems),第0層和第1層是基于ISO/IEO CD 14165-1的FC纖維信道。FC支持多種物理傳輸媒介,本方案選用同軸電纜傳輸,圖2是基于同軸電纜的ASI傳輸系統(tǒng)框圖。
圖2 基于同軸電纜的ASI傳輸系統(tǒng)框圖
首先將包同步的MPEG-2傳送包的8-bit碼字轉(zhuǎn)換成10-bit碼字;接著在并/串轉(zhuǎn)換時,當要求輸入一個新字、而數(shù)據(jù)源還沒有準備好時,應插入一個K28.5的同步字,以達到ASI的固定270Mbps傳輸速率。所形成的串行比特流將通過緩沖/驅(qū)動電路和耦合網(wǎng)絡,送到同軸電纜連接器上。插入同步碼字可以有三種方法:傳輸碼流的單個字節(jié)前后不能都是同步字;傳輸碼流的單個字節(jié)前后必須都是同步字;或者是兩者的組合。
到達同軸電纜的接收數(shù)據(jù),首先要經(jīng)過連接器和耦合網(wǎng)絡耦合到恢復時鐘和數(shù)據(jù)的電路上,然后進行串/并變換;為了恢復字節(jié)同步,ASI解碼器必須先搜尋到K28.5同步字,一旦搜索到該同步字,即為隨后接收的數(shù)據(jù)標定了邊界,從而建立了解碼器輸出字節(jié)的正確字節(jié)排列;最后進行10/8-bit變換,恢復出包同步的MPEG-2 TS碼流數(shù)據(jù)。但是K28.5同步字不是有效數(shù)據(jù),因此解碼時必須刪除。
3 ASI接口實現(xiàn)方案
在本方案中,MPEG-2 TS碼流由單片MPEG-2編碼器MB86390提供,它輸出符合SPI標準的并行11位信號,TS包長度為188個字節(jié)。在SPI/ASI轉(zhuǎn)換方案中,主要選用CYPRESS公司cyb923/cyb933芯片、異步FIFO和邏輯編程器CPLD實現(xiàn)。
cyb923主要實現(xiàn)碼字的8/10bit轉(zhuǎn)換、插入同步字K28.5和并/串變換。ASI的傳輸速率恒定為270MHz,而輸入MPEG-2 TS碼率是不同的,所以要用FIFO實現(xiàn)速率匹配,需要對輸入的SPI數(shù)據(jù)、FIFO和cyb923之間的通信進行邏輯控制。綜合性能、價格和程序復雜度的考慮,本方案采用xilinx公司的CPLD邏輯編程器XC95108;用VHDL編程實現(xiàn)對它們的邏輯控制。ASI的解碼也是相似的過程,cyb933主要實現(xiàn)10/8bit轉(zhuǎn)換、去除同步字K28.5和串并變換。
3.1 ASI編碼
在ASI的編碼過程中,只需將MPEG-2 TS的八位數(shù)據(jù)和一位TS碼率傳輸時鐘輸入到CPLD。因為在本方案中,TS格式為188個字節(jié),因此數(shù)據(jù)有效信號DVALID一直為高,CPLD忽略這個信號,只管接收TS碼流數(shù)據(jù),而不用關心TS碼流的同步頭。PSYNC幀同步信號也一樣忽略。CPLD將接收到的數(shù)據(jù)以TS碼率時鐘寫入FIFO。當FIFO半滿時,CPLD接收到FIFO的半滿信號,然后CPLD給cyb923發(fā)FIFO可讀信號,cyb923以27Mbps讀取FIFO中的數(shù)據(jù);當CPLD計數(shù)到cyb923讀取了一定數(shù)量的FIFO數(shù)據(jù),CPLD則向cyb923發(fā)送FIFO不可讀信號,防止FIFO讀空。MPEG-2傳輸碼率的并行最大速度為27/8=3.375Mbps,而讀FIFO速率為27Mbps,因此FIFO不會有溢出??紤]到延時,本方案選用較小容量的FIFO7202。cyb923在FIFO不可讀時,向ASI碼流中填充K28.5以維持270Mbps的固定傳輸速率。最后串行數(shù)據(jù)經(jīng)過驅(qū)動就可用同軸電纜傳送出去。本方案中,同步字K28.5的插入采用傳輸碼流的單個字節(jié)前后不能都是K28.5同步字的方式。這種方案相對其它兩種方案來說,判斷和處理都相對簡單。
3.2 ASI解碼
在ASI的接收端,輸入的ASI碼流經(jīng)過均衡后,輸入到cyb933芯片。它由內(nèi)部的時鐘鎖相環(huán)首先鎖定ASI碼流時鐘,檢測同步字K28.5;找到后即確定了ASI比特流順序,然后進行串/并轉(zhuǎn)換。
由此可知,檢測到K28.5,即字節(jié)對齊是ASI解碼的重要前提,由此cyb933定義了一套檢測字節(jié)同步的方法??紤]到傳輸誤碼等原因可能造成假K28.5,因此cyb933采用雙字節(jié)確認方法。即連續(xù)兩個字節(jié)都是K28.5,才確認字節(jié)同步了,接著進入正常的單字節(jié)解碼狀態(tài)。在解碼狀態(tài),如果在64個解碼字節(jié)中,CPLD計數(shù)到有16個字節(jié)是錯誤的,則CPLD必須向cyb933發(fā)送信息,要求cyb933重新進行字節(jié)同步。
字節(jié)同步后,因為K28.5是cyb923插入的同步字節(jié),不能作為有效數(shù)據(jù)輸出,cyb933自動略除這些同步字節(jié)。當cyb933檢測到有效數(shù)據(jù)時,cyb933將輸出一位當前數(shù)據(jù)有效的指示,如果把這個信號當作FIFO的寫有效,則FIFO中的數(shù)據(jù)一定都是有效數(shù)據(jù)了。當FIFO半滿時,CPLD接收FIFO的半滿信號后,CPLD讀取FIFO中的數(shù)據(jù),并根據(jù)讀出的字節(jié)是否是047H來確定TS包的同步字節(jié);如果找到TS包同步字,將恢復對應的幀同步信號,此時CPLD計數(shù)188恢復出完整的TS包,接下來的字節(jié)如果不是047H,說明輸入數(shù)據(jù)有誤,CPLD將丟棄這些數(shù)據(jù)直到找到047H同步字,在此期間CPLD輸出TS空包。重新包同步后,CPLD才又開始計數(shù)輸出正確的188字節(jié)的MPEG-2 TS包,從而恢復出SPI正確的11位信號。同樣,當FIFO數(shù)據(jù)不可讀時,CPLD也輸出TS空包,以維持輸出的MPEG-2碼率恒定。
在SPI轉(zhuǎn)ASI的設計中,直接對SPI數(shù)據(jù)進行ASI編碼,而不考慮誤碼問題。主要考慮SPI數(shù)據(jù)直接從MB390輸出,沒有經(jīng)過遠距離傳輸,因而降低了ASI編碼邏輯控制的復雜度。在ASI解碼過程中,ASI數(shù)據(jù)經(jīng)過遠距離傳輸,要考慮誤碼的因素,所以增加了字節(jié)和包的重同步設計,以增加抗干擾能力。本方案在實際應用中很好地實現(xiàn)了SPI/ASI的相互轉(zhuǎn)換。