【正文】
現(xiàn)高電平,當(dāng)插“B”模塊輸出的“10”信號,高電平出現(xiàn)原來的高電平信號上,當(dāng)插“B”模塊輸出的“11”信號與當(dāng)插“B”模塊輸出的“01”信號情況相同。Use 。Entity hdb3poled2s isPort(clk : in std_logic。Plusout : out std_logic。 Architecture behave of hdb3poled2s is Signal parity :std_logic。 Begin Com=plusbin amp。 Process(clk) Begin If clk’event and clk=’1’ then Case is When “011”= Plusout=’0’。 Parity=not parity。 Minusout=’0’。出現(xiàn)“01”時,下次正/負電平信號發(fā)生交替 When “101”= Plusout=’1’。 Parity=parity。 Minusout=’1’。 出現(xiàn)“10”時,下次正/負電平信號不發(fā)生交替 When “111”= Plusout=’1’ Minusout=’1’。出現(xiàn)時,下次正/負電平信號發(fā)生交替 When “110”= Plusout=’1’。 Parity=not parity。 Minusout=’0’。 End case。 End process。仿真結(jié)果圖 HDB3雙單極性轉(zhuǎn)化仿真波形圖由上圖可以看出,出現(xiàn)“V”與前面的非“0”符號的極性相同,“1”與“B”符號的極性與前面的非“0”符號的極性相反,至此HDB3編碼器得到驗證。根據(jù)前面的HDB3編碼輸出“V”碼的極性與前面的非“0”碼的極性相同,當(dāng)FPGA檢測到相鄰2個非“0”符號極性相同時,就可以判斷出前非“0”符號為“V”符號。根據(jù)“V”碼與它前面的3位的寄存器的值則可以知道,當(dāng)3位數(shù)據(jù)都為“0”時,則“V”碼前的非零信號為基帶信號“1”,如果與“V”碼相鄰的前面2位寄存器的值為“0”,則“V”碼前的非零信號即為補信碼“B”。 HDB3譯碼器的譯碼流程 HDB3譯碼器的設(shè)計思路 根據(jù)HDB3碼的編碼規(guī)則,V脈沖的極性必然和前面非0脈沖的極性一致。而當(dāng)連續(xù)出現(xiàn)兩個“+1”或“1”時,若無誤碼時,則可知最后一個一定是V脈沖。只要找到V碼,不管V碼前面兩個碼元是“0”碼,還是3個“0”碼,只要把它們?nèi)壳辶悖屯瓿闪丝踁和扣B的功能,進而得到原來的二元信碼序列,: HDB3碼譯碼器模型框圖 V的檢測 經(jīng)過整流電路的處理,把HDB3碼分成兩列序列。同時對兩條脈沖進行檢驗,監(jiān)察任一條脈沖序列兩個相鄰脈沖之間的傳輸時間內(nèi),另一個脈沖序列是否有脈沖存在,若沒有脈沖存在,則說明受監(jiān)察的序列存在破壞符V,且為兩個相鄰脈沖的后一個脈沖。 扣V扣B 在上一節(jié)經(jīng)過V的檢測,若判斷出V的存在,就把V跟前三個碼都清零。 設(shè)計建模 HDB3譯碼器設(shè)計主要是根據(jù)HDB3編碼輸出“V”的符號的極性與前面的非“0”符號的極性相同,當(dāng)FPGA檢測到相連2個非“0”符號的極性相同時,就可以判斷出前面非“0”符號位符號“V”,據(jù)此把它連同前面3位的寄存器的值為“0”。 HDB3譯碼模塊連接圖 這個模塊的工作是把V碼、誤碼檢測模塊的輸出dataout的低位加到4位移位寄存器作延時輸出,對輸入進行分析,若是“10”,即有破壞符V, 把寄存器最后一位清零輸出,反之,則按原樣輸出。第五章 結(jié)論 本文主要是用FPGA來實現(xiàn)HDB3碼的編碼和譯碼器。由于HDB3碼是雙極性碼,而FPGA只能處理單極性。本文對此只作簡單介紹,主要對FPGA可實現(xiàn)的程序部分進行詳細分析敘述。 本設(shè)計的主要優(yōu)點在于充分利用了FPGA的技術(shù)優(yōu)勢,在編碼器中主要包括3個模塊即插“V”模塊、插“B”模塊、雙單極性轉(zhuǎn)換模塊,譯碼器只有一個模塊。 但由于利用EDA對電子系統(tǒng)進行設(shè)計的經(jīng)驗不多,本設(shè)計只實現(xiàn)對HDB3碼進行簡單的編譯功能,但整個設(shè)計程序顯得有點復(fù)雜。由于受現(xiàn)在所學(xué)的知識的限制,對EDA的展望待進一步作深入研究,通過學(xué)習(xí)與實踐,積累更多的知識與設(shè)計經(jīng)驗,把整個設(shè)計再進行功能的完善,再使邏輯算法更加簡化從而提高整個系統(tǒng)的效率。Use 。Entity hdb3plusv isPort(clk :in std_logic。 基帶信號輸入 Plusvout :out std_logic_vector(1 downto 0)。Architecture behave of hdb3plusv is Signal plusvregh : std_logic_vector(3 downto 0)。 Signal dataregn : std_logic_vector(2 downto 0)。 dataregn(2 downto 1)。 dataregn(2 downto 1)。 End process。 plusvregh(3 downto 1)。 plusvregh(3 downto 1)。 plusvregh(3 downto 1)。 plusvreg1(3 downto 1)。 plusvregh(3 downto 1)。 plusvreg1(3 downto 1)。End if。插“V”輸出進程Process(clk)Begin If clk’event and clk=’1’ then Plusvout=plusvregh(0) amp。 End if。End behave。Use 。Entity hdb3plusb isPort(clk : in std_logic。插“V”信號輸入 Plusbout : out std_logic_vector(1 downto 0)。 Architecture behave of hdb3plusb is Signal parity : std_logic。 Signal hdb3plusbregh : std_logic_vector(4 downto 0)。 Begin 對兩個連續(xù)“V”之間的非“0”符號進行奇偶判斷 parity為“0”表示兩個連續(xù)“V”之間的非“0”符號位偶數(shù)個,需要進行插“V”操作 parity為“1”表示兩個連續(xù)“V”之間的非“0”符號位奇數(shù)個,不需要進行插“V”操作Process(clk)BeginIf clk’event and clk=’1’ then If plusvin=”10” then Parity=’0’。End if。End process。 Hdb3plusbregh(4)=’1’。如果需要插“B”,則改變?nèi)ミ^第1位的值 Hdb3plusbregh(0)= hdb3plusbregh(1) Hdb3plusbreg1(4)=’0’。 Hdb3plusbreg1(2)= hdb3plusbreg1(3)。如果需要插“B”,則改變?nèi)ミ^第1位的值 Hdb3plusbreg1(0)= hdb3plusbreg1(1)。 hdb3plusbregh(4 downto 1)。 hdb3plusbregl(4 downto 1)。End if。Process(clk)Begin If clk’event and clk=’1’ then Plusbout(1)=hdb3plusbregh(0)。 End if。End process。Use 。Entity hdb3poled2s isPort(clk : in std_logic。Plusout : out std_logic。 Architecture behave of hdb3poled2s is Signal parity :std_logic。 Begin Com=plusbin amp。 Process(clk) Begin If clk’event and clk=’1’ then Case is When “011”= Plusout=’0’。 Parity=not parity。 Minusout=’0’。出現(xiàn)“01”時,下次正/負電平信號發(fā)生交替 When “101”= Plusout=’1’。 Parity=parity。 Minusout=’1’。 出現(xiàn)“10”時,下次正/負電平信號不發(fā)生交替 When “111”= Plusout=’1’ Minusout=’1’。出現(xiàn)時,下次正/負電平信號發(fā)生交替 When “110”= Plusout=’1’。 Parity=not parity。 Minusout=’0’。 End case。 End process。B HDB3譯碼器的VHDL完整程序library ieee。use 。plusin : in std_logic。dataout : out std_logic。architecture behave of hdb3dec issignal plusbuf : std_logic_vector(4 downto 0)。beginprocess(clk)if clk’event and clk=’1’ then判斷出正極性出現(xiàn)“V”符號,則還原出4個連“0” if plusin=’1’ and plusbuf(4 downto 1)”0001”and minusbuf(4 downto 1)=”0000” then plusbuf=”00001”。 minusbuf(4 downto 1)。 plusbuf(4 downto 1)。判斷出正極性出現(xiàn)“V”符號和“B”符號,則還原出4個連“0” Elsif plusin=’1’ and plusbuf(4 downto 2)=”001”And minusbuf(4 downto 2)=”000” then Minusbuf=minusin amp。 Plusbuf=”0000” amp。判斷出負極性出現(xiàn)“V”符號和“B”符號,則還原出4個連“0” Elsif minusin=’1’ and minusbuf(4 downto 2)=”001”And plusbuf(4 downto 2)=”000” then Plusbuf=plusin amp。 Minusbuf=”0000” amp。其他情況保持不變Else Plusbuf=plusin amp。 Minusbuf=minusin amp。End if。End process。ElseDataout=’0’。End if。End behave。感謝任老師,這篇論文的每個細節(jié)和每個數(shù)據(jù),都離不開您的細心指導(dǎo),你開朗的性格和寬容態(tài)度,幫助我能夠很快找到論文的切入點,使我不再那么不自信了,我從來都不相信自己能夠、可以寫這篇論文。一開始感覺自己寫起來還很順利,老師不定期的檢查時發(fā)現(xiàn)我的邏輯思維和還是很強的,讓人沒想到的是就在離答辯臨近的幾天才發(fā)現(xiàn)了自己的問題,首先是那個Quartusll軟件看起來很容易學(xué)會只要建一個工程,然后集成、編譯、仿真就可以了,但是當(dāng)把代碼寫進去進行編譯的時候才發(fā)現(xiàn)那個程序代碼老是錯的,不管怎么檢查都是錯的,而這個Quartusll軟件的話只要有一步錯了后面的就都不能弄出來。感謝我的室友們,從遙遠的家來到這個陌生的城市里,是你們和我共同維系著彼此之間姐妹般的感情,維系著寢室那份家的融洽。三年里,我們沒有紅過臉,沒有吵過嘴,沒有發(fā)生上大學(xué)前所擔(dān)心的任何不開心的事情。沒關(guān)系,各奔前程,大家珍重。感謝我的爸爸媽媽,養(yǎng)育之恩,無以回報,您們永遠健康快樂是我最大的