




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于vhdl的hdb3編譯碼器的設(shè)計 專業(yè): 姓名: 班級: 學號: 2011-12 目錄一、設(shè)計課題:2二、設(shè)計任務(wù)及要求:2三、使用設(shè)備2四、設(shè)計時間安排:2五、基本原理2六、hdb3碼的編、譯碼器的建模與實現(xiàn)36.1 hdb3碼的編碼規(guī)則36.2 基于vhdl的編碼器的建模及實現(xiàn)3 6.2.1 插v模塊的實現(xiàn)4 6.2.2插b模塊的實現(xiàn)5 6.2.3 編碼中單/雙極性轉(zhuǎn)換的實現(xiàn)8 6.2.4 單/雙極性轉(zhuǎn)換的硬件實現(xiàn)9 6.2.5 hdb3碼的編碼器仿真波形106.3 基于vhdl的譯碼器的建模及實現(xiàn)11 6.3.1 v碼檢測模塊11 6.3.2 扣v扣b模塊12 6.3.3 hdb3碼的譯碼器仿真波形13七、參考文獻13八、附錄138.1 附錄一 hdb3碼編碼器程序138.2 附錄二 hdb3碼譯碼器程序16一、設(shè)計課題:基于vhdl的hdb3編譯碼器的設(shè)計二、設(shè)計任務(wù)及要求:1用vhdl進行hdb3編譯碼器的建模與設(shè)計,完成程序設(shè)計、波形仿真與 下載測試。2. 正確實現(xiàn)hdb3編譯碼(雙極性電平可用二進制代碼表示)。3. 碼元速率可調(diào)。(選做)三、使用設(shè)備計算機、eda軟件、eda實驗箱。四、設(shè)計時間安排: 分析課題,完成編譯碼器的vhdl建模(16周周四周五);編碼器的vhdl編程與仿真(17周周一至周三)譯碼器的vhdl編程與仿真(17周周四周五,18周周一)整體下載及測試(18周周二)。設(shè)計總結(jié)及報告(18周周三)。五、基本原理1、hdb3碼是數(shù)字基帶傳輸中常用的碼型,具有無直流分量,低頻成分少, 在有長連0串時也能提取同步信號,缺點是編譯碼電路較復雜。 2、利用vhdl進行hdb3編譯碼器的建模與設(shè)計,并通過cpld/fpga來實現(xiàn), 能較好簡化電路設(shè)計。六、hdb3碼的編、譯碼器的建模與實現(xiàn) 6.1 hdb3碼的編碼規(guī)則 hdb3碼是ami碼的改進型,稱為三階高密度雙極性碼,它克服了ami碼的長連0串現(xiàn)象。hdb3碼的編碼規(guī)則為先檢查消息代碼(二進制)的連0串,若沒有4個或4個以上連0串,則按照ami碼的編碼規(guī)則對消息代碼進行編碼;若出現(xiàn)4個或4個以上連0串,則將每4個連0小段的第4個0變換成與前一非0符號(+1或-1)同極性的v符號,同時保證相鄰v符號的極性交替(即+1記為+v,-1記為-v);接著檢查相鄰v符號間非0符號的個數(shù)是否為偶數(shù),若為偶,則將當前的v符號的前一非0符號后的第1個0變?yōu)?b或-b符號,且b的極性與前一非0符號的極性相反,并使后面的非0符號從v符號開始再交替變化。 6.2 基于vhdl的編碼器的建模及實現(xiàn)對信號進行hdb3碼編碼時,先依據(jù)hdb3碼的編碼規(guī)則進行添加破壞符號“v”然后進行添加符號“b”操作,最后才進行單極性信號變成雙極性信號的轉(zhuǎn)換。hdb3碼的編碼模型如圖3.1所示。圖 6.1 hdb3碼編碼器模型如上圖:整個hdb3碼的編碼器包括3個功能部分:添加破壞符號“v”、添加符號“b”和單極性碼轉(zhuǎn)變成雙極性碼。信號處理的順序不能像編碼規(guī)則那樣:首先把代碼串變換成為ami碼,完成添加破壞符號“v”、添加符號“b”工作之后,其后的“+1”和“-1”的極性還要依據(jù)編碼規(guī)則的規(guī)定變換。這樣做需要大量的寄存器,同時電路結(jié)構(gòu)也變得復雜。因此本設(shè)計在此處把信號處理的順序變換一下:首先完成添加破壞符號“v”工作,接著執(zhí)行添加符號“b”功能,最后實現(xiàn)單極性變雙極性的信號輸出。這樣做的好處是輸入進來的信號和添加破壞符號“v”、添加符號“b”功能電路中處理的信號都是單極性信號,且需要的寄存器的數(shù)目可以很少。另外,如何準備識別電路中的“1”、“v”和“b”,這也是一個難點,因為“v”和“b”符號是人為標識的符號,但在電路中最終的表示形式還是邏輯電平“1”,同時quartus軟件也不能像hdb3碼的編碼規(guī)則那樣把代碼串變換成ami碼,這是因為quartus軟件不能處理帶負號的信號,因此在軟件中本設(shè)計還是利用雙相碼來表示。雙相碼的編碼規(guī)則如下:對每個二進制代碼分別利用兩個不同相位的二進制代碼去取代。例如:信息序列:110010雙相碼: 010100000100 6.2.1 插v模塊的實現(xiàn) 添加破壞符號“v”模塊的功能實際上就是對消息代碼里的四個連0串的檢測,即當出現(xiàn)四個連0串的時候,把第四個“0”變換成符號“v”(“v”可以是邏輯電平“1”),而在其他的情況下,則保持消息代碼的原樣輸出,同時為了區(qū)別代碼“1”、 “v”和“0”,在添加破壞符號“v”時,用“11”標識符號“v”,用“01”標識符號“1”,用“00”標識符號“0”。因此,添加破壞符號“v”的設(shè)計思想如下:首先判斷輸入的代碼是什么,如果輸入的符號是“0”碼,則接著判斷這是第幾個“0”碼,如果是第四個“0”碼,則把這個“0”碼變換成“v”碼。在其他的情況下,讓原碼照常輸 圖6.2插v符號的流程圖出。程序流程圖如圖6.2所示: 根據(jù)圖6.2的思想,完成hdb3碼編碼的程序?qū)崿F(xiàn)添加破壞符號“v”功能的程序,以下給出實現(xiàn)添加破壞符號“v”功能的關(guān)鍵代碼,具體程序見附錄一 add_v:process(clk,clr) -插入v符號進程 begin if(rising_edge(clk) then if(clr=1) then codeoutv=00; -用00代表0 count0 codeoutv=01; -用01代表1 count0 if(count0=3)then -當有4個連續(xù)0時插入v codeoutv=11; -用11代表v count0=0; else count0=count0+1; codeoutv codeoutv=00; count0=count0; end case; end if; end if; end process add_v;這個程序設(shè)計了一個計算器(count0),用來作為應(yīng)插v符號的標志。在進程(process)中,通過條件控制開關(guān)(case語句)完成插v功能。這里使用了一個技巧來實現(xiàn)流程的控制,即再選擇語句(case語句)中嵌套了條件判斷語句(if語句)來控制雙重條件判斷的執(zhí)行結(jié)果。假設(shè)輸入一串代碼,根據(jù)設(shè)計思想,輸入代碼與插入v符號之后的關(guān)系如下:6.2.2插b模塊的實現(xiàn)插“b”模塊的功能是為了保證附加“v”符號后的序列不破壞“極性交替反轉(zhuǎn)”造成的無直流特性,即當相鄰“v”符號之間有偶數(shù)個非0符號的時候,把后一小段的第一個“0”變換成一個非破壞符號“b”符號。如圖6.3為實現(xiàn)插b符號的流程圖。 圖6.3 插b符號流程圖 上圖中插b模塊式這個設(shè)計遇到的一個難點,因為它涉及到一個由現(xiàn)在事件的狀態(tài)決定過去事件狀態(tài)的問題。其次還有如何確定是1,還是v的問題。重下列程序中可以看到我們是如何解決這一難題的。 以下給出添加符號“b”模塊的部分程序,完整的程序見附錄一。 s0(0)=codeoutv(0); s1(0)=codeoutv(1); ds11: dff port map(s1(0),clk,s1(1);-調(diào)用庫中的d觸發(fā)器來實現(xiàn)延遲作用 ds01: dff port map(s0(0),clk,s0(1); ds12: dff port map(s1(1),clk,s1(2); ds02: dff port map(s0(1),clk,s0(2); ds13: dff port map(s1(2),clk,s1(3); ds03: dff port map(s0(2),clk,s0(3); bclk: clkb=not clk; add_b:process(clkb) -插入符號b進程 begin if(rising_edge(clkb) then if(codeoutv=11) then if(firstv=0) then count1=0; firstv=1; s1(4)=s1(3); s0(4)=s0(3); else if(count1=0) then -用10代表b s1(4)=1; s0(4)=0; count1=0; else s1(4)=s1(3); s0(4)=s0(3); count1=0; end if; end if; elsif(codeoutv=01) then count1=count1+1; s1(4)=s1(3); s0(4)=s0(3); else s1(4)=s1(3); s0(4)=s0(3); count1=count1; end if; end if; end process add_b; codeoutb=s1(4)&s0(4);處理難點的思路是:首先把碼元(經(jīng)插v處理過的)放入一個4位的移位寄存器里,再同步時鐘的作用下,同時進行是否插b的判決,等到碼元重移位寄存器里出來的時候,就可以決定是應(yīng)該變換成b符號,還是照原碼輸出。因此,再程序的結(jié)果中進行元件聲明(component declaration),調(diào)用庫里的d觸發(fā)器來實現(xiàn)延遲作用。為了使程序更清晰,用了元件例化語句(compoment instantiation),來說明信號的流向。要進行插b判決,首先要知道哪一個是v,從前面的程序中了解到,v已經(jīng)用11代替,1用01取代,從這里就表現(xiàn)出采用雙相碼的優(yōu)點,它輕易地解決了v和1的差別。根據(jù)這個設(shè)計思想,輸入代碼與插b后的代碼關(guān)系如下:6.2.3 編碼中單/雙極性轉(zhuǎn)換的實現(xiàn)根據(jù)hdb3碼的編碼規(guī)則,可知 “v”的極性是正負交替變換的,而余下的“1”和“b”看成為一體且是正負交替變換的,同時滿足“v”的極性與前面的非零碼極性一致。由此把“1”和“b”看成一組,而“v”單獨作為一組來做正負交替變換。流程圖如圖6.4所示。 圖6.4 單/雙極性轉(zhuǎn)換流程圖程序如下: output:process(clk) -單極性變雙極性進程 begin if(rising_edge(clk) then if(codeoutb=01)or(codeoutb=10)then -1 or b if(flag1b=1) then codeout=11; flag1b=0; else codeout=01; flag1b=1; end if; elsif(codeoutb=11) then -v if(flag1b=1) then codeout=01; else codeout=11; end if; else codeout=00; flag1b=flag1b; end if; end if;6.2.4 單/雙極性轉(zhuǎn)換的硬件實現(xiàn)以上程序輸出結(jié)果并不是+1、-1、0的多電平變化波形,而是單極性雙電平信號。事實上,以上程序輸出的是給單/雙極性轉(zhuǎn)換的硬件電路地址信號。利用一個四選一的數(shù)據(jù)選擇器cd74hc4052(圖6.5),可以再輸出端得到符合規(guī)則的+1、-1、0變化波形。(選擇器特性如表6.1所示) 圖6.5 cd74hc4052引腳圖表6.1 cd74hc4052的da轉(zhuǎn)換特性圖6.2.5 hdb3碼的編碼器仿真波形6.3 基于vhdl的譯碼器的建模及實現(xiàn)根據(jù)hdb3碼的編碼規(guī)則,v脈沖的極性必然和前面非0脈沖的極性一致。而當無v脈沖時,hdb3碼的脈沖是“+1”和“-1”交替變換出現(xiàn)的。而當連續(xù)出現(xiàn)兩個“+1”或“-1”時,若無誤碼時,則可知后一個一定是v脈沖。因而可從所接收的信碼中找到v碼,然后根據(jù)加取代節(jié)的原則,在v碼前面的三位代碼必然是取代碼,在譯碼時,需要全部復原為四個連“0”。只要找到v碼,不管v碼前面兩個碼元是“0”碼,還是3個“0”碼,只要把它們一律清零,就完成了扣v和扣b的功能,進而得到原來的二元信碼序列。因此可實現(xiàn)hdb3碼譯碼的模型如圖6.6所示:圖6.6 hdb3碼譯碼器模型如圖6.6所示,雙/單極性變換電路由兩個正負整流電路組成。正整流電路提取正電平碼部分,負整流電路提取負電平部分。v碼檢測電路包括+v碼檢測和-v碼檢測兩部分。根據(jù)編碼規(guī)則,v脈沖必然是同極性脈沖。當無v脈沖時,傳號脈沖+1和-1交替出現(xiàn)。當連續(xù)出現(xiàn)兩個+1或-1是,若無誤碼,則后一個一定是v脈沖。時鐘提取電路用于提取同步時鐘。扣v扣b電路再v脈沖和同步時鐘的控制下,完成扣v扣b的功能。由于雙/單極性變換電路涉及到雙極性信號,無法在fpga中實現(xiàn),需加外圍硬件電路。6.3.1 v碼檢測模塊 1)+v碼檢測 設(shè)從正整流電路輸出的信號為+b,從負整流電路輸出的信號為b。+v碼檢模塊-b的控制下,對輸入的+b進行檢測。當+b的上升沿到來時,對輸入的+b脈沖進行計數(shù),當計數(shù)值等于2時,輸出一個脈沖作為+v脈沖,同時計數(shù)器清零,而且在計數(shù)期間,一旦有-b信號為1電平時,立即對計算器清零,計算器從新重零開始計數(shù)。這是因為在兩個+b脈沖之間存在-b脈沖再hdb3碼中,是真正同極性的,于是就可以判定第二個+b脈沖實際上是+v碼,達到檢測+v碼的目的。如圖6.7 圖6.7 +v碼檢測模型2)-v碼檢測-v碼檢測原理同+v碼檢測原理相似。如圖6.8 圖6.8 -v碼檢測模型6.3.2 扣v扣b模塊用v碼檢測模塊所檢測出的v碼信號,去控制一個移位寄存器,若未碰到v脈沖,則整流輸出合成信號再時鐘的節(jié)拍下,順利通過移位寄存器,當碰到有v脈沖時,該v脈沖講使移位寄存器清零??紤]到四個連0,即v脈沖及其前面的三個碼元應(yīng)為0碼,所以,可設(shè)置四位的移位寄存器,當v碼清零時,同時將移位寄存器中的四位碼全變?yōu)?。不管是否有b脈沖,在此模塊中,一并清零,因而無需另設(shè)扣b電路。另外移位四位寄存器起到延時四位時鐘周期的作用,以使所檢測出的v脈沖與信號流中的v脈沖位置對齊,保證清零的準確性。扣v扣b模塊的框圖如圖6.9. 圖6.9 扣v扣b模塊 譯碼器程序見附錄二6.3.3 hdb3碼的譯碼器仿真波形七、參考文獻 1.eda技術(shù)實用教程潘松 科學出版社 2.基于cpld/fpga的數(shù)字通信系統(tǒng)建模與設(shè)計段吉海電子工業(yè)出版社八、附錄 8.1 附錄一 hdb3碼編碼器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity hdb3 isport(codein: in std_logic; clk : in std_logic;clr : in std_logic; hdb3 : out std_logic_vector(1 downto 0); codeout1: out std_logic;codeout2:out std_logic);end hdb3;architecture rtl of hdb3 issignal codeout: std_logic_vector(1 downto 0);signal count0 : integer:=0;signal codeoutv: std_logic_vector(1 downto 0);signal s0 : std_logic_vector(4 downto 0):=00000;signal s1 : std_logic_vector(4 downto 0):=00000;signal clkb : std_logic;signal count1 : integer range 1 downto 0;signal codeoutb: std_logic_vector(1 downto 0);signal flagv : integer range 1 downto 0;signal firstv : integer range 0 to 1;signal flag1b : integer range 1 downto 0;component dff -調(diào)用元件dff port (d : in std_logic; clk : in std_logic; q : out std_logic);end component;begin add_v:process(clk,clr) -插入v符號進程 begin if(rising_edge(clk) then if(clr=1) then codeoutv=00; -用00代表0 count0 codeoutv=01; -用01代表1 count0 if(count0=3)then -當有4個連續(xù)0時插入v codeoutv=11; -用11代表v count0=0; else count0=count0+1; codeoutv codeoutv=00; count0=count0; end case; end if; end if; end process add_v; s0(0)=codeoutv(0); s1(0)=codeoutv(1); ds11: dff port map(s1(0),clk,s1(1); -調(diào)用庫中的d觸發(fā)器來實現(xiàn)延遲作用 ds01: dff port map(s0(0),clk,s0(1); ds12: dff port map(s1(1),clk,s1(2); ds02: dff port map(s0(1),clk,s0(2); ds13: dff port map(s1(2),clk,s1(3); ds03: dff port map(s0(2),clk,s0(3); bclk: clkb=not clk; add_b:process(clkb) -插入符號b進程 begin if(rising_edge(clkb) then if(codeoutv=11) then if(firstv=0) then count1=0; firstv=1; s1(4)=s1(3); s0(4)=s0(3); else if(count1=0) then -用10代表b s1(4)=1; s0(4)=0; count1=0; else s1(4)=s1(3); s0(4)=s0(3); count1=0; end if; end if; elsif(codeoutv=01) then count1=count1+1; s1(4)=s1(3); s0(4)=s0(3); else s1(4)=s1(3); s0(4)=s0(3); count1=count1; end if; end if; end process add_b; codeoutb=s1(4)&s0(4); output:process(clk) -單極性變雙極性進程 begin if(rising_edge(clk) then if(codeoutb=01)or(codeoutb=10)then -1 or b if(flag1b=1) then codeout=11; flag1b=0; else codeout=01; flag1b=1; end if; elsif(codeoutb=11) then -v if(flag1b=1) then codeout=01; else codeout=11; end if; else codeout=00; flag1b=flag1b; end if; end if;hdb3=codeout; end process output; end rtl; 8.2 附錄二 hdb3碼譯碼器程序library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity hdb3_decode is port(out0:in std_logic; out1:in std_logic; cl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2010年東南大學復試
- 2025年進學生會筆試題及答案
- 2025年勞動任務(wù)測試題及答案
- 2025年大學雙機位考試題及答案
- 2025年海運項目測試題及答案
- 2025年自來水筆試題及答案
- 2025年理智型人格面試題及答案
- 2025年生物中考試題歷史及答案
- 2025年醫(yī)保服務(wù)面試試題及答案
- 2025年綿陽二診英語試題及答案
- crrt的治療與護理
- 高考小說閱讀強化訓練:孫犁小說專題(附答案解析)
- 互聯(lián)網(wǎng)汽車金融外文文獻翻譯
- 向云端二聲部五線正譜
- DC-DC反激變壓器計算
- 簡約寶貝成長檔案 兒童成長手冊A4版【空白可編輯內(nèi)容】
- 運用PDCA血透室導管感染率
- 移動機器人SLAM技術(shù) 課件 【ch04】移動機器人定位
- GB/T 24804-2023提高在用電梯安全性的規(guī)范
- 人教版PEP五年級英語上冊全冊課件
- 《田忌賽馬》數(shù)學課件
評論
0/150
提交評論