引言
在數字通信系統中,發送端一般以一定數目的碼元組成一個個“字”或“句”,即組成一個個數據幀進行傳輸,因此幀是數據傳輸的基本單位。不同的通信系統具有不同的幀結構。幀一般分為幀同步碼和數據兩部分,幀同步碼用于標志幀的起始位置;數據則是需要傳輸的有效碼元。幀同步碼組的插入方法主要有兩種:集中式插入法和間隔式插入法。集中式插入法就是在每幀的開頭集中插入幀同步碼組的方法;間隔式插入法則是將幀同步碼組分散插入到數據流中,即每隔一定數量的信息碼元插入一個幀同步碼元。本文主要提出一種集中式插入法幀同步的FPGA的設計方案。
一般來講,幀同步在位同步之后才能進行。雖然信號的頻率很容易由位同步信號經過分頻得到,但是幀的起始和末尾時刻則無法由位同步信號分頻確定。幀同步的主要任務就是要獲取每個數據幀的起始及結束位置。隨著可編程邏輯器件的發展,采用FPGA實現幀同步等數字系統具有速度快、使用方便、可編程配置各種參數等一系列優點,因而得到了越來越廣泛的應用。
1 集中式插入法幀同步的原理及流程
1.1 集中式插入法幀總體結構
集中式插入法是指在每幀數據的開始位置集中插入幀同步碼序列的方法。在這種同步傳輸方式中,被傳輸的數據比特被編成幀,每幀包括多個數據,幀的首部加一個幀同步碼組(也稱為幀的標志字),記作U,其長度為M(單位:b),幀內的數據比特數為D.接收端對接收的比特流進行搜索,一旦檢測到標志字U,就知道了一幀數據的開始,并據此對幀內的數據進行分組處理,以此建立起同步傳輸機制。集中式插入法的數據幀格式如圖1所示。
顯然,幀同步碼組必須滿足一定的條件:首先,同步碼組要求盡量與所要傳輸的數據不同,以免將數據誤認為是同步碼組;其次要求幀同步碼組具有尖銳單峰的自相關特性,以便于接收端進行正確檢測;第三個要求是長度不能太長,以免占用過多的信道資源。目前常用的幀同步碼組主要有廣義巴克(Barker)碼序列,一些系統也使用具有偽隨機特性的m序列作為同步碼組。
1.2 幀同步的幾種狀態
根據幀同步搜索的原理,在幀同步搜索過程中顯然存在假鎖的可能性(也稱虛警概率),因為數據比特所構成的碼序列,或部分的標志字與部分的數據比特所構成的長度為M 的碼序列也有可能滿足檢測條件,而被誤認為U.因此,為了提高幀同步系統的性能(減小假鎖的概率,鎖定后盡量增加同步的穩定性),工程上通常通過增加同步流程的復雜性來實現改善性能的目的。一般來講,將幀同步的過程分為三個狀態:搜索態、校核態和同步態,其狀態轉移圖如圖2所示。
搜索態:在數據接收的起始時刻,或幀校核時出現未同步幀,或同步態時發現有多個連續幀未同步時轉入搜索態。搜索態下,程序在數據流中持續搜索幀同步碼,當從接收到的比特流中找到幀同步碼時,表明已搜索到了一個同步幀頭,此時輸出一個脈沖信號,系統可進入校核態。
校核態:若連續經過N 幀同步碼確認搜索態中找到的幀頭正確,則系統可立即轉入同步狀態;否則說明存在假同步,需要返回搜索態重新對幀同步碼進行搜索。由首次搜索到幀同步頭到進入同步態的N 幀時間叫做后方保護時間。
同步態:幀同步系統處于同步狀態時,若沒有出現連續M 幀數據未同步,則保持在同步狀態??紤]到接收的數據流中可能受外界干擾而存在誤碼,在同步狀態中只有連續M 幀丟失同步碼才進入失步狀態,并返回搜索態,這個M 幀的時間叫做前方保護時間。
2 幀同步系統的VHDL設計與仿真
2.1 總體結構設計
根據實例需求,幀同步碼組長度(LenCode)、幀同步碼組(FrameCode)、容錯位數(ErrorNum)、幀長(Len-Frame)、校核態校核幀數(CheckNum)以及同步態校核幀數(SyncNum)均以常量的形式設置,便于VHDL程序中修改同步參數。系統數據速率及時鐘頻率為50 MHz.
根據圖2所示的結構,很容易想到采用狀態機的設計方法來實現同步系統。不論是采用狀態機方式,或原理圖方式進行VHDL程序設計,最終均可以轉換成VHDL代碼的形式。顯然,直接采用編寫VHDL代碼的形式,更利于程序的修改及升級維護。因此,本文完全采用代碼編寫方式來進行程序設計。
圖2是一個典型的狀態轉移圖,可以將轉移條件看作狀態之間的信號接口。整個幀同步系統可以劃分為搜索狀態模塊(Search)、校核狀態模塊(Check)及同步狀態模塊(Sync)。除了上電后啟動搜索狀態之外,當校核未通過(CheckNum 幀內有一個校核幀未同步)或同步態失鎖(連續SyncNum 幀未同步)時也需啟動搜索狀態,因此搜索狀態的啟動信號有復位信號(rst)、校核態重搜索信號(Research_check)和同步態重搜索信號(Research_sync);校核態的啟動信號僅來自于搜索態(search_over),即只有當搜索到幀同步碼后才能轉入校核態,如果校核通過則送出校核完成信號(check_over),校核未通過則送出重新搜索信號(Research_check);同步態的啟動信號僅來自于校核態(check_over),只有校核通過后才能進入同步狀態。進入同步態后,持續對同步碼組進行檢測,當檢測到重新失鎖后送出Research_sync,重新啟動搜索狀態。圖3為幀同步系統頂層VHDL程序文件采用Synplify Pro綜合后的RTL原理圖。
2.2 搜索模塊的VHDL設計與仿真
搜索模塊的對外接口如圖3所示。其中,CLK_BitSync及Data_in分別為位同步時鐘信號和輸入數據;Data_out為經2個時鐘周期延時后的比特流數據。對輸入數據的延時處理,是為了補償產生search_over 時的處理時延,以便于脈沖信號search_over 與最后一位幀同步碼對齊。
搜索輸入比特流中的幀同步碼組,首先需要將輸入數據送入移位寄存器(Regdin)中,而后將Regdin中的數據與幀同步碼組相比即可。程序中將多路啟動信號(rst、Research_check、Research_sync)取或后,作為異步復位信號,用于啟動一次搜索過程。搜索過程中,采用for循環對寄存器Regdin 與同步碼組進行比較,通過逐位比較,每發現1 b不相同,則計數加1,計算出兩者之間的漢明距離。計算完漢明距離后,判斷是否大于容錯門限ErrorNum,如大于容錯門限則繼續搜索,否則輸出同步脈沖search_over,并停止搜索。
圖4為搜索模塊的Modelsim仿真波形。其中,幀同步碼長度LenCode=7, 幀同步碼FrameCode=“1011000”,容錯門限ErrorNum=1.可以看出,復位后首先搜索到一次幀同步碼組;當Research_check為高電平,啟動另一次搜索過程,比特流中搜索到“1001000(ErrorNum=1)”時,此時容錯位數設置為1,因此輸出同脈沖search_over,并停止搜索過程,即使后續比特流中出現了“1011001(ErrorNum=1)”,仍然不輸出同步脈沖。
2.3 校核模塊的VHDL設計與仿真
為便于程序編寫,校核模塊主要由Check_Ce 進程和Checking 進程組成。Check_Ce 進程用于檢測search_over信號,檢測到信號出現高電平后,產生長度為CheckNum 幀數據的高電平允許信號CheckCe,并通過計數器Number 來標識每幀中數據及同步碼組的位置。產生了CheckCe及Number信號后,Checking進程只需在CheckCe信號為高電平的范圍內對同步碼組進行校核即可。校核完成后,需要使check_over(連續CheckNum幀均同步)或research_check(CheckNum幀內有一幀未同步)信號產生一個高電平脈沖。幀校核的方法與搜索同步碼組的方法類似,即通過漢明距離來判斷是否同步。將校核態分成Check_Ce進程和Checking進程來分別進行實現,則每個進程的功能劃分更為簡單,編程實現時也相對容易得多。
圖5 是校核模塊的Modelsim 仿真波形。其中,幀長度LenFrame=16,校核幀數CheckNum=2,容錯門限ErrorNum=0,其余參數與搜索模塊相同。從波形上很容易看出,當search_over第一次出現高電平時,其后連續兩組同步碼均為“1011000(ErrorNum=0)”;當search_over第二次出現高電平時,其后第一組同步碼為“1001000(ErrorNum=1)”,第二組同步碼為“1011000(ErrorNum=0)”.因此第一次幀校核順利通過,校核完成后check_over輸出一個高電平脈沖,research_check保持為低電平;第二次校核未通過,校核完成后research_check輸出一個高電平脈沖,check_over保持為低電平。
2.4 同步模塊的VHDL設計與仿真
為了簡化設計,將同步狀態分為三個進程來完成,即計數器進程(Counter)、幀校驗進程(FrameChecking)和同步校驗進程(SyncChecking)。Counter 進程用于產生幀內數據位置的計數,當檢測到check_over 信號為高電平時,重新開始以幀周期(LenFrame)循環計數;FrameChecking 進程用于產生幀起始位置的同步脈沖,且高電平脈沖與同步碼的最后1 b對齊,該進程首先需要對同步碼組進行校核,如校核通過,則在同步碼位置處產生一個高電平脈沖FramePosition,如果校驗未通過,則在同步碼位置不產生高電平脈沖;SyncChecking進程通過判斷FramePosition 來確定系統是否處于同步狀態,即只需判斷FramePosition是否連續在同步碼組的位置出現低電平,如連續出現SyncNum 次低電平,則判斷為失鎖,否則繼續維持同步狀態。
圖6 是同步模塊的Modelsim 仿真波形。其中同步態校核幀數SyncNum=2,其他參數與校核態相同。從圖中可以看出,當檢測到check_over為高電平時,計數器Number開始以周期為幀長LenFrame=16循環計數。當check_over 出現高電平時,其后連續4 組同步碼為“1011000(ErrorNum=0)”,“1001000(ErrorNum=1)”,“1001000(ErrorNum=1)”,“1001000(ErrorNum=1)”.由于此時設置的容錯門限ErrorNum=0,因此第一幀同步碼校核通過,輸出了同步脈沖FramePosition,此后出現連續3 個校核未通過的數據幀。同步狀態信號State_Sync 高電平狀態持續維持了2 幀數據的長度,而后停止同步狀態,輸出失步信號research_sync,用于啟動搜索過程。
3 幀同步系統的FPGA實現及仿真
本實例的目標器件為XC3S200-4FT200,FPGA實現后,查找表資源(LUTs)占用了484 個(12%),全局時鐘資源(GCLKs)占用了1個(12%)。最高系統時鐘頻率(Maximum frequency)可達54.81 MHz.圖7 是幀同步系統的Modelsim 仿真波形。其中,各模塊的容錯門限ErrorNum均為0,其他同步參數不變。
圖7 實際上對幀同步系統的搜索、校核、校核未通過、失步、重新搜索、重新同步等過程進行了完整的仿真測試。
4 結語
本方案是基于模塊化設計思想,采用VHDL語言對幀同步系統進行設計實現,有利于程序的移置及維護。方案設計的關鍵在于理解各模塊之間的信號接口關系及時序關系。在模塊設計時,通過進一步合理劃分模塊內部的結構,可以更好地理清程序思路并提高設計方案的效率。最后利用Modelsim 6.0軟件進行了仿真測試。仿真結果表明,該方案中設計的同步系統工作穩定,滿足性能要求。
-
FPGA
+關注
關注
1630文章
21766瀏覽量
604598 -
寄存器
+關注
關注
31文章
5358瀏覽量
120775 -
vhdl
+關注
關注
30文章
817瀏覽量
128196
發布評論請先 登錄
相關推薦
評論