林 嘉 陳素瓊 蘇凱雄
?
P基于I2S接口的FPGA的音頻數(shù)據(jù)傳輸
林 嘉 陳素瓊 蘇凱雄
(福州大學(xué)物理與信息工程學(xué)院,福州 350108)
4K原始數(shù)據(jù)轉(zhuǎn)換成4路3G-SDI,需對音、視頻進(jìn)行分別處理。本文設(shè)計了一種I2S音頻數(shù)據(jù)處理電路,以I2S協(xié)議為基礎(chǔ),使用HV2芯片和FPGA開發(fā)板,實現(xiàn)I2S音頻數(shù)據(jù)的傳輸,解決跨時鐘域傳輸數(shù)據(jù)的問題。利用CTS生成器改善電源抑制,降低輸出抖動和噪聲性能。仿真測試表明音頻數(shù)據(jù)能夠被完整的傳輸。
I2S協(xié)議;FPGA;HV2芯片;跨時鐘域;CTS生成器
4K電視[1]畫面質(zhì)量明顯提升,已經(jīng)成為當(dāng)今電視的主流發(fā)展方向。電影電視工程師學(xué)會(SMPTE)定義了4K視頻傳輸?shù)腟DI接口。
原始的4K音頻數(shù)據(jù)無法直接被SDI接口[2]利用。本文基于SMPTE協(xié)議[3],利用FGPA開發(fā)板[4]進(jìn)行數(shù)據(jù)轉(zhuǎn)換和處理,再插入視頻數(shù)據(jù)流中。I2S協(xié)議[5]能夠?qū)?shù)據(jù)信號和時鐘信號分開傳輸,避免了時差誘發(fā)的失真,故采用I2S協(xié)議制作音頻接口。
I2S(inter-IC sound bus)是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸制定的一種總線標(biāo)準(zhǔn),既規(guī)定了硬件接口規(guī)范,也規(guī)定了數(shù)字音頻數(shù)據(jù)的格式。
如圖1所示,對應(yīng)數(shù)字音頻的每一位數(shù)據(jù),BCLK(串行時鐘)都有1個脈沖。LRCLK(幀時鐘)是應(yīng)用于變更左右聲道數(shù)據(jù)的時鐘,其頻率等于采樣頻率。LRCLK必須與BCLK保持同步,兩者的關(guān)系為
式中,是采樣位數(shù)。在I2S接口中傳輸?shù)挠行?shù)據(jù)稱為SDATA(串行數(shù)據(jù)),通常用二進(jìn)制補(bǔ)碼表示。
利用HV2芯片接收并處理音頻數(shù)據(jù)。HV2芯片是由socionext研發(fā)的影像接口轉(zhuǎn)換器,主要用于2~4K視頻數(shù)據(jù)的轉(zhuǎn)換,并能處理與傳輸I2S音頻數(shù)據(jù)[6]。HV2處理后的I2S音頻數(shù)據(jù)對應(yīng)于不同的聲道進(jìn)行音頻數(shù)據(jù)傳輸,再由FPGA的I2S模塊接收。
本文將HV2的采樣時鐘設(shè)定為48kHz,同時規(guī)定LRCLK的高電平表示傳輸?shù)氖亲舐暤?,低電平表示傳輸右聲道,并設(shè)定傳輸數(shù)據(jù)的最大數(shù)據(jù)位寬為32bit。實際測試中只接收到24bit數(shù)據(jù)。根據(jù)I2S協(xié)議,在數(shù)據(jù)傳輸過程中,若LRCLK的單次脈沖寬度不能將需要傳輸?shù)娜縝it數(shù)據(jù)完整傳輸,則截斷低位的bit數(shù)據(jù),而在完整的bit數(shù)據(jù)傳輸完成之后,LRCLK的周期還沒有結(jié)束,則系統(tǒng)會在低位處自動補(bǔ)齊。故在配置輸出時設(shè)置位寬32bit,可避免將尾部的bit數(shù)據(jù)截斷,從而傳輸完整的bit數(shù)據(jù)。SDATA數(shù)據(jù)線上的有效數(shù)據(jù)也是24bit。時鐘頻率是由HV2中的晶振產(chǎn)生并控制,LRCLK為48kHz,而BCLK為3.072MHz。如圖2所示,4路串行數(shù)據(jù)線I2S_SD0、I2S_SD1、I2S_SD2和I2S_SD3分別對應(yīng)著不同方位的聲道,從而傳輸7.1立體聲音頻。
圖2 I2S電路設(shè)計圖
如圖3所示,傳輸sd_i0的數(shù)據(jù),經(jīng)過i_ws左右聲道選擇,并經(jīng)過數(shù)據(jù)拼接和補(bǔ)碼轉(zhuǎn)換最終得到o_Left_LFE_data和o_Right_FC_data。ws_reg_i和left_code_flag是標(biāo)志位,根據(jù)其狀態(tài)判斷當(dāng)前是否需要進(jìn)行數(shù)據(jù)拼接和補(bǔ)碼轉(zhuǎn)換。
圖3 I2S數(shù)據(jù)的傳輸
本文所用的FPGA開發(fā)板是代號為XC7A50T- 3FGG484的芯片(以下簡稱“X3芯片”),能夠?qū)崿F(xiàn)音視頻的接收、發(fā)送等功能內(nèi)嵌I2S模塊。X3芯片的核心邏輯功能電壓是2.5V,I/O端口的電壓是3.3V,滿足HV2數(shù)字端口的所規(guī)定電平的要求。如圖4所示,圖中既標(biāo)識了I2S接口的引腳信息,也標(biāo)記了FIFO的引腳信息。FIFO_D0至FIFO_D15、FIFO_FULL和FIFO_EMPTY用于測試異步FIFO跨時鐘域的空滿狀態(tài),根據(jù)不同狀態(tài)將進(jìn)行不同的 反饋。
圖4 FPGA的硬件連接圖
設(shè)計中FPGA的音頻接收模塊,其內(nèi)部時鐘是27MHz,而HV2的內(nèi)部時鐘為3.072MHz,導(dǎo)致接收和發(fā)送處于不同的時鐘域,使得這些域中的動作間沒有關(guān)聯(lián)性,無法完成同步,系統(tǒng)循環(huán)進(jìn)入亞穩(wěn)態(tài)[7]。為減少亞穩(wěn)態(tài)的影響,應(yīng)對跨時鐘域問題的進(jìn)行處理。異步FIFO[8]能實現(xiàn)大量數(shù)據(jù)的跨時鐘域傳輸,并保證較高的數(shù)據(jù)傳輸速度。
如圖5所示,本設(shè)計中采用雙端口存儲器RAM[9]來緩存系統(tǒng)數(shù)據(jù),并設(shè)定其數(shù)據(jù)寬度為32bit,深度為1024bit。讀、寫控制端分別控制wrdata(寫入)信號與rddata(讀出)信號,利用wrfull(寫滿)和rdempty(讀空)標(biāo)志轉(zhuǎn)換這兩個不同時鐘域的運行狀態(tài)。在異步FIFO的設(shè)計中,關(guān)鍵環(huán)節(jié)之一是檢測并判斷緩存器是否產(chǎn)生wrfull或者rdempty信號。不同的時鐘域提供不同的時鐘信號,當(dāng)寫控制器接收到寫請求信號時,相應(yīng)的wrcontrol(寫控制)信號隨之產(chǎn)生,此時指針也指向?qū)懭霐?shù)據(jù)的地址。在數(shù)據(jù)寫入的過程中,不斷檢測FIFO緩存器是否已經(jīng)寫滿。若未寫滿,則繼續(xù)傳輸數(shù)據(jù);否則產(chǎn)生wrfull信號反饋給FIFO緩存器。當(dāng)讀控制器接收到讀請求信號時,相應(yīng)的rdcontrol(讀控制)信號隨之產(chǎn)生,此時指針指向?qū)⒆x出數(shù)據(jù)的地址。在數(shù)據(jù)不斷讀出的過程中,檢測FIFO緩存器是否已經(jīng)讀空。若未讀空,則繼續(xù)讀出數(shù)據(jù);否則產(chǎn)生rdempty信號反饋給FIFO緩存器。
圖5 異步FIFO結(jié)構(gòu)框圖
格雷碼具有循環(huán)特性和單步特性,當(dāng)用其表示一個連續(xù)變化的數(shù)值時,僅有一個位會翻轉(zhuǎn),因此大幅度的降低位翻轉(zhuǎn)的頻率,從而保證傳輸?shù)姆€(wěn)定性,減少傳輸誤碼率,故在實際操作中指針地址使用格雷碼表示。正是利用了這一特點,使得能減少亞穩(wěn)態(tài)的產(chǎn)生概率[10]。
為說明如何得到寫滿和讀空信號,以位寬為8bit,深度為16bit為例,如圖6所示。此處要設(shè)置addr(地址信號)為5bit,當(dāng)讀地址指針的速度高于寫地址指針時,則兩個指針會在某一時刻指向同一個值,意味著已經(jīng)讀空數(shù)據(jù),將產(chǎn)生rdempty信號,此時w_addr=r_addr。而當(dāng)寫地址指針循環(huán)一次并追上讀地址指針時,此時w_addr[4]與r_addr[4]相反,w_addr[3:0]=r_addr[3:0],表示已寫滿數(shù)據(jù),產(chǎn)生wrfull信號。wrfull信號有效并反饋給系統(tǒng)時,系統(tǒng)將停止寫入數(shù)據(jù);rdempty信號有效并反饋給系統(tǒng)時,系統(tǒng)將停止讀取FIFO的數(shù)據(jù),如此就能夠保證數(shù)據(jù)的正確穩(wěn)定的傳輸。
圖6 讀空寫滿標(biāo)志信號的產(chǎn)生
在傳輸音頻數(shù)據(jù)時,為了能改善電源抑制,降低輸出抖動和噪聲性能,加入了一個CTS(cycle time stamp)生成器。在LSI(大規(guī)模集成電路)上有發(fā)射器TX Pure CTS和接收器RX Pure CTS。通過調(diào)節(jié)TX ACR(audio clock regeneration)分組和RX ACR分組的CTS的變化來減少音頻時鐘抖動。
如圖7所示。原始的CTS經(jīng)過發(fā)生器產(chǎn)生新的CTS,并封包成ACRPacket。CTS與NormalCTS有明顯區(qū)別,CTS的變化周期變長,減少音頻時鐘抖動。ACR數(shù)據(jù)包是音頻時鐘再生數(shù)據(jù)包,這是控制FIFO傳輸之后的時鐘域的標(biāo)準(zhǔn)時鐘。而輸入的Fs(參考信號)用于調(diào)節(jié)鎖相環(huán)內(nèi)部振蕩信號的頻率和相位,并將信號傳入FIFO中,使音頻數(shù)據(jù)封包成為ASP(audio sample packet)。封包輸出的ASP將與HBASP(high bitrate audio stream packet)共同組成完整的音頻數(shù)據(jù)包[11]。
圖7 TX Pure CTS發(fā)生器的框圖和信號圖
音頻模塊的仿真是調(diào)用了vivado的庫并在modelsim中實現(xiàn)的。仿真過程中,i_sck的周期為20000ps,i_sd的周期為34000ps。而從圖8中可知,對應(yīng)每個i_sck的上升沿所采樣的i_sd數(shù)據(jù)都能準(zhǔn)確的獲取,所得到的數(shù)據(jù)對應(yīng)于sd_i數(shù)據(jù)。說明I2S接口可以準(zhǔn)確的接到收HV2傳來的音頻數(shù)據(jù)。當(dāng)ws_reg_i為低電平時,left_data_reg_i從10101001010110101001010010101101到010100101 01101010010100101011010再到1010010101101010 0101001010110101,每一次數(shù)據(jù)采樣之后,二進(jìn)制編碼均舍棄最高位bit,在最末位拼接所采樣的bit,可知數(shù)據(jù)能夠正確拼接。當(dāng)left_code_flag為高電平時,o_Left_LFE_data為11011010100101011010110 101001011,與10100101011010100101001010110101對比,除首位與末尾,其余均是取相反數(shù),即說明能正確得到補(bǔ)碼。
用發(fā)送和接收文本文件的方法驗證數(shù)據(jù)是否發(fā)送正確。如圖9所示,o_FR_data傳輸32bit左聲道數(shù)據(jù),而o_FL_data傳輸32bit右聲道數(shù)據(jù),兩者均是攜帶24bit有效數(shù)據(jù)并在其后拼接8bit無效數(shù)據(jù)。data則是左右聲道串行之后形成64bit數(shù)據(jù)用于傳輸。而o_sd0_Left_Right是左右聲道各截斷了末尾的8個位數(shù)之后的拼接數(shù)據(jù),輸出o_sd0_Left_Right,便能得到完整的有效數(shù)據(jù)。
圖8 I2S接口接收數(shù)據(jù)仿真圖
圖9 FPGA中發(fā)送數(shù)據(jù)的仿真圖
本文為了解決I2S音頻數(shù)據(jù)的傳輸、跨時鐘域問題,同時改善電源抑制、降低輸出抖動和噪聲性能。選擇HV2芯片、X3芯片和CTS生成器,以支撐本文所涉及的硬件設(shè)計部分。對如何利用I2S接口在兩個芯片間進(jìn)行音頻數(shù)據(jù)的傳輸以及如何解決跨時鐘域的數(shù)據(jù)傳輸給出了基本的方案和流程。仿真驗證了數(shù)據(jù)能正確穩(wěn)定地傳輸。用于本次實驗的設(shè)備也將投入市場,實用價值和參考價值都將得以體現(xiàn)。
[1] 張翔. 4k電視技術(shù)應(yīng)用及發(fā)展研究[J]. 信息通信, 2016(7): 302-304.
[2] 張悅. 高清SDI顯示單元的設(shè)計與實現(xiàn)[D]. 成都: 電子科技大學(xué), 2017.
[3] 賈宏君, 李曉宇. 2016年SMPTE電視技術(shù)標(biāo)準(zhǔn)化跟蹤研究[J]. 廣播與電視技術(shù), 2017, 44(3): 155-160.
[4] 張圣超, 佘洪波. 基于FPGA的增量式編碼器接口電路的設(shè)計[J]. 電氣技術(shù), 2014, 15(1): 38-41.
[5] 趙海亮, 李琦. 一種I2S音頻數(shù)據(jù)處理電路的FPGA設(shè)計[J]. 桂林電子科技大學(xué)學(xué)報, 2016, 36(6): 461- 465.
[6] SMPTE. Image Format and Ancillary Data Mapping for the Quad Link 3Gb/s Serial Interface: ST 425-5: 2015[S].
[7] 王利祥. FPGA設(shè)計中跨時鐘域的問題與方法[J]. 電子技術(shù)與軟件工程, 2017(24): 97.
[8] Ball, Stuart. Embedded Microprocessor Systems: Real World Design[M]. Butterworth-Heinemann, 1996.
[9] 李盛杰, 張碚, 顧穎. 雙端口靜態(tài)存儲器測試方法研究[J]. 計算機(jī)與數(shù)字工程, 2015, 43(1): 83-86, 112.
[10] 金大超, 冷建偉. 異步時鐘域信號同步的實現(xiàn)[J]. 天津理工大學(xué)學(xué)報, 2017, 33(3): 40-44.
[11] 齊娜, 鄒峰. HD-SDI嵌入音頻數(shù)據(jù)分析[J]. 廣播電視信息, 2014(12): 49-51.
Audio data transmission of FPGA based on I2S interface
Lin Jia Chen Suqiong Su Kaixiong
(College of Physics and Information Engineering, Fuzhou University, Fuzhou 350108)
In the experiment of converting 4K raw data into 4 channels of 3G-SDI, audio and video should be processed separately. An I2S audio data processing circuit is designed. Based on the I2S protocol, an HV2 chip and an FPGA development board are used to implement the transmission of I2S audio data, and the problem of transmitting data across clock domains is solved. Use the CTS generator to improve power supply rejection and reduce output jitter and noise performance. Simulation tests show that audio data can be transmitted completely.
I2S protocol; FPGA; HV2 chip; cross clock domain; CTS generator
2018-06-05
林 嘉(1992-),男,福建省寧德市古田縣人,碩士研究生,主要從事視頻編碼、通信技術(shù)的研究工作。
福建省省部級重大項目(2015H6014)