基于FPGA的HDB3編解碼器設計
HDB3(High Density Bipolar三階高密度雙極性)碼是在A(yíng)MI碼的基礎上改進(jìn)的一種雙極性歸零碼,它除具有AMI碼功率譜中無(wú)直流分量,可進(jìn)行差錯自檢等優(yōu)點(diǎn)外,還克服了AMI碼當信息中出現連“0”碼時(shí)定時(shí)提取困難的缺點(diǎn),而且HDB3碼頻譜能量主要集中在基波頻率以下,占用頻帶較窄,是ITU-TG.703推薦的PCM基群、二次群和三次群的數字傳輸接口碼型,因此HDB3碼的編解碼就顯得極為重要了[1]。目前,HDB3碼主要由專(zhuān)用集成電路及相應匹配的外圍中小規模集成芯片來(lái)實(shí)現,但集成程度不高,特別是位同步提取非常復雜,不易實(shí)現。隨著(zhù)可編程器件的發(fā)展,這一難題得到了很好地解決。
本文利用現代EDA設計方法學(xué)和VHDL語(yǔ)言及模塊化的設計方法,設計了適合于FPGA實(shí)現的HDB3編譯碼器的硬件實(shí)現方案。不但克服了分立硬件電路帶來(lái)的抗干擾差和不易調整等缺陷,而且具有軟件開(kāi)發(fā)周期短,成本低,執行速度高,實(shí)時(shí)性強,升級方便等特點(diǎn)。
2 HDB3編解碼原理
要了解HDB3碼的編碼規則,首先要知道AMI碼的構成規則,AMI碼就是把單極性脈沖序列中相鄰的“1”碼(即正脈沖)變?yōu)闃O性交替的正、負脈沖。將“0”碼保持不變,把“1”碼變?yōu)?1、-1交替的脈沖。如:
NRZ碼:100001000011000011
AMI碼:-10000 +10000-1 +10000-1 +1
HDB3碼是一種AMI碼的改進(jìn)型,它的編碼原理可簡(jiǎn)述為,在消息的二進(jìn)制代碼序列中:
(1)當連“0”碼的個(gè)數不大于3時(shí),HDB3編碼規律與AMI碼相同,即“1”碼變?yōu)椤?1”、“-1”交替脈沖;
(2)當代碼序列中出現4個(gè)連“0”碼或超過(guò)4個(gè)連“0”碼時(shí),把連“0”段按4個(gè)“0”分節,即“0000”,并使第4個(gè)“0”碼變?yōu)椤?”碼,用V脈沖表示。這樣可以消除長(cháng)連“0”現象。為了便于識別V脈沖,使V脈沖極性與前一個(gè)“1”脈沖極性相同。這樣就破壞了AMI碼極性交替的規律,所以V脈沖為破壞脈沖,把V脈沖和前3個(gè)連“0”稱(chēng)為破壞節“000V”;
(3)為了使脈沖序列仍不含直流分量,則必須使相鄰的破壞點(diǎn)V脈沖極性交替;
(4)為了保證前面兩條件成立,必須使相鄰的破壞點(diǎn)之間有奇數個(gè)“1”碼。如果原序列中破壞點(diǎn)之間的“1”碼為偶數,則必須補為奇數,即將破壞節中的第一個(gè)“0”碼變?yōu)椤?”,用B脈沖表示。這時(shí)破壞節變?yōu)椤癇00V”形式。B脈沖極性與前一“1”脈沖極性相反,而B(niǎo)脈沖極性和V脈沖極性相同。
如:
NRZ碼:100001000011000011
AMI碼:-10000 +10000 -1+10000-1 +1
HDB3碼:-1000 -V +1000 +V -1+1 CB 00 -V +1 -1
雖然HDB3碼的編碼規則比較復雜,但譯碼卻比較簡(jiǎn)單。從上述原理看出:每一個(gè)破壞符號V總是與前一非0符號同極性(包括B在內)。這就是說(shuō),從收到的符號序列中可以容易地找到破壞點(diǎn)V,于是也斷定V符號及其前面的3個(gè)符號必是連0符號,從而恢復4個(gè)連0碼,再將所有-1變成+1后便得到原消息代碼[2]。
3 編解碼器設計
3.1 編碼器設計
由于VHDL不能處理負電平,只能面向“1”、“0”兩種狀態(tài),所以要對它的輸出進(jìn)行編碼,如表1所示。編碼的實(shí)現是根據HDB3編碼原理把二進(jìn)制碼編碼成兩路單極性的碼字輸出,之后經(jīng)過(guò)單雙變換模塊形成HDB3碼。在編碼過(guò)程中,要經(jīng)過(guò)連0檢測、破壞節判斷、破壞節間“1”的個(gè)數判斷、調整“1”的符號輸出等步驟,編碼部分可分為4個(gè)模塊,編碼流程如圖1所示[3]。

圖1編碼流程圖
在進(jìn)行HDB3編碼器的設計時(shí),需注意以下兩個(gè)問(wèn)題:
(1) 考慮將某些“0”改為“1”
用一個(gè)四位移位寄存器來(lái)對輸入的序列進(jìn)行檢測,當檢測到4個(gè)連“0”時(shí),將其第四個(gè)“0”改為“1”。再設置一個(gè)T觸發(fā)器來(lái)檢測兩個(gè)相鄰的破壞節之間“1”的個(gè)數,若T觸發(fā)器為“0”則說(shuō)明兩個(gè)相鄰的破壞節之間“1”的個(gè)數為偶數,需要將第2個(gè)破壞節的第一個(gè)“0”置“1”,若T觸發(fā)器為“1”,則說(shuō)明兩個(gè)相鄰的破壞節之間“1”的個(gè)數為奇數,第2個(gè)破壞節的第一個(gè)“0”不變。
(2) 正、負號的考慮
除了破壞節的V即“1”的符號與它前面最近的“1”的符號相同外,其他的“1”的符號都是正、負交替的。所以再設置一個(gè)T觸發(fā)器,當它檢測到“1”時(shí)就使DATA1翻轉。當然,這樣就不可避免地使破壞節的V的符號也出現翻轉,為了防止它的翻轉,用一個(gè)三位移位寄存器來(lái)跟蹤V碼,以保證V碼的符號不變(與它前面最近的“1”的符號相同)。
評論