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