《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的HDB3編解碼器設(shè)計(jì)
基于FPGA的HDB3編解碼器設(shè)計(jì)
微計(jì)算機(jī)信息
摘要: 實(shí)踐表明,運(yùn)用FPGA來實(shí)現(xiàn)NRZ碼到HDB3碼的轉(zhuǎn)換與采用專用集成電路CD22103相比,,不僅給調(diào)試帶來了方便,而且可以把編碼電路和解碼電路及其它電路集成在同一塊FPGA芯片中,減少了外接元件,提高了集成度,。該設(shè)計(jì)已成功應(yīng)用于網(wǎng)絡(luò)化集中照明控制系統(tǒng)中,。
關(guān)鍵詞: 開發(fā)工具 FPGA HDB3 編解碼器
Abstract:
Key words :

1 引言

HDB3(High Density Bipolar三階高密度雙極性)碼是在AMI碼的基礎(chǔ)上改進(jìn)的一種雙極性歸零碼,,它除具有AMI碼功率譜中無直流分量,,可進(jìn)行差錯自檢等優(yōu)點(diǎn)外,,還克服了AMI碼當(dāng)信息中出現(xiàn)連“0”碼時(shí)定時(shí)提取困難的缺點(diǎn),,而且HDB3碼頻譜能量主要集中在基波頻率以下,,占用頻帶較窄,,是ITU-TG.703推薦的PCM基群、二次群和三次群的數(shù)字傳輸接口碼型,因此HDB3碼的編解碼就顯得極為重要了[1],。目前,,HDB3碼主要由專用集成電路及相應(yīng)匹配的外圍中小規(guī)模集成芯片來實(shí)現(xiàn),但集成程度不高,,特別是位同步提取非常復(fù)雜,,不易實(shí)現(xiàn)。隨著可編程器件的發(fā)展,,這一難題得到了很好地解決,。

本文利用現(xiàn)代EDA設(shè)計(jì)方法學(xué)和VHDL語言及模塊化的設(shè)計(jì)方法,設(shè)計(jì)了適合于FPGA實(shí)現(xiàn)的HDB3編譯碼器的硬件實(shí)現(xiàn)方案,。不但克服了分立硬件電路帶來的抗干擾差和不易調(diào)整等缺陷,,而且具有軟件開發(fā)周期短,成本低,,執(zhí)行速度高,,實(shí)時(shí)性強(qiáng),升級方便等特點(diǎn),。

2 HDB3編解碼原理

要了解HDB3碼的編碼規(guī)則,,首先要知道AMI碼的構(gòu)成規(guī)則,AMI碼就是把單極性脈沖序列中相鄰的“1”碼(即正脈沖)變?yōu)闃O性交替的正,、負(fù)脈沖,。將“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碼的改進(jìn)型,它的編碼原理可簡述為,,在消息的二進(jìn)制代碼序列中:

(1)當(dāng)連“0”碼的個(gè)數(shù)不大于3時(shí),,HDB3編碼規(guī)律與AMI碼相同,,即“1”碼變?yōu)?ldquo;+1”、“-1”交替脈沖,;

(2)當(dāng)代碼序列中出現(xiàn)4個(gè)連“0”碼或超過4個(gè)連“0”碼時(shí),,把連“0”段按4個(gè)“0”分節(jié),即“0000”,,并使第4個(gè)“0”碼變?yōu)?ldquo;1”碼,,用V脈沖表示。這樣可以消除長連“0”現(xiàn)象,。為了便于識別V脈沖,,使V脈沖極性與前一個(gè)“1”脈沖極性相同。這樣就破壞了AMI碼極性交替的規(guī)律,,所以V脈沖為破壞脈沖,,把V脈沖和前3個(gè)連“0”稱為破壞節(jié)“000V”;

(3)為了使脈沖序列仍不含直流分量,,則必須使相鄰的破壞點(diǎn)V脈沖極性交替,;

(4)為了保證前面兩條件成立,必須使相鄰的破壞點(diǎn)之間有奇數(shù)個(gè)“1”碼,。如果原序列中破壞點(diǎn)之間的“1”碼為偶數(shù),,則必須補(bǔ)為奇數(shù),即將破壞節(jié)中的第一個(gè)“0”碼變?yōu)?ldquo;1”,,用B脈沖表示,。這時(shí)破壞節(jié)變?yōu)?ldquo;B00V”形式。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ī)則比較復(fù)雜,但譯碼卻比較簡單,。從上述原理看出:每一個(gè)破壞符號V總是與前一非0符號同極性(包括B在內(nèi)),。這就是說,從收到的符號序列中可以容易地找到破壞點(diǎn)V,,于是也斷定V符號及其前面的3個(gè)符號必是連0符號,,從而恢復(fù)4個(gè)連0碼,再將所有-1變成+1后便得到原消息代碼[2],。

3 編解碼器設(shè)計(jì)

3.1 編碼器設(shè)計(jì)

由于VHDL不能處理負(fù)電平,,只能面向“1”,、“0”兩種狀態(tài),,所以要對它的輸出進(jìn)行編碼,如表1所示,。編碼的實(shí)現(xiàn)是根據(jù)HDB3編碼原理把二進(jìn)制碼編碼成兩路單極性的碼字輸出,,之后經(jīng)過單雙變換模塊形成HDB3碼,。在編碼過程中,要經(jīng)過連0檢測,、破壞節(jié)判斷,、破壞節(jié)間“1”的個(gè)數(shù)判斷、調(diào)整“1”的符號輸出等步驟,,編碼部分可分為4個(gè)模塊,,編碼流程如圖1所示[3]。


                          
圖1  編碼流程圖

