2.2 搜索模塊的VHDL設(shè)計與仿真
搜索模塊的對外接口如圖3所示。其中,CLK_BitSync及Data_in分別為位同步時鐘信 號和輸入數(shù)據(jù);Data_out為經(jīng)2個時鐘周期延時后的比特流數(shù)據(jù)。對輸入數(shù)據(jù)的延時處理,是為了補償產(chǎn)生search_over 時的處理時延,以便于脈沖信號search_over 與最后一位幀同步碼對齊。
搜索輸入比特流中的幀同步碼組,首先需要將輸入數(shù)據(jù)送入移位寄存器(Regdin)中,而后將 Regdin中的數(shù)據(jù)與幀同步碼組相比即可。程序中將多路啟動信號(rst、Research_check、Research_sync)取或后,作為異 步復(fù)位信號,用于啟動一次搜索過程。搜索過程中,采用for循環(huán)對寄存器Regdin 與同步碼組進行比較,通過逐位比較,每發(fā)現(xiàn)1 b不相同,則計數(shù)加1,計算出兩者之間的漢明距離。計算完漢明距離后,判斷是否大于容錯門限ErrorNum,如大于容錯門限則繼續(xù)搜索,否則輸出同步脈 沖search_over,并停止搜索。
圖4為搜索模塊的Modelsim仿真波形。其中,幀同步碼長度LenCode=7, 幀同步碼FrameCode=“1011000”,容錯門限ErrorNum=1.可以看出,復(fù)位后首先搜索到一次幀同步碼組;當(dāng) Research_check為高電平,啟動另一次搜索過程,比特流中搜索到“1001000(ErrorNum=1)”時,此時容錯位數(shù)設(shè)置為1,因此 輸出同脈沖search_over,并停止搜索過程,即使后續(xù)比特流中出現(xiàn)了“1011001(ErrorNum=1)”,仍然不輸出同步脈沖。
2.3 校核模塊的VHDL設(shè)計與仿真
為便于程序編寫,校核模塊主要由Check_Ce 進程和Checking 進程組成。Check_Ce 進程用于檢測search_over信號,檢測到信號出現(xiàn)高電平后,產(chǎn)生長度為CheckNum 幀數(shù)據(jù)的高電平允許信號CheckCe,并通過計數(shù)器Number 來標(biāo)識每幀中數(shù)據(jù)及同步碼組的位置。產(chǎn)生了CheckCe及Number信號后,Checking進程只需在CheckCe信號為高電平的范圍內(nèi)對同步碼 組進行校核即可。校核完成后,需要使check_over(連續(xù)CheckNum幀均同步)或research_check(CheckNum幀內(nèi)有一幀 未同步)信號產(chǎn)生一個高電平脈沖。幀校核的方法與搜索同步碼組的方法類似,即通過漢明距離來判斷是否同步。將校核態(tài)分成Check_Ce進程和 Checking進程來分別進行實現(xiàn),則每個進程的功能劃分更為簡單,編程實現(xiàn)時也相對容易得多。
圖5 是校核模塊的Modelsim 仿真波形。其中,幀長度LenFrame=16,校核幀數(shù)CheckNum=2,容錯門限ErrorNum=0,其余參數(shù)與搜索模塊相同。從波形上很容易 看出,當(dāng)search_over第一次出現(xiàn)高電平時,其后連續(xù)兩組同步碼均為“1011000(ErrorNum=0)”;當(dāng)search_over第二 次出現(xiàn)高電平時,其后第一組同步碼為“1001000(ErrorNum=1)”,第二組同步碼為“1011000(ErrorNum=0)”。因此第一 次幀校核順利通過,校核完成后check_over輸出一個高電平脈沖,research_check保持為低電平;第二次校核未通過,校核完成后 research_check輸出一個高電平脈沖,check_over保持為低電平。
2.4 同步模塊的VHDL設(shè)計與仿真
為了簡化設(shè)計,將同步狀態(tài)分為三個進程來完成,即計數(shù)器進程(Counter)、幀校驗進程 (FrameChecking)和同步校驗進程(SyncChecking)。Counter 進程用于產(chǎn)生幀內(nèi)數(shù)據(jù)位置的計數(shù),當(dāng)檢測到check_over 信號為高電平時,重新開始以幀周期(LenFrame)循環(huán)計數(shù);FrameChecking 進程用于產(chǎn)生幀起始位置的同步脈沖,且高電平脈沖與同步碼的最后1 b對齊,該進程首先需要對同步碼組進行校核,如校核通過,則在同步碼位置處產(chǎn)生一個高電平脈沖FramePosition,如果校驗未通過,則在同步碼位 置不產(chǎn)生高電平脈沖;SyncChecking進程通過判斷FramePosition 來確定系統(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)檢測到check_over為高電平時,計數(shù)器Number 開始以周期為幀長LenFrame=16循環(huán)計數(shù)。當(dāng)check_over 出現(xiàn)高電平時,其后連續(xù)4 組同步碼為 “1011000(ErrorNum=0)”,“1001000(ErrorNum=1)”,“1001000(ErrorNum=1)”,“1001000(ErrorNum=1)”。 由于此時設(shè)置的容錯門限ErrorNum=0,因此第一幀同步碼校核通過,輸出了同步脈沖FramePosition,此后出現(xiàn)連續(xù)3 個校核未通過的數(shù)據(jù)幀。同步狀態(tài)信號State_Sync 高電平狀態(tài)持續(xù)維持了2 幀數(shù)據(jù)的長度,而后停止同步狀態(tài),輸出失步信號research_sync,用于啟動搜索過程。
3 幀同步系統(tǒng)的FPGA實現(xiàn)及仿真
本實例的目標(biāo)器件為XC3S200-4FT200,F(xiàn)PGA實現(xiàn)后,查找表資源(LUTs)占用了 484 個(12%),全局時鐘資源(GCLKs)占用了1個(12%)。最高系統(tǒng)時鐘頻率(Maximum frequency)可達54.81 MHz.圖7 是幀同步系統(tǒng)的Modelsim 仿真波形。其中,各模塊的容錯門限ErrorNum均為0,其他同步參數(shù)不變。
圖7 實際上對幀同步系統(tǒng)的搜索、校核、校核未通過、失步、重新搜索、重新同步等過程進行了完整的仿真測試。
4 結(jié)語
本方案是基于模塊化設(shè)計思想,采用VHDL語言對幀同步系統(tǒng)進行設(shè)計實現(xiàn),有利于程序的移置及維 護。方案設(shè)計的關(guān)鍵在于理解各模塊之間的信號接口關(guān)系及時序關(guān)系。在模塊設(shè)計時,通過進一步合理劃分模塊內(nèi)部的結(jié)構(gòu),可以更好地理清程序思路并提高設(shè)計方 案的效率。最后利用Modelsim 6.0軟件進行了仿真測試。仿真結(jié)果表明,該方案中設(shè)計的同步系統(tǒng)工作穩(wěn)定,滿足性能要求。
評論