HDB3(High Density Bipolar三階高密度雙極性)碼是在AMI碼的基礎上改進的一種雙極性歸零碼,它除具有AMI碼功率譜中無直流分量,可進行差錯自檢等優(yōu)點外,還克服了AMI碼當信息中出現(xiàn)連“0”碼時定時提取困難的缺點,而且HDB3碼頻譜能量主要集中在基波頻率以下,占用頻帶較窄,是ITU-TG.703推薦的PCM基群、二次群和三次群的數(shù)字傳輸接口碼型,因此HDB3碼的編解碼就顯得極為重要了[1]。目前,HDB3碼主要由專用集成電路及相應匹配的外圍中小規(guī)模集成芯片來實現(xiàn),但集成程度不高,特別是位同步提取非常復雜,不易實現(xiàn)。隨著可編程器件的發(fā)展,這一難題得到了很好地解決。
本文利用現(xiàn)代EDA設計方法學和VHDL語言及模塊化的設計方法,設計了適合于FPGA實現(xiàn)的HDB3編譯碼器的硬件實現(xiàn)方案。不但克服了分立硬件電路帶來的抗干擾差和不易調(diào)整等缺陷,而且具有軟件開發(fā)周期短,成本低,執(zhí)行速度高,實時性強,升級方便等特點。
2 HDB3編解碼原理
要了解HDB3碼的編碼規(guī)則,首先要知道AMI碼的構成規(guī)則,AMI碼就是把單極性脈沖序列中相鄰的“1”碼(即正脈沖)變?yōu)闃O性交替的正、負脈沖。將“0”碼保持不變,把“1”碼變?yōu)?1、-1交替的脈沖。如:
NRZ碼:1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1
AMI碼:-1 0 0 0 0 +1 0 0 0 0 -1 +1 0 0 0 0 -1 +1
HDB3碼是一種AMI碼的改進型,它的編碼原理可簡述為,在消息的二進制代碼序列中:
(1)當連“0”碼的個數(shù)不大于3時,HDB3編碼規(guī)律與AMI碼相同,即“1”碼變?yōu)椤?1”、“-1”交替脈沖;
(2)當代碼序列中出現(xiàn)4個連“0”碼或超過4個連“0”碼時,把連“0”段按4個“0”分節(jié),即“0000”,并使第4個“0”碼變?yōu)椤?”碼,用V脈沖表示。這樣可以消除長連“0”現(xiàn)象。為了便于識別V脈沖,使V脈沖極性與前一個“1”脈沖極性相同。這樣就破壞了AMI碼極性交替的規(guī)律,所以V脈沖為破壞脈沖,把V脈沖和前3個連“0”稱為破壞節(jié)“000V”;
(3)為了使脈沖序列仍不含直流分量,則必須使相鄰的破壞點V脈沖極性交替;
(4)為了保證前面兩條件成立,必須使相鄰的破壞點之間有奇數(shù)個“1”碼。如果原序列中破壞點之間的“1”碼為偶數(shù),則必須補為奇數(shù),即將破壞節(jié)中的第一個“0”碼變?yōu)椤?”,用B脈沖表示。這時破壞節(jié)變?yōu)椤癇00V”形式。B脈沖極性與前一“1”脈沖極性相反,而B脈沖極性和V脈沖極性相同。
如:
NRZ碼:1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1
AMI碼:-1 0 0 0 0 +1 0 0 0 0 -1 +1 0 0 0 0 -1 +1
HDB3碼:-1 0 0 0 -V +1 0 0 0 +V -1 +1 –B 0 0 -V +1 -1
雖然HDB3碼的編碼規(guī)則比較復雜,但譯碼卻比較簡單。從上述原理看出:每一個破壞符號V總是與前一非0符號同極性(包括B在內(nèi))。這就是說,從收到的符號序列中可以容易地找到破壞點V,于是也斷定V符號及其前面的3個符號必是連0符號,從而恢復4個連0碼,再將所有-1變成+1后便得到原消息代碼[2]。
3 編解碼器設計
3.1 編碼器設計
由于VHDL不能處理負電平,只能面向“1”、“0”兩種狀態(tài),所以要對它的輸出進行編碼,如表1所示。編碼的實現(xiàn)是根據(jù)HDB3編碼原理把二進制碼編碼成兩路單極性的碼字輸出,之后經(jīng)過單雙變換模塊形成HDB3碼。在編碼過程中,要經(jīng)過連0檢測、破壞節(jié)判斷、破壞節(jié)間“1”的個數(shù)判斷、調(diào)整“1”的符號輸出等步驟,編碼部分可分為4個模塊,編碼流程如圖1所示[3]。
圖1 編碼流程圖
在進行HDB3編碼器的設計時,需注意以下兩個問題:
(1) 考慮將某些“0”改為“1”
用一個四位移位寄存器來對輸入的序列進行檢測,當檢測到4個連“0”時,將其第四個“0”改為“1”。再設置一個T觸發(fā)器來檢測兩個相鄰的破壞節(jié)之間“1”的個數(shù),若T觸發(fā)器為“0”則說明兩個相鄰的破壞節(jié)之間“1”的個數(shù)為偶數(shù),需要將第2個破壞節(jié)的第一個“0”置“1”,若T觸發(fā)器為“1”,則說明兩個相鄰的破壞節(jié)之間“1”的個數(shù)為奇數(shù),第2個破壞節(jié)的第一個“0”不變。
(2) 正、負號的考慮
除了破壞節(jié)的V即“1”的符號與它前面最近的“1”的符號相同外,其他的“1”的符號都是正、負交替的。所以再設置一個T觸發(fā)器,當它檢測到“1”時就使DATA1翻轉(zhuǎn)。當然,這樣就不可避免地使破壞節(jié)的V的符號也出現(xiàn)翻轉(zhuǎn),為了防止它的翻轉(zhuǎn),用一個三位移位寄存器來跟蹤V碼,以保證V碼的符號不變(與它前面最近的“1”的符號相同)。[!--empirenews.page--]
本文在程序的實體中定義了2個輸入端口:時鐘、偽隨機序列,一個兩位的輸出數(shù)據(jù)(編碼后的輸出)。程序的結(jié)構體中使用的是進程語句,共采用4個進程,分別完成判斷4連“0”位置并插入V、記相鄰V碼間1個數(shù)、跟蹤V碼位置及編碼輸出的功能。敏感信號均選用的是時鐘信號,對于其任一變化都將同時啟動4個進程,并行執(zhí)行。在程序中共使用了5個信號,代表了電路的寄存器效果,配置到電路中也相當于寄存器。
3.2 解碼器設計
解碼設計是根據(jù)HDB3碼的特點首先檢測出極性破壞點,即找出4連零碼中添加V碼的位置(破壞點位置),其次去掉添加的V碼,最后去掉4連零碼中添加的B碼以將其還原成單極性不歸零碼。
由HDB3碼的編碼規(guī)則可知,“0000”都被“000+1”或“000-1”或“+100+1”或“-100-1”取代,所以,只要能檢測出“+1000+1”、“-1000-1”、 “+100+1”、“-100-1”、將它們分別改為“10000” 、“10000”、“0000”、“0000”就可以了。
當然“+1”、“-1”、“0”還是由Data1,Data0來表示,那么就需要有兩個5位移位寄存器(C和D),Data0通過D,Data1通過C。通過D,C來檢測,如果測到兩個移位寄存器分別為“10001”、“0xxx0”或“10001”、“1xxx1”或“1001x”、“1xx1x”或“1001x”、“0xx0x”,數(shù)據(jù)輸出是將D里面的數(shù)據(jù)流輸出。所以只要將D中所測到的以上數(shù)據(jù)分別改為“10000”、“10000”、“0000x”、“0000x”,這樣就可以得到HDB3碼的解碼了。
4 仿真和實驗結(jié)果分析
編譯碼器在QuartusII上仿真的波形分別如圖2和圖3所示。圖2中fen_clk為分頻后時鐘信號,load 為使能信號,Q為偽隨機序列,data為編碼輸出。由于輸入的數(shù)據(jù)流經(jīng)過了5個寄存器,所以輸出延遲了4個時鐘脈沖周期。但由于時鐘頻率很高,所以影響不大。
圖2 編碼器時序仿真波形圖
圖3 解碼器仿真波形
把上述設計下載到Altera EP1C3T144C8芯片上,并通過硬件調(diào)試、測試,在示波器上得到偽隨機信號波形、編碼波形和解碼波形分別如圖4和5所示。其中,CH1為偽隨機信號,CH2分別為編碼和解碼信號。測試結(jié)果和時序仿真結(jié)果無失真。隨機信號輸入相對編碼信號輸出延遲了5個單位時鐘。解碼信號延時了11個單位時鐘。
圖2 編碼器時序仿真波形圖
圖5 偽隨機信號和解碼信號波形
5 結(jié)論
實踐表明,運用FPGA來實現(xiàn)NRZ碼到HDB3碼的轉(zhuǎn)換與采用專用集成電路CD22103相比,不僅給調(diào)試帶來了方便,而且可以把編碼電路和解碼電路及其它電路集成在同一塊FPGA芯片中,減少了外接元件,提高了集成度。該設計已成功應用于網(wǎng)絡化集中照明控制系統(tǒng)中。