新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 一種基于音頻解嵌的異步FIFO設計及FPGA實現(xiàn)

一種基于音頻解嵌的異步FIFO設計及FPGA實現(xiàn)

作者: 時間:2011-09-22 來源:網(wǎng)絡 收藏

 在視音頻嵌入解嵌系統(tǒng)中,嵌入音頻、音頻解嵌與音頻轉換成音頻幀標準格式輸出都是工作在不同的時鐘頻率下的。多時鐘帶來的問題就是如何設計異步時鐘之間的接口電路。
 異步存儲器是一種在數(shù)據(jù)交互系統(tǒng)中得到廣泛應用的先進先出邏輯器件,具有容納異步信號的頻率(或相位差異)的特點。使用異步可以在兩個不同時鐘系統(tǒng)之間快速而方便地傳輸實時數(shù)據(jù)。因此,異步被廣泛應用于實時數(shù)據(jù)傳輸、網(wǎng)絡接口、圖像處理等方面。
 雖然目前也出現(xiàn)了一些通用的異步FIFO內(nèi)核,但在一些具體環(huán)境下其工作效率并不是最理想的。針對這個問題,本文介紹了一種適合音頻解嵌的高效異步FIFO,對通用異步FIFO進行了一些改進,最后利用Verilog HDL硬件描述語言設計并仿真實現(xiàn)。
1 SDI音頻嵌入基本格式
 在模擬視頻中存在著行、場消隱期,而行、場消隱期內(nèi)并不存在有效圖像信號。對于數(shù)字視頻信號,同樣地也存在沒有有效視頻信號的區(qū)間。
模擬視頻中的行消隱期間,在數(shù)字視頻中被稱為行輔助數(shù)據(jù)區(qū)HANC(Horizontal Ancillary Data)。分量數(shù)字視頻格式的每一個有效行中,625/50制共有1 728個取樣字(525/60制為1 716個取樣字),其中對Y、Cb和Cr取樣有1 440個取樣字(0~1 439)。而對行消隱期間的取樣可以有288個取樣字(525/60制為276個取樣字)。
目前輔助數(shù)據(jù)區(qū)也即行消隱區(qū)最大的用途是放置數(shù)字音頻,被放置的數(shù)字音頻稱為嵌入音頻。圖1是AES/EBU音頻數(shù)據(jù)塊結構[1]。

一種基于音頻解嵌的異步FIFO設計及FPGA實現(xiàn)

 一個音頻塊由192個連續(xù)幀組成,每個幀包含相關的兩個子幀,使得一個數(shù)字音頻碼流可以作為立體聲、雙聲道模式使用。這兩個子幀(32 bit)分別表示一個音頻通道中的一個音頻樣本,每個子幀的32 bit中包含24 bit的音頻數(shù)據(jù)和一些輔助數(shù)據(jù)。
 音頻嵌入就是將每個子幀的32 bit信息按照SMPTE-292[2]標準分別嵌入到3個數(shù)據(jù)字和一個輔助數(shù)據(jù)字中,并將這些數(shù)據(jù)字嵌入到HANC中。解嵌的目的就是把每個音頻子幀對應的這4個字找到,按照順序把這些子幀組合成AES/EBU音頻塊格式,使輸出為直接可識別的音頻碼流。
2 通用異步FIFO設計
2.1 通用異步FIFO結構

 圖2所示為通用異步FIFO結構,一般由四個模塊構成:數(shù)據(jù)存儲模塊、寫地址產(chǎn)生模塊、讀地址產(chǎn)生模塊和標志位產(chǎn)生模塊。

一種基于音頻解嵌的異步FIFO設計及FPGA實現(xiàn)

 系統(tǒng)分為讀時鐘和寫時兩個完全獨立的時鐘域。讀寫兩端的使能和時鐘信號作為讀寫指針控制的基礎控制輸入信號。更新的讀寫指針既作為存儲器的寫入讀出地址又作為標志信號模塊的輸入。標志產(chǎn)生模塊通過對讀寫地址的比較來得到存儲器的空、滿標志信號。將寫滿信號和讀空信號分別反饋到寫指針和讀指針控制模塊,控制指針值的更新。
2.2 亞穩(wěn)態(tài)消除方法
 由于讀寫標志控制分別工作于不同的時鐘域,在其產(chǎn)生電路中,如果比較觸發(fā)器建立時間和保持時間的要求沒有得到滿足,觸發(fā)器就會進入一個介于邏輯1和邏輯0的中間狀態(tài),稱之為亞穩(wěn)態(tài)。為了降低亞穩(wěn)態(tài)發(fā)生的概率,可采用格雷碼地址計數(shù)[3]。二進制計數(shù)器在計數(shù)值增加時,可能同時會有多位數(shù)值發(fā)生變化,而格雷碼計數(shù)器每次加1只有一位數(shù)值發(fā)生變化。所以將二進制讀寫指針轉換為格雷碼,送到另一個時鐘域進行比較,可以降低亞穩(wěn)態(tài)發(fā)生的概率。
2.3 空、滿標志產(chǎn)生
 通過對讀寫格雷碼地址高兩位的比較,得到存儲器工作的滿空趨勢[4],再比較地址值是否相等最終判斷空、滿標志。把這兩個2 bit數(shù)組合成4 bit數(shù)的16種組合,可以得到:當寫地址格雷碼最高兩位和讀地址格雷碼最高兩位分別組合為:0001、0111、1110、1000時,存儲器趨向滿狀態(tài);為0100、1101、1011、0010時,存儲器趨向空狀態(tài)。
