利用FPGA實現(xiàn)多路話音/數(shù)據(jù)復(fù)接設(shè)備
摘 要: 本文利用FPGA完成了8路同步話音及16路異步數(shù)據(jù)的復(fù)接與分接過程,并且實現(xiàn)了復(fù)接前的幀同步捕獲和利用DDS對時鐘源進行分頻得到所需時鐘的過程。該設(shè)計的控制模塊由VHDL語言完成,最后利用Xilinx公司的ISE工具和Modelsim工具完成了該設(shè)計的行為仿真、布局布線仿真及時序仿真。仿真結(jié)果驗證了輸入輸出的邏輯關(guān)系。
關(guān)鍵詞: 數(shù)據(jù)復(fù)接;DDS;數(shù)據(jù)分接;m序列;FPGA
1.引言
隨著現(xiàn)代通信向著多業(yè)務(wù)方向發(fā)展,為了節(jié)省信道資源、降低調(diào)制解調(diào)設(shè)備的復(fù)雜度,數(shù)據(jù)復(fù)接設(shè)備得到了更充分的利用。它能將多路不同類型的數(shù)據(jù)流復(fù)接成一路高速數(shù)據(jù)流,通過信道傳輸,在收端分接出發(fā)端對應(yīng)的數(shù)據(jù)流,以實現(xiàn)多業(yè)務(wù)雙向通信。
這里利用了XILINX公司的VIRTEX-ⅡPRO系列FPGA實現(xiàn)了數(shù)據(jù)復(fù)接、數(shù)據(jù)分接及幀同步過程。之所以選用FPGA完成設(shè)計功能,是由于數(shù)據(jù)復(fù)接、分接涉及大量的時序過程,F(xiàn)PGA綜合工具應(yīng)用了廣泛的時序調(diào)整與流水處理技術(shù)以改善時序電路性能。巧妙地應(yīng)用流水處理技術(shù),可以實現(xiàn)輸入輸出端口之間寄存器的移動和均衡實現(xiàn)邏輯的分隔,并且不會對原有設(shè)計引入額外的處理等待延遲,可以實現(xiàn)高性能設(shè)計的高效率綜合,確保最優(yōu)的時序性能。該設(shè)備輸入端是8路話音,16路數(shù)據(jù),其中8路并行輸入的話音均分為V1、V2,16路并行輸入的異步數(shù)據(jù)均分為d1、d2,設(shè)備完成將并行輸入復(fù)接為一路高速數(shù)據(jù)流(復(fù)接后的幀格式見圖3)經(jīng)過信道傳送后再由分接模塊分解出各個支路。設(shè)計流程圖見圖1所示。
本文結(jié)構(gòu)安排如下:首先,介紹引言部分;其次,對數(shù)據(jù)復(fù)接分接、幀頭同步捕獲以及由DDS進行時鐘分頻做了詳細的設(shè)計分析,并給出了相應(yīng)的設(shè)計流程圖和原理圖;再次,分析仿真結(jié)果,從結(jié)論對設(shè)計過程進行驗證;最后,總結(jié)全文。
2.?dāng)?shù)據(jù)復(fù)接方法與實現(xiàn)
數(shù)字復(fù)接的方法主要有按位復(fù)接、按字復(fù)接和按幀復(fù)接三種。按位復(fù)接又叫比特復(fù)接,即復(fù)接時每支路依次復(fù)接一個比特。按位復(fù)接方法簡單易行,設(shè)備也簡單,存儲器容量小,目前被廣泛采用,其缺點是對信號交換不利。按字復(fù)接,一個碼字有8位碼,它是將8位碼先儲存起來,在規(guī)定時間對各個支路輪流復(fù)接,這種方法比較復(fù)雜,具體原因后續(xù)分析。還有一種是按幀復(fù)接,這種方法的存儲容量要求太大,而且不適用于同步與異步復(fù)接情況。這里選用按字復(fù)接,原因是經(jīng)過ADPCM編碼后進入的話音數(shù)據(jù)為4bit并入(共2路),這里將一組V1,V2看為8bit(1個字),數(shù)據(jù)異步接收后出來的數(shù)據(jù),每組也為8bit。
在設(shè)計數(shù)據(jù)復(fù)接與分接設(shè)備過程中,主要有用DDS生成所需時鐘、幀結(jié)構(gòu)定義、碼速調(diào)整、控制模塊設(shè)計、幀同步頭捕獲設(shè)計幾大難點,現(xiàn)分別做一說明:
1) DDS生成時鐘:本設(shè)計的晶振為30MHz,由總體考慮所需的話音時鐘為8kHz,異步數(shù)據(jù)為117kHz。所以可以先由30MHz時鐘源由DDS得到4.096MHz的時鐘,再由4.096MHz這個時鐘進行512分頻得到8kHz時鐘,由4.096MHz時鐘進行35分頻得到117kHz時鐘,具體原理圖見圖2。對于DDS控制字的求解針對此設(shè)計可由以下公式得到32位碼字:(見書P50)
其中g(shù)en_constant為生成控制字的模塊,clk_512和clk_35為分頻模塊。
2) 幀結(jié)構(gòu)定義:對于輸入話音V1和V2其寫入時鐘為8kHz的同步時鐘,數(shù)據(jù)d1和d2其寫入時鐘為117kHz的異步時鐘。幀同步頭選用2個255bit的m序列后補一個0作為256bit同步頭,并存放在ROM中。他們經(jīng)過復(fù)接后得到117kHz的高速數(shù)據(jù)流,送入信道,接收端通過同步頭捕獲模塊進行幀同步,捕獲后由數(shù)據(jù)分接模塊進行分路,得到發(fā)端對應(yīng)的8路話音,16路數(shù)據(jù)。由于本設(shè)計輸入端還需要插入數(shù)據(jù)指示、話音信令等碼元(以供區(qū)分業(yè)務(wù)類別),在此,我分析了復(fù)接端多路輸入時鐘與合路后讀取時鐘的關(guān)系,同時綜合考慮同步話音的解復(fù)接后的連續(xù)性以及異步數(shù)據(jù)的重要性等問題,定義如圖2的幀格式。
這里需要強調(diào)的是異步數(shù)據(jù)在幀格式里的定義,數(shù)據(jù)是突發(fā)性質(zhì)的異步數(shù)據(jù),雖然數(shù)據(jù)的傳輸速率很高為117kbps,但是其平均速率很低,經(jīng)過實際分析其平均速率約0.6K×8bps,而且該數(shù)據(jù)作為控制指令所以在幀格式設(shè)計時要特別注意,此處定義幀格式時對數(shù)據(jù)每字重復(fù)傳送3次以提高可靠性。
3) 碼速調(diào)整:碼速調(diào)整部分主要是緩沖存儲器,還包括一些必要的控制電路,這里緩沖器選用Asynchronous FIFO。在很多設(shè)計中,是通過扣除一個讀取脈沖的方法來防止緩存器的信息被取空,這樣做的問題是需要判斷寫入寫出時鐘的相位關(guān)系,并且輸出同類型數(shù)據(jù)將存在不連續(xù)性。在設(shè)計中通過利用幀定義格式以及設(shè)計一個讀時鐘控制模塊來避免緩沖讀空問題,保證了各類數(shù)據(jù)的連續(xù)性。緩沖的深度與輸入有很大關(guān)系?,F(xiàn)計算FIFO要求具備的最低深度(其寬度話音為4bit,數(shù)據(jù)為8bit):
首先對FIFO的工作過程做一個簡要說明,Asynchronous FIFO是一個先入先出存儲器,并具有支持讀寫時鐘不同步的功能,在輸出口有empty指示(empty=1,表示下一時鐘所讀的數(shù)據(jù)為無效數(shù)據(jù),反之為有效)。這里在控制模塊中要求在最后一位即第211個bit處對設(shè)備中所有FIFO復(fù)位,目的是防止緩沖存儲器被取空。
輸入端單路話音是以8×4(Kbit)傳送,成幀后每個數(shù)據(jù)包512(bit)中包含單路話音40×4(bit),數(shù)據(jù)包以117kbps傳送,則話音寫入FIFO的速率與讀取FIFO的速率可以表示為(1)、(2)兩式所示。
V話音=8×4(kbps) (2)
Vread=[40/(512/117)]×4=9.14×4(kbps) (3)
ΔV=1.14×4(kbps) (4)
設(shè)緩沖區(qū)深度為X,則在7個數(shù)據(jù)包完成時間內(nèi)由速率差完成的深度為:
ΔX=1.14×7×512/117=34.92 (5)
這個即話音FIFO的最小深度,這里選擇深度為64,寬度為4bit的Asynchronous FIFO。
對于異步數(shù)據(jù)在每個數(shù)據(jù)包512bit中留出了8×3×3bit空間,由于數(shù)據(jù)量很小,且考慮到每幀開始會對設(shè)備所有FIFO復(fù)位一次,在此不需要考慮寫入讀出的時鐘問題,F(xiàn)IFO的深度只要大于7×3就可以。對于加強數(shù)據(jù)可靠性,重傳3次的問題在FIFO中不加考慮,由控制模塊完成。最后定義數(shù)據(jù)FIFO深度32,寬度8bit的Asynchronous FIFO。
4) 控制模塊的設(shè)計:這部分設(shè)計關(guān)鍵是對時鐘的控制以及時隙的安排,這個也是整個復(fù)接設(shè)備設(shè)計的主要難點,同步報頭的插入使能信號、幀格式的定義都有控制模塊中一個12位計數(shù)器來統(tǒng)一控制。對于異步數(shù)據(jù)每個字節(jié)重復(fù)3次傳送這個過程的設(shè)計,這里主要引入模塊設(shè)計,它通過前后時隙空余期間,利用時鐘上升沿與下降沿一起促發(fā),將FIFO的輸出擴展為1個與FIFO輸出同相的信號并存入本地RAM,這樣解決了FIFO的先入先出的工作特點(同個數(shù)據(jù)無法返回再讀)。對于分接模塊,難點同樣也是在異步數(shù)據(jù)部分,由于在幀格式中預(yù)定了數(shù)據(jù)重復(fù)3次發(fā)送,所以在分解模塊中采取的是3中取2的方法,對異步數(shù)據(jù)進行判決。
5) 幀頭同步捕獲模塊的設(shè)計:由于m序列具有很強的自相關(guān)性,利用255的m序列末尾加1個0作為同步頭。當(dāng)輸入序列匹配與本地碼相匹配時將出現(xiàn)相關(guān)峰值(輸入序列存放在移位寄存器中),當(dāng)不匹配時相關(guān)值很小。這里用2個上述碼字,分別作為幀同步頭和保密機同步頭,其相關(guān)捕獲過程的MATLAB仿真圖如圖3所示。這里在256和512處出現(xiàn)了相關(guān)峰值,即在這2點處本地碼與寄存器中數(shù)據(jù)匹配相關(guān)。相關(guān)檢測技術(shù)在很多文獻都有介紹,這里采取的也是通用的方法,只是在具體實現(xiàn)時,根據(jù)256bit來設(shè)計了一個移位寄存方法,采取2個4×64bit的移位寄存器作為輸入序列的存放地點,分別用于幀同步頭和保密機同步頭捕獲時輸入序列與本地碼元的自相關(guān)。由于在設(shè)計中需要捕獲成功的使能信號提前一個時鐘周期,因此本文的解決方法是將本地碼沿著輸入序列的反方向循環(huán)移動1bit,這樣可以在序列進入255bit時得到相關(guān)峰,以提前1個時鐘周期給出捕獲成功的使能信號。
由于信道中存在干擾,在控制模塊中不可以用m序列的自相關(guān)大小作為捕獲判斷基準值,這里設(shè)置的捕獲環(huán)路的基準值,它是通過相關(guān)峰值加上一定的偏移值而定的,這樣可使得同步的誤判率減小。用戶還可以通過設(shè)定軟基準值,即通過信噪比來自適應(yīng)決定偏移值,這樣可以更加可靠的達到同步狀態(tài)。
3.仿真結(jié)果分析
通過在ISE軟件中編寫UCF文件,把程序下載到xc2vp20-fg676中測試通過,已經(jīng)作為總體設(shè)計的一部分投入使用,并使用正常。在此,對整個設(shè)計用Modesim進行仿真一下,并給出結(jié)果:當(dāng)話音輸入為圖5所示,從0000到0110,寫入FIFO時鐘如圖v_in_buff_w為8kHz,則輸出見圖6所示,當(dāng)時鐘下降沿促發(fā)得empty為0后,下一時鐘下降沿所抽取的數(shù)據(jù)為開始的有效值。
需要說明的是話音是同步的,必須保證話音輸出要連續(xù),確保這個連續(xù)性跟定義的幀格式大小以及信道傳送的速據(jù)速率等因數(shù)有關(guān)。
對于異步數(shù)據(jù)部分需要不斷的對empty信號進行判斷,以確定下個時鐘下降沿抽取的數(shù)據(jù)是否有效,根據(jù)FIFO工作特點輸出指示empty為0后,下一個時鐘下降沿取得的數(shù)據(jù)有效,輸入數(shù)據(jù)見圖7,相應(yīng)的輸出結(jié)果見圖8。
4.總結(jié)
數(shù)據(jù)復(fù)接在多業(yè)務(wù)通行中應(yīng)用廣泛,它能將多路不同類型的數(shù)據(jù)流復(fù)接成一路高速數(shù)據(jù)流,通過信道傳輸,在收端分接出發(fā)端對應(yīng)的數(shù)據(jù)流,以實現(xiàn)多業(yè)務(wù)雙向通信。數(shù)據(jù)復(fù)接設(shè)備的設(shè)計方法多樣,這里所做的設(shè)計方法具有一定的通用性與實用性,給出了同步、異步合路的解決方案,并且介紹了利用DDS進行產(chǎn)生所需時鐘的方法。在設(shè)計幀結(jié)構(gòu)以及FIFO深度方面,本文也做了較詳細的推理。由于在設(shè)計數(shù)據(jù)復(fù)接、分解過程中,大量涉及進程概念,時序性很強,所以選用FPGA去完成軟過程,這相比其他器件可以進行更有效的時序調(diào)整與流水處理技術(shù),進而改善時序電路性能。
參考文獻
1 曾凡鑫.關(guān)于本原M序列的一些自相關(guān)函數(shù)取值.通信學(xué)報,1997,第9期,26-30
2 “異步傳輸模式交換機的復(fù)接設(shè)備”技術(shù)指標 專利號:972458913 [美] Bob Zeidman著, 趙宏圖譯.基于FPGA & CPLD的數(shù)字IC設(shè)計方法.北京航空航天出版社