一種基于音頻解嵌的異步FIFO設計及FPGA實(shí)現
在視音頻嵌入解嵌系統中,嵌入音頻、音頻解嵌與音頻轉換成音頻幀標準格式輸出都是工作在不同的時(shí)鐘頻率下的。多時(shí)鐘帶來(lái)的問(wèn)題就是如何設計異步時(shí)鐘之間的接口電路。
異步FIFO存儲器是一種在數據交互系統中得到廣泛應用的先進(jìn)先出邏輯器件,具有容納異步信號的頻率(或相位差異)的特點(diǎn)。使用異步FIFO可以在兩個(gè)不同時(shí)鐘系統之間快速而方便地傳輸實(shí)時(shí)數據。因此,異步FIFO被廣泛應用于實(shí)時(shí)數據傳輸、網(wǎng)絡(luò )接口、圖像處理等方面。
雖然目前也出現了一些通用的異步FIFO內核,但在一些具體環(huán)境下其工作效率并不是最理想的。針對這個(gè)問(wèn)題,本文介紹了一種適合音頻解嵌的高效異步FIFO,對通用異步FIFO進(jìn)行了一些改進(jìn),最后利用Verilog HDL硬件描述語(yǔ)言設計并仿真實(shí)現。
1 SDI音頻嵌入基本格式
在模擬視頻中存在著(zhù)行、場(chǎng)消隱期,而行、場(chǎng)消隱期內并不存在有效圖像信號。對于數字視頻信號,同樣地也存在沒(méi)有有效視頻信號的區間。
模擬視頻中的行消隱期間,在數字視頻中被稱(chēng)為行輔助數據區HANC(Horizontal Ancillary Data)。分量數字視頻格式的每一個(gè)有效行中,625/50制共有1 728個(gè)取樣字(525/60制為1 716個(gè)取樣字),其中對Y、Cb和Cr取樣有1 440個(gè)取樣字(0~1 439)。而對行消隱期間的取樣可以有288個(gè)取樣字(525/60制為276個(gè)取樣字)。
目前輔助數據區也即行消隱區最大的用途是放置數字音頻,被放置的數字音頻稱(chēng)為嵌入音頻。圖1是AES/EBU音頻數據塊結構[1]。
一個(gè)音頻塊由192個(gè)連續幀組成,每個(gè)幀包含相關(guān)的兩個(gè)子幀,使得一個(gè)數字音頻碼流可以作為立體聲、雙聲道模式使用。這兩個(gè)子幀(32 bit)分別表示一個(gè)音頻通道中的一個(gè)音頻樣本,每個(gè)子幀的32 bit中包含24 bit的音頻數據和一些輔助數據。
音頻嵌入就是將每個(gè)子幀的32 bit信息按照SMPTE-292[2]標準分別嵌入到3個(gè)數據字和一個(gè)輔助數據字中,并將這些數據字嵌入到HANC中。解嵌的目的就是把每個(gè)音頻子幀對應的這4個(gè)字找到,按照順序把這些子幀組合成AES/EBU音頻塊格式,使輸出為直接可識別的音頻碼流。
2 通用異步FIFO設計
2.1 通用異步FIFO結構
圖2所示為通用異步FIFO結構,一般由四個(gè)模塊構成:數據存儲模塊、寫(xiě)地址產(chǎn)生模塊、讀地址產(chǎn)生模塊和標志位產(chǎn)生模塊。
系統分為讀時(shí)鐘和寫(xiě)時(shí)兩個(gè)完全獨立的時(shí)鐘域。讀寫(xiě)兩端的使能和時(shí)鐘信號作為讀寫(xiě)指針控制的基礎控制輸入信號。更新的讀寫(xiě)指針既作為存儲器的寫(xiě)入讀出地址又作為標志信號模塊的輸入。標志產(chǎn)生模塊通過(guò)對讀寫(xiě)地址的比較來(lái)得到存儲器的空、滿(mǎn)標志信號。將寫(xiě)滿(mǎn)信號和讀空信號分別反饋到寫(xiě)指針和讀指針控制模塊,控制指針值的更新。
2.2 亞穩態(tài)消除方法
由于讀寫(xiě)標志控制分別工作于不同的時(shí)鐘域,在其產(chǎn)生電路中,如果比較觸發(fā)器建立時(shí)間和保持時(shí)間的要求沒(méi)有得到滿(mǎn)足,觸發(fā)器就會(huì )進(jìn)入一個(gè)介于邏輯1和邏輯0的中間狀態(tài),稱(chēng)之為亞穩態(tài)。為了降低亞穩態(tài)發(fā)生的概率,可采用格雷碼地址計數[3]。二進(jìn)制計數器在計數值增加時(shí),可能同時(shí)會(huì )有多位數值發(fā)生變化,而格雷碼計數器每次加1只有一位數值發(fā)生變化。所以將二進(jìn)制讀寫(xiě)指針轉換為格雷碼,送到另一個(gè)時(shí)鐘域進(jìn)行比較,可以降低亞穩態(tài)發(fā)生的概率。
2.3 空、滿(mǎn)標志產(chǎn)生
通過(guò)對讀寫(xiě)格雷碼地址高兩位的比較,得到存儲器工作的滿(mǎn)空趨勢[4],再比較地址值是否相等最終判斷空、滿(mǎn)標志。把這兩個(gè)2 bit數組合成4 bit數的16種組合,可以得到:當寫(xiě)地址格雷碼最高兩位和讀地址格雷碼最高兩位分別組合為:0001、0111、1110、1000時(shí),存儲器趨向滿(mǎn)狀態(tài);為0100、1101、1011、0010時(shí),存儲器趨向空狀態(tài)。
空、滿(mǎn)趨勢通過(guò)事件觸發(fā),隨時(shí)根據讀寫(xiě)地址的更新值進(jìn)行判斷。再結合讀寫(xiě)地址的比較結果來(lái)最終判斷存儲器的空、滿(mǎn)狀態(tài)。
3 改進(jìn)型異步FIFO設計
3.1 改進(jìn)方案
根據AES/EBU音頻格式可知,每192幀(384子幀)音頻構成一個(gè)AES/EBU音頻塊,作為一個(gè)連續輸出單位,并用一個(gè)Z標志來(lái)指示這一音頻塊的開(kāi)始。根據這一標準,本文設計了一種專(zhuān)用于該音頻格式輸出的異步FIFO。該異步FIFO具有單端復位,并根據寫(xiě)地址復位寄存值作為讀地址更新的參考,使讀數據更可靠。FIFO深度設計為384子幀,位寬為24 bit。當用每個(gè)存儲單元(24 bit)存儲一個(gè)子幀中的音頻數據碼來(lái)指示地址時(shí),由于設計深度為384子幀,利用9 bit格雷碼來(lái)指示地址時(shí),最高兩位不會(huì )達到10的情況下,那么在滿(mǎn)、空標志判斷中的趨勢判斷就可以少考慮一種情況,即寫(xiě)、讀地址格雷碼最高兩位組合為0001、0111、1100時(shí),趨向滿(mǎn);為0100、1101、0011時(shí),趨向空。這種改善,既減小了存儲器的大小,又減小了程序的復雜度。
考慮到解嵌的音頻信號可能存在丟幀、錯幀,有的時(shí)候可能一塊數據中并沒(méi)有192幀的數據,而只是一部分數據,因此,在實(shí)際工作中需要利用塊開(kāi)始標志Z復位寫(xiě)地址指針。為了保證輸出端也能在讀地址復位的地方進(jìn)行復位,保證輸出的音頻塊與輸入端對應,本設計提出了利用一個(gè)地址寄存器寄存寫(xiě)地址復位時(shí)的寫(xiě)地址,并利用該地址作為讀地址指針更新參考,這樣就增加了讀取數據的可靠性。
圖3是改進(jìn)的(讀寫(xiě)獨立復位)異步FIFO結構。
3.2 設計仿真
系統設計時(shí),利用Quartus II進(jìn)行RTL級的邏輯設計并綜合處理,然后設計仿真平臺[5],利用Modelsim仿真工具對整個(gè)系統進(jìn)行門(mén)級仿真。根據設計的異步FIFO 的工作特性,仿真平臺對FIFO工作到滿(mǎn)狀態(tài)、空狀態(tài),以及寫(xiě)指針復位后的讀操作進(jìn)行了較全面的覆蓋。
下面是測試平臺的激勵生成代碼:
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í)鐘速率下,先進(jìn)行寫(xiě)操作,等到確保寫(xiě)滿(mǎn)后(即計數達到400時(shí)),以高速的讀操作來(lái)讀取數據,并繼續寫(xiě)數據。當計數到500時(shí),對寫(xiě)操作復位,此時(shí)的復位地址是98。
根據上述的改進(jìn)方法,設計、仿真完成后,用Altera公司的Cyclone Ⅲ系列EP3C10E144C8芯片實(shí)現電路程序設計。仿真結果如圖4所示。在圖中可以看到,wr_addr_rst的值一開(kāi)始默認為383,但寫(xiě)入端有寫(xiě)復位時(shí),即為寫(xiě)復位時(shí)的地址值98,該值也即作為讀操作的地址復位參考值傳遞到讀操作模塊。等到讀操作進(jìn)行第二輪讀取并讀到第98個(gè)地址時(shí),再復位到0地址時(shí),仿真完成。
本文基于FPGA內部存儲器,提出了一種針對視音頻解嵌系統更具效率的異步FIFO,對通用的FIFO進(jìn)行改進(jìn),并利用硬件描述語(yǔ)言及相應的仿真工具實(shí)現了功能仿真。仿真結果表明,本設計能很好地按照設計的意圖工作。此外,還針對視音頻解嵌系統中,音頻塊輸出端異步FIFO提出了寫(xiě)復位地址寄存,讀地址根據此寄存值來(lái)進(jìn)行更新及復位的改進(jìn),提高了異步FIFO的工作效率和可靠性。
參考文獻
[1] Working group on digital input-output interfacing.數字音頻AES3接口標準——線(xiàn)性表示雙信道數字音頻數據的串行傳輸格式[J].劉欣榮譯.有線(xiàn)電視技術(shù),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] 汪東,馬劍武,陳書(shū)明.基于Gray碼的異步FIFO接口技術(shù)及其應用[J].計算機工程與科學(xué),2005(11).
[4] 王淼,宋晗.異步FIFO的FPGA實(shí)現[J].微處理機,2004(8).
[5] NAVABI Z.Verilog數字系統設計——RTL綜合、測試平臺與驗證(第二版)[M].李廣軍,等譯.北京:電子工業(yè)出版社,2007.
評論