空、滿趨勢通過事件觸發(fā),隨時根據(jù)讀寫地址的更新值進行判斷。再結合讀寫地址的比較結果來最終判斷存儲器的空、滿狀態(tài)。
3 改進型異步FIFO設計
3.1 改進方案

 根據(jù)AES/EBU音頻格式可知,每192幀(384子幀)音頻構成一個AES/EBU音頻塊,作為一個連續(xù)輸出單位,并用一個Z標志來指示這一音頻塊的開始。根據(jù)這一標準,本文設計了一種專用于該音頻格式輸出的異步FIFO。該異步FIFO具有單端復位,并根據(jù)寫地址復位寄存值作為讀地址更新的參考,使讀數(shù)據(jù)更可靠。FIFO深度設計為384子幀,位寬為24 bit。當用每個存儲單元(24 bit)存儲一個子幀中的音頻數(shù)據(jù)碼來指示地址時,由于設計深度為384子幀,利用9 bit格雷碼來指示地址時,最高兩位不會達到10的情況下,那么在滿、空標志判斷中的趨勢判斷就可以少考慮一種情況,即寫、讀地址格雷碼最高兩位組合為0001、0111、1100時,趨向滿;為0100、1101、0011時,趨向空。這種改善,既減小了存儲器的大小,又減小了程序的復雜度。
 考慮到解嵌的音頻信號可能存在丟幀、錯幀,有的時候可能一塊數(shù)據(jù)中并沒有192幀的數(shù)據(jù),而只是一部分數(shù)據(jù),因此,在實際工作中需要利用塊開始標志Z復位寫地址指針。為了保證輸出端也能在讀地址復位的地方進行復位,保證輸出的音頻塊與輸入端對應,本設計提出了利用一個地址寄存器寄存寫地址復位時的寫地址,并利用該地址作為讀地址指針更新參考,這樣就增加了讀取數(shù)據(jù)的可靠性。
 圖3是改進的(讀寫獨立復位)異步FIFO結構。

一種基于音頻解嵌的異步FIFO設計及FPGA實現(xiàn)

3.2 設計仿真
 系統(tǒng)設計時,利用Quartus II進行RTL級的邏輯設計并綜合處理,然后設計仿真平臺[5],利用Modelsim仿真工具對整個系統(tǒng)進行門級仿真。根據(jù)設計的異步FIFO 的工作特性,仿真平臺對FIFO工作到滿狀態(tài)、空狀態(tài),以及寫指針復位后的讀操作進行了較全面的覆蓋。
 下面是測試平臺的激勵生成代碼:
always #40 wr_clk=~wr_clk;
always #10 rd_clk=~rd_clk;
always @(posedge wr_clk) begin
   if(!rstn) begin
    wr_data=0;
    cntw=0;
    rd_en=0;
    wr_en=0;
  end
else if(cntw==400) begin
    rd_en=1;
    cntw=cntw+1;
end
else if(cntw==500) wr_rstn=0;
else begin
    wr_en=1;
    wr_rstn=1;
    wr_data=wr_data+1;
    cntw=cntw+1;
   end
 end
 代碼的功能是在較低的時鐘速率下,先進行寫操作,等到確保寫滿后(即計數(shù)達到400時),以高速的讀操作來讀取數(shù)據(jù),并繼續(xù)寫數(shù)據(jù)。當計數(shù)到500時,對寫操作復位,此時的復位地址是98。
根據(jù)上述的改進方法,設計、仿真完成后,用Altera公司的Cyclone Ⅲ系列EP3C10E144C8芯片實現(xiàn)電路程序設計。仿真結果如圖4所示。在圖中可以看到,wr_addr_rst的值一開始默認為383,但寫入端有寫復位時,即為寫復位時的地址值98,該值也即作為讀操作的地址復位參考值傳遞到讀操作模塊。等到讀操作進行第二輪讀取并讀到第98個地址時,再復位到0地址時,仿真完成。

一種基于音頻解嵌的異步FIFO設計及FPGA實現(xiàn)

 本文基于FPGA內(nèi)部存儲器,提出了一種針對視音頻解嵌系統(tǒng)更具效率的異步FIFO,對通用的FIFO進行改進,并利用硬件描述語言及相應的仿真工具實現(xiàn)了功能仿真。仿真結果表明,本設計能很好地按照設計的意圖工作。此外,還針對視音頻解嵌系統(tǒng)中,音頻塊輸出端異步FIFO提出了寫復位地址寄存,讀地址根據(jù)此寄存值來進行更新及復位的改進,提高了異步FIFO的工作效率和可靠性。
參考文獻
[1] Working group on digital input-output interfacing.數(shù)字音頻AES3接口標準——線性表示雙信道數(shù)字音頻數(shù)據(jù)的串行傳輸格式[J].劉欣榮譯.有線電視技術,2003(8).
[2] AVE W H, PLAINS W. SMPTE292M, television bit2 serial digital interface for high2 definition television systems[S]. NY,10607(914):761-1100.
[3] 汪東,馬劍武,陳書明.基于Gray碼的異步FIFO接口技術及其應用[J].計算機工程與科學,2005(11).
[4] 王淼,宋晗.異步FIFO的FPGA實現(xiàn)[J].微處理機,2004(8).
[5] NAVABI Z.Verilog數(shù)字系統(tǒng)設計——RTL綜合、測試平臺與驗證(第二版)[M].李廣軍,等譯.北京:電子工業(yè)出版社,2007.



關鍵詞: FIFO

評論


相關推薦

技術專區(qū)

關閉