基于FPGA的數字復接系統幀同步器設計與實現
摘要:介紹了應用FPGA技術進行幀同步器設計的實現原理、系統框圖及設計中需要注意的問題,給出了用VHDL描述的幾個模塊的源代碼。
在數字通信網中,為了提高傳輸效率,常常需要將若干路低速數字信號合并成一路高速數字信號,以便通過高速信道進行傳輸。實現此功能的設備稱為數字復接系統。
數字復接系統包括發送端和接收端兩部分,通常稱為復接器和分接器。為了使分接器的幀狀態相對于復接器的幀狀態獲得并保持相位關系,以便正確地實施分接,數字復接系統在發送端把低速數字信號合并為高速信號的同時,往往還要插入用于同步的幀同步碼;而在接收端,分接器要把發送端數字信號中的幀同步碼檢測出來并去除,然后才能分解為原來的支路數字信號,其中完成幀同步碼檢出這一功能的單元稱為數字復接系統的幀同步器。在合路數字信號中,幀同步碼能否被準確識別直接決定了能否正確的分接出各個支路信號。
目前,FPGA已在通信領域得到了廣泛應用,這也為數字復接技術提供了靈活且可移植的設計方法。本文將介紹數字復接系統中幀同步器的工作原理和FPGA的設計流程,同時將給出具體實現方法以及設計中需要注意的問題。
1 幀同步器原理
圖1是筆者設計的一種數字復接系統接收端的原理框圖。其中,定時發生器為幀同步系統提供幀定位標志信號;幀同步系統用來檢測所傳輸數據碼流中的幀同步碼;比特分接電路用于把串行數據轉換成并行數據;告警優先電路用來指示當前系統處于同步狀態還是失步狀態。
在復接系統的發送端,可以將幀同步碼集中插在每幀的開頭位置;也可以將其分散插在各個支路的前面。前者稱為幀同步碼集中插入法,后者稱為分散插入法。圖2所示是使用集中插入法時,接收端幀同步器的原理框圖。
通常幀同步電路有兩種狀態,同步未建立時系統處于搜捕態,建立后則處于保持態;保持態下的同步保護措施稱為前方保護,搜捕態下的同步保護措施稱為后方保護。幀同步系統電路設計的原則是:同步建立時,假同步概率要小;同步建立后,漏同步概率要小。
圖2中的幀同步器前端是由8位移位寄存器組成的幀同步碼檢測電路,當輸入碼流中無同步碼組時,檢測電路輸出始終為1,這時定時發生器關閉,比較/計數電路(由a、b、c、d四個D觸發器組成)不工作,系統處于搜捕態;一旦在輸入碼流中檢測到同步碼組,檢測電路輸出就為0,定時發生器開始產生比較/計數電路的計數時鐘,計數器開始后方保護計數;如果隨后在規定時刻上又連續α-1次(圖中α=3)檢測到幀同步碼組,則系統同步,幀同步器進入保持態。在同步保持狀態下,一旦幀同步碼檢測電路在規定時刻有一次未發現幀同步碼,比較/計數電路便開始前方保護計數,如果隨后在規定時刻上又連續β-1次(圖中β=4)檢測不到幀同步碼,則定時發生器關閉,幀同步器由保持態進入搜捕態,重新捕捉幀同步碼。
值得注意的是,如果搜捕中第一次檢測到的是假的同步碼組(即在傳送的碼元中有一段數據與幀同步碼相同,但其出現的位置不是在規定的同步碼位置上),定時發生器仍不工作,此時幀同步碼檢測電路將繼續搜捕,直至檢測到真正的幀同步碼為止。
2 FPGA設計與實現
在FPGA設計中,幀同步器主要由幀同步碼檢出、保護和校核計數、幀失步調整控制門三部分組成。圖3中的虛線框部分就是幀同步器。下面給出用VHDL語言設計幀同步器的幾個進程模塊。
2.1 同步碼檢測電路
幀同步碼檢測電路由8位移位寄存器組成,這里把幀同步碼設定為8位最佳碼“10111000”,當電路檢測到輸入碼流中有幀同步碼組時,檢測電路將輸出“0”;否則將輸出“1”。輸出結果將作為定時發生器的控制信號之一。具體程序如下(其中d in為串行輸入碼流,yf1是檢測電路輸出的結果):
process(clk)
begin
if ( clk'event and clk=′1′) then
output<=d_in&output(7 down to 1);
end if;
end process p2;
yfl<= not((not output(7))and (not output(6)) and ( not output(5)) and output(4) and output(3) and output(2) and (not output(1))?and output(0)); ??
--″10111000″
2.2 定時發生器
定時發生器可對時鐘clk進行n分頻,分頻后的周期等于幀周期(一幀有n個碼元,這里n=88)。 定時發生器主要用來產生幀定位標志信號,該信號是產生比較/計數電路計數時鐘clk yf5的信號之一。在下面的程序中,clk為時鐘,yf4為控制門輸出信號,用于控制定時發生器的打開和關閉,f8為幀定位標志信號。具體程序如下:
process(reset,clk,yf4)
begin
if reset=′1′ then
f8<=′1′;
elsif clk'event and clk=′0′ then
if yf4=′0′then
countf<=″0000000″?
f8<=′1′;
elsif countf=″1010111″ then
countf<=″0000000″;
f8<=′1′;
else
countf<=countf+1;
f8<=′0′;
end if;
end if;
end process
2.3 控制門
控制門主要由RS觸發器構成,用來判斷系統是同步還是失步。同步時,RS觸發器的Q端輸出1,Q 端輸出0;失步時,Q端輸出0,Q 端輸出1。Q端可作為進一步分接數據的控制信號, Q 端輸出結果可打開或關閉控制門yf4。具體程序如下:
process(clk)
begin
if clk'event and clk=′1′ then
rs<=(R&S);?
case rs is
when″01″=> Q1<= ′1′;
Q<=′0′;
when ″10″=> Q1<= ′0′;?
Q<=′1′;
when ″11″=> Q<=RSq;
Q1<= RSq1;
when others => null;
end case;
end if;
end process
比較/計數電路用于完成搜捕態與保持態下的計數。搜捕態下,當幀同步碼檢測電路連續3?α=3?次捕獲到同相位的正確幀同步碼時,幀同步器將進入保持態;而在保持態下,如果幀同步碼檢測電路連續4(β=4)次未檢測到幀同步碼,幀同步器將進入搜捕態。程序如下(其中,比較/計數電路計數時鐘clk_yf5由幀定位標志信號f8和時鐘clk產生,yf2為輸出保持結果,yf3為輸出搜捕結果):
clk_yf5<=not (f8 and clk) ;產生比較/計數電路所需時鐘
process(reset,clk_yf5) ;比較/計數電路
begin
if reset=′1′ then
qa<=′0′;qb<=′0′;qc<=′0′;
qa1<=′1′;qb1<=′1′;qc1<=′1′;qd1<=′1′;
--protel<=″0000″;
elsif clk_yf5'event and clk_yf5=′1′ then
qa<=qe1;
qa1<=qe;
qb<=qa;
qb1<=qa1;
qc<=qb;
qc1<= qb1;
qd1<=qc1;
end if;
end process; ?
yf2<=not(qa1 and qb1 and qc1 and qd1);
yf3<=not(qa and qb and qc);
3 設計中需要注意的問題
設計中要嚴格控制定時發生器產生時鐘clk_yf5的寬度,以避免出現不定狀態。如果幀定位標志信號f8與幀同步檢出電路都是由時鐘clk的上升沿或下降沿產生的,那么clk_yf5脈沖中就會出現一小段不定狀態,而在這段時間里幀同步系統是不能正常工作的。所以,幀定位標志信號f8由時鐘clk的下降沿觸發產生,幀同步檢出電路則由時鐘clk的上升沿觸發,這樣便可以得到一半碼元寬度的時鐘clk_yf5脈沖,且脈沖中不存在不定狀態。
設計中應多采用同步時序電路來實現各個進程模塊的功能,以免電路中產生毛刺。
4 結束語
本設計選用Xilinx公司的ISE5.2作為硬件開發平臺,并采用VHDL編程語言。文中程序已通過了綜合實驗,并進行了功能仿真和時序仿真,仿真結果正確。在硬件實現與調試過程中,將程序下載到Xilinx公司的VIRTEX芯片,然后經過整體調試,最終實現了數字復接系統中幀同步器的設計。
評論