【正文】
000000000000……CODEOUT:0100000111000011010000011100001101000001……CODEIN: 11111111111111111111…… CODEOUT:0111011101110111011101110111011101110111……CODEIN: 00000000000001000000……CODEOUT:01000001110000110100000100110000000110100……CODEIN: 100001000011000011000010CODEOUT:010000000111000000110111010000011101110000110100~,其輸出的代碼與根據(jù)HDB3碼編碼原理算出來的代碼完全一致,滿足實(shí)時(shí)通信對(duì)延遲的要求。從實(shí)現(xiàn)的過程來看,基于EDA平臺(tái)上采用模塊化的設(shè)計(jì)的優(yōu)點(diǎn)是在于工作的過程中,可以把編輯的代碼下載到硬件平臺(tái)上直接校驗(yàn)其正確性從而節(jié)省了系統(tǒng)的開發(fā)時(shí)間,同時(shí)采用模塊化的設(shè)計(jì)便于查找出在編譯系統(tǒng)是發(fā)生的錯(cuò)誤,便于以后對(duì)系統(tǒng)進(jìn)行升級(jí)優(yōu)化。因而可從所接收的信碼中找到V碼,然后根據(jù)加取代節(jié)的原則,在V碼前面的三位代碼必然是取代碼,在譯碼時(shí),需要全部復(fù)原為四個(gè)連“0”。由前面分析可知,EDA軟件QUARTUSⅡ是不能在波形仿真中處理雙/單極性變換的,因此,本文采用一個(gè)外部硬件電路來實(shí)現(xiàn)雙/單極性的變換。由此可知當(dāng)輸入“+1”輸出的是01,輸入“1”時(shí)輸出的是10,輸入“0”時(shí)輸出的是00。 PROCESS(CLK,CLR) BEGIN IF(CLK39。139。039。039。039。 …………………… REG4=REG3。139。 REG4=REG3。 REG0=39。 END IF。在本譯碼程序中,由于需要根據(jù)現(xiàn)在狀態(tài)決定過去狀態(tài)的事件,為了實(shí)現(xiàn)這一個(gè)結(jié)果,本程序中設(shè)計(jì)了一個(gè)五位移位寄存器來寄存過去的狀態(tài)即將輸出的狀態(tài),為了輸入的是“+1”還是“1”和達(dá)到扣V扣B的功能,在本譯碼程序中設(shè)計(jì)了一個(gè)計(jì)“+1”計(jì)數(shù)器COUNT01和一個(gè)計(jì)“1”計(jì)數(shù)器COUNT10來對(duì)輸入的信號(hào)進(jìn)行計(jì)數(shù)判斷,最終達(dá)到對(duì)HDB3碼進(jìn)行譯碼的目的。039。039。當(dāng)輸入代碼為01時(shí),判斷計(jì)“+1”計(jì)數(shù)器是COUNT01否為2,即為偶數(shù),此段代碼前面計(jì)數(shù)器COUNT01計(jì)數(shù)到有奇數(shù)個(gè)“+1”,則再加上這個(gè)“+1”則為偶數(shù),所以此時(shí)對(duì)所有寄存器清0,并把移位寄存器的最高位賦值給輸出緩沖寄存器REG4。并且從QUARTUSⅡ的編譯時(shí)可知,此譯碼模塊的占用邏輯單元為10,對(duì)邏輯單元的占用率小于1%,占用引腳為5,這與編碼器引腳的占用一致,而對(duì)于存儲(chǔ)單元的占用為0,可知此譯碼器的資源的占用相當(dāng)少,便于以后的系統(tǒng)升級(jí)與優(yōu)化。此種設(shè)計(jì)方法就是把一個(gè)復(fù)雜的系統(tǒng)分成幾個(gè)部分,再把每部分劃分成若干子模塊,各模塊獨(dú)立進(jìn)行設(shè)計(jì),采用這種模塊化設(shè)計(jì),有利于提高工作效率。采用時(shí)序仿真的驗(yàn)證方法,基本可以保證設(shè)計(jì)的可靠性。本文基于FPGA的HDB3編/譯碼的建模與實(shí)現(xiàn)方法具有一定的通用性,可以用到其它基帶碼型的編/譯碼實(shí)現(xiàn)場(chǎng)合。衷心感謝百忙之中抽出時(shí)間評(píng)閱我的論文的各位老師,感謝他們?cè)u(píng)閱本文付出的辛勤勞動(dòng)。表示39。ENTITY ENHDB3 IS PORT(CODEIN : IN STD_LOGIC。END ENTITY ENHDB3。 SIGNAL COUNT1: INTEGER RANGE 1 DOWNTO 0。 SIGNAL S3: STD_LOGIC_VECTOR(1 DOWNTO 0)。 SIGNAL FIRST_1: STD_LOGIC。 Q: OUT STD_LOGIC)。139。 COUNT0=0。 01表示1 COUNT0=0。139。039。 WHEN OTHERS= CODEOUTV=00。 END CASE。 S0(0)=CODEOUTV(0)。 DS12: DFF PORT MAP(S1(1),CLK,S1(2))。 調(diào)元件DFF,即D觸發(fā)器 BCLK: CLKB=NOT CLK。)THEN IF(CODEOUTV=11)THEN IF(FIRSTV=0)THEN IF(FIRST_1=39。 S1(4)=S1(3)。)THEN FIRSTV=1。039。 S1(4)=S1(3)。 ELSE IF(COUNT1=0)THEN v之間的1為偶數(shù) S1(4)=39。 COUNT1=0。 END IF。 COUNT1=1。139。 END IF。 END IF。S0(4)。)THEN IF((CODEOUTB=01) OR (CODEOUTB=10))THEN 1/B IF(FLAGOB=0)THEN IF(FLAGOV=0)THEN CODEOUT=01。 ELSIF(FLAGOV=2)THEN CODEOUT=01。 FLAGOB=2。 FLAGOB/FLAGOV:0表示還未遇到V/B,1表示遇到奇數(shù)個(gè)V/B,2表示遇到偶數(shù)個(gè)V/B ELSIF(CODEOUTB=11)THEN IF(FLAGOV=0)THEN IF(FLAGOB=0)THEN CODEOUT=01。 ELSIF(FLAGOB=2)THEN CODEOUT=11。 FLAGOV=2。 FLAGOB/FLAGOV:0表示還未遇到V/B,1表示遇到奇數(shù)個(gè)V/B,2表示遇到偶數(shù)個(gè)V/B ELSE CODEOUT=00。 END IF。USE 。 CLR: IN STD_LOGIC。 SIGNAL COUNT01: INTEGER RANGE 1 DOWNTO 0。139。 COUNT10=0。039。039。 COUNT10=0。039。039。 REG0=39。 REG3=REG2。 COUNT10=0。039。039。 V END IF。 REG1=REG0。 ELSE COUNT01=1。039。039。039。039。039。139。 1 BEGIN PROCESS(CLK,CLR) BEGIN IF(CLK39。END ENTITY DEHDB3。ENTITY DEHDB3 IS PORT(HDB3_DATA: IN STD_LOGIC_VECTOR(1 DOWNTO 0)。END ARCHITECTURE RTL。 FLAGOV=FLAGOV。 FLAGOV=1。 END IF。 ELSIF(FLAGOB=1)THEN CODEOUT=01。 FLAGOB=1。 END IF。 ELSIF(FLAGOV=1)THEN CODEOUT=11。EVENT AND CLK=39。 END PROCESS ADD_B。 S1(4)=S1(3)。 S1(4)=S1(3)。 S0(4)=S0(3)。 ELSIF(CODEOUTV=01)THEN IF(COUNT1=0)THEN FIRST_1=39。 S0(4)=S0(3)。 S0(4)=39。 END IF。 ELSE COUNT1=0。139。 ELSE IF(COUNT0_S=39。)THEN COUNT1=0。EVENT AND CLKB=39。 DS13: DFF PORT MAP(S1(2),CLK,S1(3))。 DS11: DFF PORT MAP(S1(0),CLK,S1(1))。 END IF。 COUNT0_S=39。 CODEOUTV=00。 COUNT0=0。039。139。139。 BEGIN ADD_V: PROCESS(CLK,CLR) 添加破壞符號(hào)V程序 BEGIN IF(CLK39。 COMPONENT DFF 調(diào)元件DFF,即D觸發(fā)器 PORT(D: IN STD_LOGIC。 SIGNAL FLAGOV: INTEGER RANGE 2 DOWNTO 0。 SIGNAL S1: STD_LOGIC_VECTOR(4 DOWNTO 0):=00000。 SIGNAL COUNT0: INTEGER:=0。 CLR : IN STD_LOGIC。,00表示0,01表示1添加符號(hào)B時(shí)用00表示0,01表示1,10表示B最終輸出時(shí)是以11表示+1,00表示1,10表示0LIBRARY IEEE?;贔PGA的HDB3編譯碼的建模與實(shí)現(xiàn) 附錄一附錄一 HDB3碼編碼器完整源程序本程序在添加破壞符號(hào)V時(shí)用39。楊老師那嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,求實(shí)的科學(xué)精神和一絲不茍的工作作風(fēng)令我終生難忘。② 可以在VHDL的軟件QUARTUSⅡ上對(duì)HDB3碼的編譯碼代碼進(jìn)行調(diào)試,正確后才下載到硬件平臺(tái)上,節(jié)省了系統(tǒng)開發(fā)的成本。對(duì)于HDB3編/譯碼實(shí)現(xiàn)部分,在其編碼模塊的硬件電路中,本畢業(yè)設(shè)計(jì)采用CD74HC4052四選一數(shù)模選擇器來實(shí)現(xiàn),對(duì)于其譯碼模塊的硬件電路中,為了能夠滿足實(shí)時(shí)通信的要求,本畢業(yè)設(shè)計(jì)采用了AD790和SE5539這兩種高速的電壓比較器來實(shí)現(xiàn);在HDB3碼編/譯碼的軟件部分,使用EDA的硬件描述性語(yǔ)言VHDL對(duì)HDB3碼進(jìn)行代碼的編譯和仿真,從仿真的結(jié)果來看,其建模是正確的。從仿真結(jié)果來看,正確實(shí)現(xiàn)了HDB3碼的譯碼過程。~。039。039。 COUNT10=0。 DEHDB3=REG4。