在進(jìn)行HDB3編碼器的設(shè)計(jì)時(shí),,需注意以下兩個(gè)問題:

(1) 考慮將某些“0”改為“1”
    
用一個(gè)四位移位寄存器來對輸入的序列進(jìn)行檢測,,當(dāng)檢測到4個(gè)連“0”時(shí),將其第四個(gè)“0”改為“1”,。再設(shè)置一個(gè)T觸發(fā)器來檢測兩個(gè)相鄰的破壞節(jié)之間“1”的個(gè)數(shù),,若T觸發(fā)器為“0”則說明兩個(gè)相鄰的破壞節(jié)之間“1”的個(gè)數(shù)為偶數(shù),需要將第2個(gè)破壞節(jié)的第一個(gè)“0”置“1”,,若T觸發(fā)器為“1”,,則說明兩個(gè)相鄰的破壞節(jié)之間“1”的個(gè)數(shù)為奇數(shù),第2個(gè)破壞節(jié)的第一個(gè)“0”不變,。

(2) 正,、負(fù)號的考慮

除了破壞節(jié)的V即“1”的符號與它前面最近的“1”的符號相同外,其他的“1”的符號都是正,、負(fù)交替的,。所以再設(shè)置一個(gè)T觸發(fā)器,當(dāng)它檢測到“1”時(shí)就使DATA1翻轉(zhuǎn),。當(dāng)然,,這樣就不可避免地使破壞節(jié)的V的符號也出現(xiàn)翻轉(zhuǎn),為了防止它的翻轉(zhuǎn),,用一個(gè)三位移位寄存器來跟蹤V碼,,以保證V碼的符號不變(與它前面最近的“1”的符號相同)。

本文在程序的實(shí)體中定義了2個(gè)輸入端口:時(shí)鐘,、偽隨機(jī)序列,,一個(gè)兩位的輸出數(shù)據(jù)(編碼后的輸出)。程序的結(jié)構(gòu)體中使用的是進(jìn)程語句,,共采用4個(gè)進(jìn)程,,分別完成判斷4連“0”位置并插入V、記相鄰V碼間1個(gè)數(shù),、跟蹤V碼位置及編碼輸出的功能,。敏感信號均選用的是時(shí)鐘信號,對于其任一變化都將同時(shí)啟動4個(gè)進(jìn)程,,并行執(zhí)行,。在程序中共使用了5個(gè)信號,,代表了電路的寄存器效果,配置到電路中也相當(dāng)于寄存器,。

3.2 解碼器設(shè)計(jì)

解碼設(shè)計(jì)是根據(jù)HDB3碼的特點(diǎn)首先檢測出極性破壞點(diǎn),,即找出4連零碼中添加V碼的位置(破壞點(diǎn)位置),其次去掉添加的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”就可以了,。
當(dāng)然“+1”,、“-1”、“0”還是由Data1,,Data0來表示,,那么就需要有兩個(gè)5位移位寄存器(C和D),Data0通過D,,Data1通過C,。通過D,C來檢測,,如果測到兩個(gè)移位寄存器分別為“10001”,、“0xxx0”或“10001”、“1xxx1”或“1001x”,、“1xx1x”或“1001x”,、“0xx0x”,數(shù)據(jù)輸出是將D里面的數(shù)據(jù)流輸出,。所以只要將D中所測到的以上數(shù)據(jù)分別改為“10000”,、“10000”、“0000x”,、“0000x”,,這樣就可以得到HDB3碼的解碼了。

4 仿真和實(shí)驗(yàn)結(jié)果分析

編譯碼器在QuartusII上仿真的波形分別如圖2和圖3所示。圖2中fen_clk為分頻后時(shí)鐘信號,,load 為使能信號,Q為偽隨機(jī)序列,,data為編碼輸出,。由于輸入的數(shù)據(jù)流經(jīng)過了5個(gè)寄存器,所以輸出延遲了4個(gè)時(shí)鐘脈沖周期,。但由于時(shí)鐘頻率很高,,所以影響不大。



圖2  編碼器時(shí)序仿真波形圖



圖3  解碼器仿真波形
把上述設(shè)計(jì)下載到Altera EP1C3T144C8芯片上,,并通過硬件調(diào)試,、測試,在示波器上得到偽隨機(jī)信號波形,、編碼波形和解碼波形分別如圖4和5所示,。其中,CH1為偽隨機(jī)信號,,CH2分別為編碼和解碼信號,。測試結(jié)果和時(shí)序仿真結(jié)果無失真。隨機(jī)信號輸入相對編碼信號輸出延遲了5個(gè)單位時(shí)鐘,。解碼信號延時(shí)了11個(gè)單位時(shí)鐘,。



圖2  編碼器時(shí)序仿真波形圖



圖5 偽隨機(jī)信號和解碼信號波形

5 結(jié)論

實(shí)踐表明,運(yùn)用FPGA來實(shí)現(xiàn)NRZ碼到HDB3碼的轉(zhuǎn)換與采用專用集成電路CD22103相比,不僅給調(diào)試帶來了方便,而且可以把編碼電路和解碼電路及其它電路集成在同一塊FPGA芯片中,減少了外接元件,提高了集成度,。該設(shè)計(jì)已成功應(yīng)用于網(wǎng)絡(luò)化集中照明控制系統(tǒng)中,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。