基于FPGA的HDB3碼編碼器優(yōu)化設(shè)計(jì)與分析
摘要:利用四進(jìn)程和結(jié)構(gòu)化設(shè)計(jì)兩種不同的VHDL程序設(shè)計(jì)方法,對(duì)HDB3編碼器進(jìn)行了設(shè)計(jì)、實(shí)現(xiàn)和功能分析。設(shè)計(jì)的兩種編碼器在Quartus Ⅱ7.2中進(jìn)行了功能分析,并且下載到EP2C5T144C6中實(shí)現(xiàn)了HDB3編碼轉(zhuǎn)換功能。分析與實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的兩種HDB3編碼器,具有好的編碼功能。其中,結(jié)構(gòu)化設(shè)計(jì)的HDB3編碼器對(duì)FPGA邏輯單元、寄存器的占用分別減少了18.5%和14.8%,具有較好的資源利用特性。
關(guān)鍵詞:HDB3編碼器;VHDL程序;邏輯單元;結(jié)構(gòu)化設(shè)計(jì)
HDB3碼具有無(wú)直流成分、低頻成分少和連續(xù)0最多不超過(guò)3個(gè)等明顯的優(yōu)點(diǎn),對(duì)信號(hào)的恢復(fù)十分有利,而成為CCITT協(xié)會(huì)推薦使用的基帶傳輸碼型之一。因此,針對(duì)HDB3編碼器的優(yōu)化設(shè)計(jì)具有重要的意義。在本文中,利用VHDL硬件描述語(yǔ)言設(shè)計(jì)了不同結(jié)構(gòu)的HDB3編碼器,在Quart usⅡ中對(duì)設(shè)計(jì)的HDB3碼的功能、特性進(jìn)行了分析。并在EP2C5T144C6中對(duì)設(shè)計(jì)進(jìn)行了實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的HDB3碼達(dá)到了編碼器功能要求。
1 HDB3碼編碼原理及實(shí)現(xiàn)
HDB3碼是AMI碼的改進(jìn)碼型,輸入碼組中如果出現(xiàn)4位連續(xù)位0,就用特定碼組來(lái)替代,稱(chēng)為三階高密度雙極性碼。它克服了AMI碼的長(zhǎng)0串現(xiàn)象。HDB3編碼的主要特點(diǎn)為:基帶信號(hào)無(wú)直流成分,且有很小的低頻成分;0串符號(hào)最多只有3個(gè)具有檢錯(cuò)能力,如果接收端信號(hào)1電平的交替規(guī)律被破壞,認(rèn)為出現(xiàn)了差錯(cuò);利于定時(shí)信息的提??;不受信源統(tǒng)計(jì)特性的影響。因此,HD83編碼被廣泛運(yùn)用于脈沖編碼調(diào)制的線(xiàn)路傳輸碼型。在對(duì)代碼編碼的時(shí)候,先不對(duì)輸入的代碼進(jìn)行極性變換,而是先檢測(cè)是否插入“V”,再檢測(cè)插“B”,這樣做就使得輸入進(jìn)來(lái)的信號(hào)和插“V”、插“B”功能電路中處理的信號(hào)都是單極性信號(hào),且需要的寄存器的個(gè)數(shù)很少。當(dāng)然,在檢測(cè)插入“V”較為簡(jiǎn)單,只需設(shè)計(jì)一個(gè)計(jì)數(shù)器記下連續(xù)0的個(gè)數(shù),出現(xiàn)4個(gè)連0時(shí)即可將第4個(gè)0用二元碼表示。而在插“B”時(shí),首先把信號(hào)寄存在寄存器里,同時(shí)設(shè)計(jì)一個(gè)計(jì)數(shù)器計(jì)下兩個(gè)“V”符號(hào)之間0的個(gè)數(shù),再由一個(gè)判偶電路來(lái)給寄存器發(fā)送是否插“B”的判決信號(hào),決定是否插入“B”,從而實(shí)現(xiàn)插“B”功能。至此,代碼全部都由雙相碼表示。最后,極性變換可以將原來(lái)的“1”碼和插入的“B”合在一起做極性變換,將插入的“V”單獨(dú)做極性變換,這樣就完成了HDB3碼的編碼。它的編碼模型如圖1所示。
要識(shí)別編碼中的“1”,“V”和“B”。在編碼中最終的表現(xiàn)形式還是邏輯電平“1”。解決的方法是利用雙相碼,將其用二進(jìn)制表示。雙相碼的編碼規(guī)則是:對(duì)每個(gè)二進(jìn)制代碼分別利用兩個(gè)具有兩個(gè)不相同相位的二進(jìn)制碼去取代。如:用10表示1,用00表示0等。
2 基于VHDL硬件描述語(yǔ)言的HDB3碼編碼器建模及程序設(shè)計(jì)
在設(shè)計(jì)中,根據(jù)HDB3編碼器的結(jié)構(gòu)模型和VHDL語(yǔ)言程序設(shè)計(jì)的特點(diǎn),采用進(jìn)程語(yǔ)句和元件例化語(yǔ)句實(shí)現(xiàn)HDB3碼編碼器的設(shè)計(jì)。其中,在采用進(jìn)程語(yǔ)句實(shí)現(xiàn)的設(shè)計(jì)中,主要是一個(gè)結(jié)構(gòu)體中包括4個(gè)進(jìn)程,分別是序列發(fā)生器、插入“V”、插入“B”和極性變換。而在該方法中,又分別使用了二進(jìn)制三位碼元和二進(jìn)制二位碼元來(lái)對(duì)HDB3碼進(jìn)行編碼。在元件例化語(yǔ)句中,主要分為5個(gè)文件,分別是序列發(fā)生器、插入“V”、插入“B”、極性變換以及頂層文件,各進(jìn)程之間通過(guò)信號(hào)傳遞編碼值,在編碼中也將采用2位二進(jìn)制來(lái)編碼。
2.1 四進(jìn)程三位編碼的HDB3編碼器程序設(shè)計(jì)
在該方法中,將用VHDL語(yǔ)言的四進(jìn)程語(yǔ)句描述方式來(lái)實(shí)現(xiàn)HDB3碼編碼器,分為4個(gè)進(jìn)程。首先設(shè)計(jì)一個(gè)序列發(fā)生器,產(chǎn)生輸入序列,作為HDB3碼編碼器的輸入。利用3位二進(jìn)制代碼對(duì)插入的V,B進(jìn)行編碼,用000表示0碼、010表示-1、110表示1、011表示-V,111表示+V、101表示+B、001表示-B。在插V和插B結(jié)束后,輸出代碼均變?yōu)橛?位二進(jìn)制編碼的序列。然后要將3位二進(jìn)制代碼進(jìn)行極性變換,輸出2位的二進(jìn)制編碼序列,分別表示+1,-1,0。
2.1.1 輸入序列發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)
首先,設(shè)計(jì)一個(gè)計(jì)數(shù)器,用來(lái)對(duì)產(chǎn)生序列的位數(shù)進(jìn)行控制。設(shè)計(jì)中,利用5位計(jì)數(shù)器“cnt”,其可以控制產(chǎn)生47位的輸入序列用以供后續(xù)的編碼器的仿真分析使用,產(chǎn)生的序列為:100001000011000000001。要求,序列發(fā)生器和HDB3碼編碼器均在同步時(shí)鐘脈沖上升沿的作用下工作,保證產(chǎn)生一個(gè)代碼就能迅速的輸入編碼器進(jìn)行編碼。
2.1.2 對(duì)輸入序列做插“V”的設(shè)計(jì)與實(shí)現(xiàn)
在插“V”符號(hào)時(shí),首先要判斷輸入的信號(hào)是1碼還是0碼,若輸入的是0碼,則接著判斷輸入的是第幾個(gè)0碼,如果是第4個(gè)0碼,則把這個(gè)0碼變換成V碼,否則,保持原碼輸出。在程序中將用兩個(gè)信號(hào)flag0和flag1來(lái)標(biāo)識(shí)V和非0碼的極性,并且flag0和flag1的初始值均為0。再設(shè)計(jì)一個(gè)計(jì)數(shù)器記錄下連0的個(gè)數(shù),用以判斷是否插入“V”。若flag0和flag1均為0,則說(shuō)明前-“V”或“非0碼”極性為負(fù),此時(shí)的“非0碼”或“V”極性為正,用110代替。
對(duì)于輸入序列的檢測(cè),如果第一個(gè)4連0之前有“1”碼,則第一個(gè)“1”碼的極性就由flag0的初值來(lái)確定,后邊的“1”碼也隨之確定,第一個(gè)V的極性也由前面的“-1”碼的極性確定,V碼的極性是自行交替,則后面的V碼極性也隨之確定;如果輸入的序列第一個(gè)4連0前面沒(méi)有“1”碼,則第一個(gè)V碼的極性由它的標(biāo)識(shí)信號(hào)firstv的初始值(程序中賦初值為0)確定。后邊的“1”碼和“V”碼的極性均由第一個(gè)V的極性確定。最后,插“V”后的輸出均為3位碼。
2.1.3 插入“B”的設(shè)計(jì)與實(shí)現(xiàn)
在該部分將借助4位的移位寄存器來(lái)實(shí)現(xiàn),使用元件例化語(yǔ)句D觸發(fā)器組成4位移位寄存器。根據(jù)HDB3碼的編碼原理,首先將插“V”后的代碼放入寄存器里,在同步時(shí)鐘的作用下同時(shí)進(jìn)行是否補(bǔ)“B”的判斷,等碼元從寄存器出來(lái)的時(shí)候,若需要補(bǔ)“B”,則把+B或-B的標(biāo)識(shí)碼直接賦值給移位寄存器的第4位;若不需要補(bǔ)“B”,則直接把移位寄存器的第3位送第4位照原碼輸出。
在設(shè)計(jì)中,用10標(biāo)識(shí)+1,用01標(biāo)識(shí)-1,用00標(biāo)識(shí)0。其中codeinout是用來(lái)觀察序列發(fā)生器產(chǎn)生的二進(jìn)制碼序列,codeout為HDB3碼的編碼輸出。波形仿真結(jié)果如圖2所示。
從圖2中可見(jiàn),輸出的編碼序列和編碼規(guī)則一致,說(shuō)明設(shè)計(jì)正確。
2.2 HDB3極性變換
在極性變換中,將使用四選一模擬開(kāi)關(guān)實(shí)現(xiàn)+1,0,-1的波形輸出。實(shí)現(xiàn)真正意義的HDB3碼的輸出,這里選用的是數(shù)字芯片CD4052來(lái)實(shí)現(xiàn)。
在單雙極性變換設(shè)計(jì)與實(shí)現(xiàn)部分,要實(shí)現(xiàn)將3位的編碼轉(zhuǎn)換為2位的編碼,也就是將前面的+1,-1,+V,-V,+B,-B,0轉(zhuǎn)換成用兩位來(lái)標(biāo)識(shí),這樣才能通過(guò)CD4052的兩個(gè)輸入端進(jìn)行不同的組合,從而選通不同的通道,實(shí)現(xiàn)HDB3碼的+1,-1,0三種電平的輸出。而轉(zhuǎn)換的方法和編碼時(shí)確定的極性是一致的,分別用10,01,00來(lái)標(biāo)識(shí)+1,-1,0。在數(shù)字示波器下觀測(cè)到的波形如圖3所示。
2.3 結(jié)構(gòu)化HDB3碼編碼器設(shè)計(jì)
在該設(shè)計(jì)中,將使用元件例化語(yǔ)句來(lái)實(shí)現(xiàn)HDB3碼編碼器。底層文件主要分為序列發(fā)生器、插“V”模塊、插“B”模塊、單雙極性變換模塊,加上頂層文件共5個(gè)模塊。在該設(shè)計(jì)中,用11標(biāo)識(shí)+1,01標(biāo)識(shí)-1,用00標(biāo)識(shí)0。其中codeinout是用來(lái)觀察序列發(fā)生器產(chǎn)生的二進(jìn)制代碼序列,做為HDB3碼編碼器的輸入序列,codeout為HDB3碼的編碼輸出。該設(shè)計(jì)運(yùn)用VHDL硬件描述語(yǔ)言的元件例化語(yǔ)句來(lái)實(shí)現(xiàn)HDB3碼編碼器的設(shè)計(jì),共一個(gè)頂層文件和4個(gè)底層文件。在編碼中,選用2位二進(jìn)制對(duì)HDB3碼編碼的插“V”和插“B”以及輸出進(jìn)行編碼,且用的均為非歸零碼來(lái)表示。對(duì)元件例化語(yǔ)句二位編碼的設(shè)計(jì)進(jìn)行波形仿真結(jié)果如圖4所示。
從圖4中可見(jiàn),輸出的編碼序列和編碼規(guī)則一致,說(shuō)明設(shè)計(jì)正確。
3 HDB3碼編碼在FPGA中實(shí)現(xiàn)的特性分析
選用cycloneⅡ系列EP2C5T144C6器件,利用QuartusⅡ7.2對(duì)兩種不同設(shè)計(jì)的HDB3編碼器進(jìn)行了分析。分析的主要內(nèi)容包括:邏輯單元的占用、寄存器的占用、工作速度及功耗等的比較。仿真之后,主要選擇了兩組結(jié)果進(jìn)行比較。分析結(jié)果如表1所示。從仿真結(jié)果可以看出,在結(jié)構(gòu)化設(shè)計(jì)中,編碼器總邏輯元件、專(zhuān)用寄存器使用與四進(jìn)程設(shè)計(jì)相比各減少了18.5%,14.8%,表明結(jié)構(gòu)化設(shè)計(jì)有利于減少器件資源的使用。
4 結(jié)語(yǔ)
根據(jù)實(shí)驗(yàn)和系統(tǒng)分析的結(jié)果,在FPGA中,利用VHDL語(yǔ)言設(shè)計(jì)HDB3編碼器是可行的。尤其是結(jié)合VHDL語(yǔ)言程序設(shè)計(jì)的特點(diǎn),利用不同的設(shè)計(jì)方式,可實(shí)現(xiàn)對(duì)HDB3編碼器的優(yōu)化設(shè)計(jì)。通過(guò)比較,在結(jié)構(gòu)化設(shè)計(jì)中,編碼器總邏輯元件、專(zhuān)用寄存器使用與四進(jìn)程設(shè)計(jì)相比各減少了18.5%,14.8%。因此,結(jié)構(gòu)化設(shè)計(jì)有利于減少器件資源的使用。