基于Altera ASI IP核的ASI發(fā)送卡實(shí)現(xiàn)
1.ASI 接口的應(yīng)用意義
隨著數(shù)字電視技術(shù)的迅速發(fā)展,在電視節(jié)目的制作設(shè)計(jì)方面己經(jīng)有很大一部分實(shí)現(xiàn)了數(shù) 字處理。在節(jié)目的傳輸方面,我們從衛(wèi)星上己可以接收到多套數(shù)字壓縮編碼的節(jié)目。這種傳 輸方式,不但保證了節(jié)目的高清晰質(zhì)量,也大大降低了電視節(jié)目傳輸、發(fā)送、接收的成本。 而大量的收發(fā)設(shè)備,采用的是ASI 的接口標(biāo)準(zhǔn),設(shè)計(jì)實(shí)現(xiàn)基于PC 機(jī)和ASI 接口標(biāo)準(zhǔn)的電視 節(jié)目傳輸流的收發(fā)設(shè)備,在節(jié)目的制作、保存和重播等方面有大量的應(yīng)用。
隨著廣播電視數(shù)字化的開展,有線電視的數(shù)字化進(jìn)程越來越快。數(shù)字化技術(shù)提高了廣播 電視節(jié)目的技術(shù)質(zhì)量、節(jié)目質(zhì)量,提供了廣播電視和綜合數(shù)據(jù)業(yè)務(wù)的多媒體服務(wù)手段,拓寬 了廣播電視業(yè)務(wù)。數(shù)字化以后的電視信號傳輸,采用MPEG-2 視頻編碼標(biāo)準(zhǔn),可以以4~ 5Mbit/s 的帶寬傳送高清晰度的電視節(jié)目,噪聲沒有積累,大大提高了傳輸質(zhì)量,有很廣闊 的應(yīng)用前景。在目前的數(shù)字通信系統(tǒng)中,有兩種MPEG-2 接口標(biāo)準(zhǔn):ASI 異步串行接口和SPI 同步并行接口。其中SPI 接口一共有11 位有用信號,每位信號差分成兩路用來提高傳輸抗 干擾性,在物理鏈接上用DB25 傳輸。由于其處理簡單且擴(kuò)展性強(qiáng),MPEG-2 編解碼器及視頻測試設(shè)備的輸入、輸出一般都采用SPI 接口。但是由于其連線多且復(fù)雜,所以SPI 接口只能 用于短距離傳輸。ASI(異步串行接口)只需要一根電纜就可實(shí)現(xiàn)270Mbit/s 的透明傳輸,所以 應(yīng)用十分普遍。ASI 接口具有高速、可靠、固定波特率和傳輸距離遠(yuǎn)等優(yōu)點(diǎn),而且連接簡單 成本低,可以廣泛應(yīng)用于各種高速點(diǎn)到點(diǎn)的傳輸,尤其是視頻傳輸設(shè)備。
2.ASI 協(xié)議結(jié)構(gòu)
ASI 可以有不同的數(shù)據(jù)接收速率,但是傳輸速率是恒定的,為270Mbit/s。因此ASI 可以發(fā)送和接收不同速率的MPEG-2 數(shù)據(jù)。ASI 采用分層結(jié)構(gòu),分為三層:物理層、數(shù)據(jù)編碼層和傳送規(guī)則層。
第零層是物理層。物理層定義了傳輸介質(zhì)、驅(qū)動(dòng)器和接收器以及傳輸速率。物理接口提 供了LED 驅(qū)動(dòng)的多模光纖和同軸電纜?;舅俾时欢x為270Mbps。在同軸電纜的應(yīng)用中, 以隨機(jī)及與數(shù)據(jù)有關(guān)的抖動(dòng)和占空系數(shù)失真的傳統(tǒng)方式,規(guī)定了允許抖動(dòng)的最大值。
第一層是數(shù)據(jù)編碼層。采用 DC 平衡的8B/10B 傳輸碼。這種碼把每一個(gè) 8bit 數(shù)據(jù)字節(jié) 變換成具有下列特性的l0bit 碼字:游程長度等于或小于4bit; DC 編制最小。這種碼通過無效 傳輸碼點(diǎn)和“運(yùn)行”的不等性來提供差錯(cuò)校驗(yàn)。作為超出對數(shù)據(jù)字節(jié)進(jìn)行編碼需要的額外 碼點(diǎn),規(guī)定了專用字符。特別是逗號這個(gè)字符(在8B/10B 傳輸碼規(guī)則中定義為K28.5 專用字 符),用來在DVB-ASI 傳輸鏈路中建立字節(jié)對齊。在發(fā)送端對字節(jié)進(jìn)行8B/10B 編碼,對出 現(xiàn)的每一個(gè)8bit 字節(jié)產(chǎn)生一個(gè)10bit 的碼字,使這些10bit 碼字通過以固定輸出比特率270 Mbps 工作的并/串轉(zhuǎn)換。如果并/串轉(zhuǎn)換器請求輸入一個(gè)新碼字,但是數(shù)據(jù)源還沒有準(zhǔn)備好 新碼字,就應(yīng)該插入同步字 (或者稱為逗號字符K28.5)。在傳輸數(shù)據(jù)的空余字段插入同步 字符,可以使傳輸碼子具有較強(qiáng)的抗擾,錯(cuò)誤檢測和在同步能力。
第二層是傳送規(guī)則層。ASI 傳輸?shù)牡? 層標(biāo)準(zhǔn)使用MPEG-2 傳輸流包(TS)作為基本的信 息單元。傳輸包可以通過 3 種方式傳輸:一種是以塊狀的連續(xù)字節(jié)傳輸,也就是說,在一個(gè) 單獨(dú)數(shù)據(jù)包的傳輸流中不用插入同步字節(jié);第二種方式是以單獨(dú)的字節(jié)方式傳輸,在這種方 式中要插入同步字節(jié);第三種方式是連續(xù)字節(jié)和同步字節(jié)相結(jié)合。此外,ASI 的第二層協(xié)議 規(guī)定,在每個(gè)傳輸包之前至少要有兩個(gè)同步字 (K28.5 )。盡管數(shù)據(jù)包同步過程不是 ASI 傳 輸協(xié)議定義的內(nèi)容,MPEG-2 傳輸包同步字節(jié) (47H)被包括到第 2 層的包定義中,這樣接收 設(shè)備就可以實(shí)現(xiàn)包同步。ASI 接口的第2 層定義使用MPEG-2 傳輸流的語法,只是增加了在 每個(gè)傳輸包前需要有至少兩個(gè)K28.5 同步字符這個(gè)額外要求。只要最初是同步的,8B/10B 接收裝置一般能夠維持同步,不需要增加同步字符。但是當(dāng)線路干擾等外界因素使同步丟失 時(shí),增加的同步字節(jié)可以使一個(gè)傳輸包重新同步。傳輸包結(jié)構(gòu)應(yīng)該遵循EN/ISO/IEC 13818-1 和ETS 300 429 對傳輸流包的規(guī)定。包長度可以是 188 個(gè)字節(jié)或者204 個(gè)字節(jié)。傳輸包可 以通過兩種方式出現(xiàn)在第 2 層。第一種每個(gè)TS 包中的188 字節(jié)是連續(xù)的,分為分組頭部、 調(diào)整字段和有效負(fù)載三個(gè)部分。其中調(diào)整字段是可選的,并不是所有的傳送流分組中都出現(xiàn) 調(diào)整字段。同步字符插在兩個(gè)包中間,稱為突發(fā)模式。用突發(fā)模式實(shí)現(xiàn)TS 流的傳輸,具有 動(dòng)態(tài)分配的靈活性、可分級性、可擴(kuò)展性、較強(qiáng)的抗千擾性等有點(diǎn);第二種是同步字隨機(jī)均 勻的插在TS 數(shù)據(jù)之間,稱為非突發(fā)模式。
3.設(shè)計(jì)實(shí)現(xiàn)
3.1 ASI 發(fā)送卡硬件設(shè)計(jì)
大部分ASI 編碼的實(shí)現(xiàn),都是采用Cypress 公司的CY7B923 實(shí)現(xiàn)并行數(shù)據(jù)到串行數(shù)據(jù)的 轉(zhuǎn)換。CY7B923 主要實(shí)現(xiàn)碼字的8/10bit 轉(zhuǎn)換、插入同步字K28.5 和并/串變換。ASI 的傳輸 速率恒定為270MHz,而輸入MPEG-2 TS 碼率是不同的,所以要用FIFO 實(shí)現(xiàn)速率匹配,需 要對輸入的SPI 數(shù)據(jù)、FIFO 和CY7B923 之間的通信進(jìn)行邏輯控制。綜合性能、價(jià)格和程序 復(fù)雜度的考慮,本方案采用FPGA,用Verilog 編程來實(shí)現(xiàn)它們之間的邏輯控制;采用Altera 公司的ASI IP 核,代替Cypress 公司的CY7B923 來實(shí)現(xiàn)ASI 數(shù)據(jù)的編碼。ASI IP 核具有使 用方便、成本低等優(yōu)點(diǎn)。
在ASI 的編碼過程中,只需將MPEG-2 編碼的TS 碼流的8 位數(shù)據(jù)和一位TS 碼率傳輸時(shí) 鐘輸入到FPGA 中,本方案是PCI 33M 的時(shí)鐘信號。因?yàn)樵诒痉桨钢?,TS 格式為188 個(gè)字節(jié) 的突發(fā)模式發(fā)送數(shù)據(jù),根據(jù)數(shù)據(jù)有效信號DVALID,F(xiàn)PGA 檢測這個(gè)信號來判斷什么時(shí)間內(nèi)是 有效數(shù)據(jù),來接收TS 碼流數(shù)據(jù),而不用關(guān)心TS 碼流的同步頭。FPGA 將接收到的數(shù)據(jù)以TS 碼率時(shí)鐘寫入FIFO。當(dāng)FIFO 半滿時(shí),F(xiàn)PGA 接收到FIFO 的半滿信號,然后FPGA 給ASI 核發(fā)出FIFO 可讀信號,ASI 核以27Mbps 讀取FIFO 中的數(shù)據(jù);當(dāng)FPGA 計(jì)數(shù)到ASI 核讀取了一定數(shù)量的FIFO 數(shù)據(jù),F(xiàn)PGA 則向ASI IP 核發(fā)送FIFO 不可讀信號,防止FIFO 讀空。MPEG-2 傳 輸碼率的并行最大速度為132Mbps,而讀FIFO 速率為27Mbps,因此FIFO 會有溢出。因此在發(fā)送MPEG-2 傳輸流時(shí),有驅(qū)動(dòng)程序控制一次發(fā)送數(shù)據(jù)的多少??紤]到延時(shí),本方案在FPGA 內(nèi)部燒制了一個(gè)2K 大小的異步FIFO。ASI IP 核在FIFO 中數(shù)據(jù)不可讀時(shí),向ASI 碼流中填 充K28.5 以維持270Mbps 的固定傳輸速率。最后串行數(shù)據(jù)經(jīng)過驅(qū)動(dòng)就可用同軸電纜傳送出去。 本方案中,同步字K28.5 的插入采用傳輸碼流的單個(gè)字節(jié)前后不能都是K28.5 同步字的方式。
ASI 發(fā)送卡的硬件實(shí)現(xiàn)框圖如下:
該系統(tǒng)是基于 ALTERA 公司的FPGA 芯片,Cyclone Ⅱ EP2C8Q208 設(shè)計(jì)的。經(jīng)過編碼的并行數(shù)據(jù)流經(jīng)過PCI 總線送入異步FIFO。異步FIFO 主要實(shí)現(xiàn)數(shù)據(jù)緩存和時(shí)鐘匹配的作用。 系統(tǒng)進(jìn)行DMA 操作,把數(shù)據(jù)送入板卡。FIFO 將這些數(shù)據(jù)緩存,以避免數(shù)據(jù)丟失。又由于時(shí) 鐘有PCI 33M 的時(shí)鐘信號和27M 的ASI 輸入時(shí)鐘信號。這就要求把這兩個(gè)不同頻率的時(shí)鐘同 步。FIFO 在兩個(gè)不同的時(shí)鐘下工作,數(shù)據(jù)的輸入和輸出分別使用不同的時(shí)鐘。這就實(shí)現(xiàn)了 時(shí)鐘的隔離和無縫連接。FIFO 采用32 位輸入、8 位輸出,分別與PCI 的數(shù)據(jù)寬度和ASI IP 核的輸入數(shù)據(jù)寬度相一致。ASI IP 核實(shí)現(xiàn)8 位數(shù)據(jù)到10 位的編碼。其中ASI IP 核的參考 時(shí)鐘為27M,輸出時(shí)鐘是270M。采用外部鎖相環(huán),27MHz 時(shí)鐘頻率有晶振產(chǎn)生,通過鎖相環(huán) 產(chǎn)生270M 的時(shí)鐘,用于ASI 接口的數(shù)據(jù)輸出。PE65508 實(shí)現(xiàn)耦合和阻抗匹配,最終經(jīng)BNC 插頭發(fā)送出去。
3.2 ASI IP 核的生成
ASI 編碼的實(shí)現(xiàn)采用Quartus 6.1 直接生成,進(jìn)行仿真驗(yàn)證。
ASI 接口的生成。IP 核首先需要安裝,可以從Altera 網(wǎng)站上下載。安裝之后,打開 Quartus 6.1 新建工程之后,點(diǎn)擊tools 菜單里面的Megawizard plug-in Maneger,選擇 創(chuàng)建一個(gè)新的宏函數(shù)變量,按步驟一步步生成asi 文件??梢赃x擇器件和生成文件語言,分 別選擇Cyclone Ⅱ和verilog 語言。需要注意的是生成的文件名要與工程的頂層文件名相 一致。選擇Transmitter,這里作為發(fā)送接口。在ASI 中根據(jù)所選器件速度的快慢,可以選 擇是否生成鎖相環(huán)。這里采用外部鎖相環(huán),用于產(chǎn)生270MHz 的輸出頻率。
生成的ASI 接口verilog 部分代碼如下:
module asi ( rst, tx_refclk, tx_data, tx_en, tx_clk270, asi_tx);
input rst,tx_refclk,tx_en,tx_clk270,asi_tx;
input [7:0] tx_data;
asi_megacore_top asi_megacore_top_inst( .rst(rst), .tx_refclk(tx_refclk), .tx_data(tx_data),
.tx_en(tx_en), .tx_clk270(tx_clk270), .asi_tx(asi_tx));
……
endmodule
該接口實(shí)現(xiàn)8 位數(shù)據(jù)到10 位數(shù)據(jù)的編碼。在8 位的MPEG-2 數(shù)據(jù)從輸入端輸入,流入內(nèi) 部FIFO 中。tx_data 8 位并行數(shù)據(jù)輸入接口,實(shí)現(xiàn)數(shù)據(jù)編碼,即把每個(gè)8 位的數(shù)據(jù)變?yōu)?0 位的數(shù)據(jù);然后串行器把10 位并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)。asi_tx 經(jīng)編碼后的串行數(shù)據(jù)輸入 接口。若MPEG-2 的TS 流的傳輸率小于270Mbps 時(shí),則需要插入同步字符以保障輸出端穩(wěn)定 的270Mbps。tx_refclk 為輸入的27M 參考時(shí)鐘,tx_clk270 為270M 的數(shù)據(jù)輸出時(shí)鐘。它們是通過外部鎖相環(huán)得到的。rst 是復(fù)位信號,高電平是有效電平,使整個(gè)設(shè)計(jì)停止工作。tx_en 數(shù)據(jù)輸入使能信號,控制FIFO 中待編碼的數(shù)據(jù)進(jìn)入ASI IP 核實(shí)現(xiàn)數(shù)據(jù)編碼和并串轉(zhuǎn)換。
3.3 ASI 工程及仿真波形
把生成的ASI 核添加的自己的工程中,頂層部分代碼如下:
module FIFO_ASI(clk27,data,t_out);
input clk27;
output data,t_out
wire clk13,clk270;
wire[31:0] data32;
wire[7:0] data8;
……
endmodule
對其進(jìn)行仿真,波形如下:
外部接 27M 的時(shí)鐘,連接到clk27,做為ASI IP 核27M 的輸入?yún)⒖紩r(shí)鐘。t_out 為一個(gè) 時(shí)鐘輸出信號,對27M 分頻,作為指示燈信號,來監(jiān)測程序是否下載到FPAG 中。在指示燈正常閃爍情況下,表明程序已經(jīng)下到芯片中,并且能夠工作。經(jīng)過ASI IP 核編碼的ASI 數(shù) 據(jù)由data 輸入。在本工程中,通過一電腦不斷地發(fā)送TS 流給板卡,經(jīng)過ASI 編碼后通過 ASI 接口輸出。在接收端,通過一個(gè)ASI 接收卡,讀出接收的數(shù)據(jù),可以看出ASI 工作正常。 在發(fā)送TS 流時(shí)采突發(fā)模式,其讀出的數(shù)據(jù)如下:
在調(diào)試階段,PC 機(jī)連續(xù)發(fā)送相同的MPEG-2 編碼的TS 包。在接收到的數(shù)據(jù)中,可以看到連 續(xù)的MPEG-2 編碼的TS 包,且與發(fā)送的數(shù)據(jù)相同。其中TS 包的接收采用一塊ASI 接收卡作 為接收端,通過USB 接口輸入到電腦里,用相應(yīng)的軟件讀取數(shù)據(jù)后顯示。
4.應(yīng)用意義
本文設(shè)計(jì)的基于Altera 公司的ASI IP 核實(shí)現(xiàn)的DVB-ASI 卡,實(shí)現(xiàn)了ASI 數(shù)據(jù)的正確編 碼和發(fā)送。用FPGA 實(shí)現(xiàn)邏輯控制和數(shù)據(jù)緩存,可以方便的實(shí)現(xiàn)系統(tǒng)升級,實(shí)現(xiàn)多個(gè)ASI 數(shù) 據(jù)的發(fā)送。與用Cypress 公司的CY7B923 實(shí)現(xiàn)的ASI 的發(fā)送卡相比,本卡更適合批量生產(chǎn),可以節(jié)約成本,提高了市場竟?fàn)幜?,具有很好的市場前景?/p>
本文作者創(chuàng)新觀點(diǎn)是用Altera 公司的ASI IP 核代替Cypress 公司的CY7B923 專用ASI 發(fā)送芯片,實(shí)現(xiàn)ASI 數(shù)據(jù)的穩(wěn)定發(fā)送。本方案降低了成本,設(shè)計(jì)靈活,并且方便升級到多路ASI 數(shù)據(jù)發(fā)送。