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