5b6b碼的編碼仿真與實(shí)現(xiàn)課程設(shè)計(jì)報(bào)告_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  題 目:_ 5B6B編碼的仿真與實(shí)現(xiàn) __</p><p>  系 別:__ 電子信息與電氣工程系 __</p><p>  專 業(yè):___ 通信工程___ _______</p><p>  班 級:____ _

2、10通信2班_______ _</p><p>  學(xué) 號:_ _</p><p>  姓 名:__ __</p><p>  導(dǎo) 師:_____ ______ _ ___</p><p>  成 績:____________ ___

3、_________</p><p>  2013年 12月 07日</p><p>  《現(xiàn)代通信技術(shù)課程設(shè)計(jì)》</p><p><b>  目錄</b></p><p>  一、軟件硬件開發(fā)平臺(tái)簡介2</p><p>  1.1 Quartus2軟件簡述3</p><p&

4、gt;  1.2 FPGA系統(tǒng)開發(fā)流程簡介4</p><p>  1.2.1 電路設(shè)計(jì)4</p><p>  1.2.2 設(shè)計(jì)輸入4</p><p>  1.2.3 功能仿真5</p><p>  1.2.4 綜合優(yōu)化5</p><p>  1.2.5 綜合后仿真6</p><p>

5、  1.2.6 實(shí)現(xiàn)與布局布線6</p><p>  二、5B6B編碼仿真及其設(shè)計(jì)步驟6</p><p>  2.1 5B6B編碼原理6</p><p>  2.1.1 5B6B編碼原理7</p><p>  2.1.2 5B6B碼表設(shè)計(jì)7</p><p>  2.2 5B6B編碼模塊設(shè)計(jì)8</p&g

6、t;<p>  2.2.1 編碼器的工作原理8</p><p>  2.2.2 編碼電路的電路模塊劃分9</p><p>  2.3 5B6B編碼器在FPGA中的實(shí)現(xiàn)9</p><p>  2.4 整體電路的仿真實(shí)現(xiàn)11</p><p>  2.4.1 整體電路的頂層圖11</p><p>  

7、2.4.2 整體電路的仿真11</p><p><b>  三、結(jié)束語11</b></p><p><b>  參考文獻(xiàn)11</b></p><p>  5B6B碼編碼的仿真與實(shí)現(xiàn)</p><p>  摘要:在數(shù)字通信系統(tǒng)中,數(shù)字光纖通信由于其本身的優(yōu)點(diǎn)得到越來越廣泛的應(yīng)用。數(shù)字光纖通信系統(tǒng)中

8、,從電端機(jī)傳輸過來的電信號均要結(jié)合數(shù)字光纖通信傳輸?shù)奶攸c(diǎn)經(jīng)過線路碼型的轉(zhuǎn)換。通過線路碼型的轉(zhuǎn)變平衡數(shù)字碼流中的“0”和“1”碼字,從而避免碼流中出現(xiàn)長“0”或者長“1”的現(xiàn)象。在數(shù)字光纖通信系統(tǒng)中比較常用的線路碼型就是mBnB碼型,mBnB線路碼型的最大優(yōu)點(diǎn)就是最大相同碼元連碼和少、定時(shí)信息豐富、并且有簡單成熟的誤碼監(jiān)測與碼組同步的方法。</p><p>  關(guān)鍵詞:5B6B編碼; VHDL語言; FPGA ;

9、Quartus2 ;仿真;</p><p><b>  正文:</b></p><p>  一、軟件硬件開發(fā)平臺(tái)簡介</p><p>  由于5B6B碼編碼的設(shè)計(jì)與仿真是要軟件做支持和要硬件做平臺(tái)。所以在設(shè)計(jì)之前,先介紹一下常用軟件Quartus2的使用,接著在介紹一下FPGA系統(tǒng)開發(fā)過程。方便下面的說明。</p><p&g

10、t;  1.1 Quartus2軟件簡述</p><p>  圖1 Quartus2軟件界面</p><p>  Quartus II 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整P

11、LD設(shè)計(jì)流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。Quartus II支持Altera的IP核,含LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三放EQ

12、uartus II 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDLDA工具。此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上</p><p>  Altera的Quartus II可編程邏輯軟件屬于第四代PLD開發(fā)平臺(tái)。該平臺(tái)支持一個(gè)工作組環(huán)境下的設(shè)計(jì)要求,

13、其中包括支持基于Internet的協(xié)作設(shè)計(jì)。Quartus平臺(tái)與Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供應(yīng)商的開發(fā)工具相兼容。改進(jìn)了軟件的LogicLock模塊設(shè)計(jì)功能,增添 了FastFit編譯選項(xiàng),推進(jìn)了網(wǎng)絡(luò)編輯性能,而且提升了調(diào)試。支持 MAX7000/MAX3000等乘積項(xiàng)器件QuartusⅡ軟件包是MAX+plusⅡ的升級版本,Altera公司

14、的第四代開發(fā)軟件。其提供了一個(gè)完整高效的設(shè)計(jì)環(huán)境,非常適應(yīng)具體的設(shè)計(jì)需要。QuartusⅡ提供了方便的設(shè)計(jì)輸入方式、快速的編譯和直接易懂的器件編程。能夠支持邏輯門數(shù)在百萬門以上的邏輯器件的開發(fā),并且為第三方工具提供了無縫接口。QuartusⅡ支持的器件有:Stratix Ⅱ、Stratix GX、Stratix、Mercury、MAX3000A、MAX 7000B、MAX 7000S、MAX 7000AE、MAX Ⅱ、FLEX6000、

15、FLEX</p><p>  1.2 FPGA系統(tǒng)開發(fā)流程簡介</p><p>  由于5B6B碼譯碼的設(shè)計(jì)與FPGA系統(tǒng)的設(shè)計(jì)有相似之處,所以在這里對FPGA系統(tǒng)的開發(fā)流程做簡要介紹。</p><p>  1.2.1 電路設(shè)計(jì)</p><p>  在系統(tǒng)設(shè)計(jì)之前,首先要進(jìn)行的是方案論證、系統(tǒng)設(shè)計(jì)和FPGA芯片選擇等準(zhǔn)備工作。系統(tǒng)工程師根據(jù)任

16、務(wù)要求,如系統(tǒng)的指標(biāo)和復(fù)雜度,對工作速度和芯片本身的各種資源、成本等方面進(jìn)行權(quán)衡,選擇合理的設(shè)計(jì)方案和合適的器件類型。一般都采用自頂向下的設(shè)計(jì)方法,把系統(tǒng)分成若干個(gè)基本單元,然后再把每個(gè)基本單元?jiǎng)澐譃橄乱粚哟蔚幕締卧?,一直這樣做下去,直到可以直接使用EDA元件庫為止。 </p><p>  1.2.2 設(shè)計(jì)輸入 </p><p>  設(shè)計(jì)輸入是將所設(shè)計(jì)的系統(tǒng)或電路以開發(fā)軟件要求的某種形式

17、表示出來,并輸入給EDA工具的過程。常用的方法有硬件描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程芯片發(fā)展的早期應(yīng)用比較廣泛,它將所需的器件從元件庫中調(diào)出來,畫出原理圖。這種方法雖然直觀并易于仿真,但效率很低,且不易維護(hù),不利于模塊構(gòu)造和重用。更主要的缺點(diǎn)是可移植性差,當(dāng)芯片升級后,所有的原理圖都需要作一定的改動(dòng)。目前,在實(shí)際開發(fā)中應(yīng)用最廣的就是HDL語言輸入法,利用文本描述設(shè)計(jì),可以分為普通HDL

18、和行為HDL。普通HDL有ABEL、CUR等,支持邏輯方程、真值表和狀態(tài)機(jī)等表達(dá)方式,主要用于簡單的小型設(shè)計(jì)。而在中大型工程中,主要使用行為HDL,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣與電子工程師協(xié)會(huì)(IEEE)的標(biāo)準(zhǔn),其共同的突出特點(diǎn)有:語言與芯片工藝無關(guān),利于自頂向下設(shè)計(jì),便于模塊的劃分與移植,可移植性好,具有很強(qiáng)的邏輯描述和仿真功能,而且輸入效率很高。</p><p>  1

19、.2.3 功能仿真 </p><p>  功能仿真,也稱為前仿真,是在編譯之前對用戶所設(shè)計(jì)的電路進(jìn)行邏輯功能驗(yàn)證,此時(shí)的仿真沒有延遲信息,僅對初步的功能進(jìn)行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關(guān)心的輸入信號組合成序列),仿真結(jié)果將會(huì)生成報(bào)告文件和輸出信號波形,從中便可以觀察各個(gè)節(jié)點(diǎn)信號的變化。如果發(fā)現(xiàn)錯(cuò)誤,則返回設(shè)計(jì)修改邏輯設(shè)計(jì)。常用的工具有Model Tech公司的Model

20、Sim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。 </p><p>  1.2.4 綜合優(yōu)化 </p><p>  所謂綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。綜合優(yōu)化根據(jù)目標(biāo)與要求優(yōu)化所生成的邏輯連接,使層次設(shè)計(jì)平面化,供FPGA布局布線軟件進(jìn)行實(shí)現(xiàn)。就目前的層次來看,綜合優(yōu)化(Synthesis)是指將設(shè)計(jì)輸入編譯成

21、由與門、或門、非門、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,而并非真實(shí)的門級電路。真實(shí)具體的門級電路需要利用FPGA制造商的布局布線功能,根據(jù)綜合后生成的標(biāo)準(zhǔn)門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生。為了能轉(zhuǎn)換成標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表,HDL程序的編寫必須符合特定綜合器所要求的風(fēng)格。由于門級結(jié)構(gòu)、RTL級的HDL程序的綜合是很成熟的技術(shù),所有的綜合器都可以支持到這一級別的綜合。常用的綜合工具有Synplicity公司的Synplify/Synplify

22、Pro軟件以及各個(gè)FPGA廠家自己推出的綜合開發(fā)工具。 </p><p>  1.2.5 綜合后仿真 </p><p>  綜合后仿真檢查綜合結(jié)果是否和原設(shè)計(jì)一致。在仿真時(shí),把綜合生成的標(biāo)準(zhǔn)延時(shí)文件反標(biāo)注到綜合仿真模型中去,可估計(jì)門延時(shí)帶來的影響。但這一步驟不能估計(jì)線延時(shí),因此和布線后的實(shí)際情況還有一定的差距,并不十分準(zhǔn)確。目前的綜合工具較為成熟,對于一般的設(shè)計(jì)可以省略這一步,但如果在布局

23、布線后發(fā)現(xiàn)電路結(jié)構(gòu)和設(shè)計(jì)意圖不符,則需要回溯到綜合后仿真來確認(rèn)問題之所在。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。 </p><p>  1.2.6 實(shí)現(xiàn)與布局布線 </p><p>  實(shí)現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,布局布線是其中最重要的過程。布局將邏輯網(wǎng)表中的硬件原語和底層單元合理地配置到芯片內(nèi)部的固有硬件結(jié)構(gòu)上,并且往往需要在速度最優(yōu)和面積最優(yōu)之間作出

24、選擇。布線根據(jù)布局的拓?fù)浣Y(jié)構(gòu),利用芯片內(nèi)部的各種連線資源,合理正確地連接各個(gè)元件。目前,F(xiàn)PGA的結(jié)構(gòu)非常復(fù)雜,特別是在有時(shí)序約束條件時(shí),需要利用時(shí)序驅(qū)動(dòng)的引擎進(jìn)行布局布線。布線結(jié)束后,軟件工具會(huì)自動(dòng)生成報(bào)告,提供有關(guān)設(shè)計(jì)中各部分資源的使用情況。由于只有FPGA芯片生產(chǎn)商對芯片結(jié)構(gòu)最為了解,所以布局布線必須選擇芯片開發(fā)商提供的工具。 </p><p>  二、5B6B編碼仿真及其設(shè)計(jì)步驟</p>&

25、lt;p>  在電力系統(tǒng)通信中,數(shù)字光纖通信由于其本身的優(yōu)點(diǎn)得到越來越廣泛的應(yīng)用。數(shù)字光纖通信系統(tǒng)中,從電端機(jī)傳輸過來的電信號均要結(jié)合數(shù)字光纖通信傳輸?shù)奶攸c(diǎn)經(jīng)過線路碼型的轉(zhuǎn)換。通過線路碼型的轉(zhuǎn)變平衡數(shù)字碼流中的“0”和“1”碼字,從而避免碼流中出現(xiàn)長“0”或者長“1”的現(xiàn)象。在數(shù)字光纖通信系統(tǒng)中比較常用的線路碼型就是mBnB碼型,mBnB線路碼型的最大優(yōu)點(diǎn)就是最大相同碼元連碼和少、定時(shí)信息豐富、并且有簡單成熟的誤碼監(jiān)測與碼組同步的

26、方法。</p><p>  2.1 5B6B編碼原理</p><p>  5B6B編碼,簡單的講就是將5B的數(shù)據(jù)怎樣變成是6B的數(shù)據(jù)。5B6B編碼的實(shí)現(xiàn)方案主要有兩種:用MATLAB軟件或硬件描述語言實(shí)現(xiàn)。這里選擇用FPGA實(shí)現(xiàn)。</p><p>  2.1.1 5B6B編碼原理</p><p>  mBnB碼的構(gòu)成方法就是:首先將要編碼的二

27、進(jìn)制碼流每m個(gè)碼元分成一組,然后在每個(gè)碼組的時(shí)隙內(nèi)按一定編碼規(guī)則選擇一個(gè)相應(yīng)的n位碼組代替原m位碼組。大多數(shù)的mBnB碼都采用兩種編碼模式,以便更換其中數(shù)字和d較大的碼組。5B6B碼型有很多種組成方法,按照CCITT的建議,本文采用是碼表5B6B-5,這個(gè)碼表取數(shù)字和d=0的碼組20個(gè),而d=±2碼組各取13個(gè)。這樣在5B6B碼流中相同數(shù)字碼元連碼和小于5,數(shù)字連碼和變差小于3。</p><p>  2

28、.1.2 5B6B碼表設(shè)計(jì)</p><p><b>  碼表設(shè)計(jì)的原則是:</b></p><p> ?、?“0”碼和“1”碼出現(xiàn)的概率相等</p><p> ?、?減小最大同符號連續(xù)數(shù)的數(shù)目</p><p>  Ⅲ 選取游程差值D值小的碼組</p><p>  為了達(dá)到以上設(shè)計(jì)目標(biāo),引入模式

29、概念。6B碼有模式1和模式2。定義模式1為正,模式2為負(fù);模式1和模式2交替出現(xiàn)。設(shè)計(jì)的碼表為:</p><p><b>  表1 5B6B碼表</b></p><p>  2.2 5B6B編碼模塊設(shè)計(jì)</p><p>  2.2.1 編碼器的工作原理</p><p>  5B6B碼型的編碼電路包括串/并變換電路、緩存電

30、路、編碼電路、并/串變換、變頻器等部分,如下圖所示:</p><p><b>  圖2 編碼原理圖</b></p><p>  編碼電路的工作原理是本地晶振產(chǎn)生一個(gè)標(biāo)準(zhǔn)的時(shí)鐘,用變頻器產(chǎn)生供譯碼電路和輸出電路工作的時(shí)鐘,他們之間的關(guān)系是 。緩存器把輸入的五位碼元保存起來作為編碼器的輸入,在編碼器電路中,按照議定的5B6B-5碼表來產(chǎn)生相應(yīng)的六位碼元。這六位碼元在6B時(shí)

31、鐘脈沖的驅(qū)動(dòng)下通過并/串變換電路來輸出。</p><p>  2.2.2 編碼電路的電路模塊劃分</p><p>  在實(shí)際設(shè)計(jì)中,應(yīng)結(jié)合實(shí)際和VHDL語言的描述特性,可把編碼電路劃分為以下模塊。它們分別是:串并變換模塊、編碼模塊、并串變換模塊、序列生成模塊和其他相關(guān)模塊(緩沖電路設(shè)計(jì)等配套模塊)。以下重點(diǎn)介紹前四模塊的設(shè)計(jì)思路,后幾個(gè)模塊會(huì)給出程序。</p><p&g

32、t;  (1) 序列產(chǎn)生模塊 該模塊首先通過按鍵cout控制,當(dāng)cout為0時(shí)清零,cout為2時(shí)輸出序列一個(gè)24位的序列,由于在設(shè)計(jì)時(shí)采用了循環(huán)技術(shù),又避免了信號的重疊和覆蓋 ,所以將產(chǎn)生所需要的6B序列??梢酝ㄟ^按鍵的值來控制輸出的序列值。</p><p> ?。?)串并變換模塊[7]的主要功能是將串行輸入的碼流并行輸出。對于6B碼流來說,在進(jìn)行查表之前必須要先將其轉(zhuǎn)換成6BITS每組的并行碼流,然后把并行

33、的6B碼組收集起來,進(jìn)行查表操作。對于5B碼流,即為轉(zhuǎn)換成5BITS每組的并行碼流。</p><p> ?。?)編碼模塊主要負(fù)責(zé)輸入的并行碼組的編碼。</p><p> ?。?)并串變換模塊的主要功能是將并行的碼流串行輸出,具體功能和實(shí)現(xiàn)方法與串并變換模塊的功能相近,在此不再說明了。</p><p>  2.3 5B6B編碼器在FPGA中的實(shí)現(xiàn)</p>

34、<p>  在quartus2里面用VHDL語言來設(shè)計(jì)5B6B碼的編碼器,采用了由頂向下的設(shè)計(jì)方法(參見圖3中的b5b6_code元件圖),在這個(gè)5B6B編碼器中,data_in表示碼流的輸入,clk_5b、clk_6b分別是作為5b、6b碼時(shí)鐘脈沖的輸入信號,reset信號是系統(tǒng)的復(fù)位信號,data_out是編碼后碼流的輸出。用VHDL語言描述的時(shí)候,里面的模塊又可分成幾個(gè)進(jìn)程(process):第一個(gè)process處理輸

35、入碼流的移位以及主要的復(fù)位功能,相當(dāng)于編碼原理中的串/并變換電路以及緩存電路;第二個(gè)process進(jìn)程處理碼流的編碼功能,相當(dāng)于原理中的編碼電路,在這個(gè)process中由于存在模式的轉(zhuǎn)換的問題,所以定義了一個(gè)模式標(biāo)志位(model_state),無論在模式1還是在模式2下,當(dāng)碼組的數(shù)字和d=0時(shí),model_state不會(huì)改變,如果碼組的數(shù)字和d=±2的時(shí)候,那么就改變model_state的值,從而實(shí)現(xiàn)數(shù)字和±2的

36、相互更替,這樣就保證了碼字“0”和碼字“1”的平衡;第三個(gè)process處理碼組的輸出,相當(dāng)于原理中的并/串變換電路。</p><p>  圖3 b5b6_code元件圖</p><p>  quartus2下編碼器的仿真波形圖如下所示:</p><p>  圖4 編碼器的仿真波形圖</p><p>  仿真的時(shí)候采取了100MHz的clk時(shí)

37、鐘信號,用altpll來產(chǎn)生用于編碼器的5B信號的時(shí)鐘clk_5b和用于輸出六位碼流的時(shí)鐘clk_6b,其中產(chǎn)生了55ns的延時(shí),信號的輸入是在80ns才輸入的,那么就產(chǎn)生了怎么樣來判斷什么時(shí)刻是數(shù)據(jù)傳輸?shù)拈_始,為了方便仿真,本設(shè)計(jì)采用了第一輸入11111,這樣只要輸入的數(shù)據(jù)中有一個(gè)不是0,那么就開始數(shù)據(jù)的傳輸和處理。從圖中可以得出編碼器的輸出波形bianma_out符合編碼的要求。</p><p>  2.4

38、整體電路的仿真實(shí)現(xiàn)</p><p>  2.4.1 整體電路的頂層圖</p><p>  圖5 整體電路的頂層圖</p><p>  2.4.2 整體電路的仿真</p><p>  仿真結(jié)果如下圖所示:</p><p>  圖6 整體電路的仿真波形圖</p><p><b>  三、結(jié)

39、束語</b></p><p>  本文介紹一種簡單的5B6B編碼方法,并利用VHDL 語言實(shí)現(xiàn)了5B6B編碼譯碼的全數(shù)字設(shè)計(jì),具有了編碼譯碼的最基本的功能,今后的改進(jìn)就是在此基礎(chǔ)上改進(jìn)同步信號的提取以及誤碼的監(jiān)測,讓這個(gè)設(shè)計(jì)更加完善。</p><p>  第一次采用FPGA對5B6B碼型來編碼,全部由 Verilog編程實(shí)現(xiàn),整個(gè)設(shè)計(jì)已通過Quartus2的功能仿真和時(shí)序仿真的

40、驗(yàn)證。</p><p>  本次的課程設(shè)計(jì)是第一次進(jìn)行一個(gè)大的系統(tǒng)進(jìn)行設(shè)計(jì),對于我們來說,還是頗有難度的。在最開始選擇是用matlab還是vhdl語言進(jìn)行設(shè)計(jì)時(shí),我們選擇使用VHDL語言進(jìn)行這次課程設(shè)計(jì),硬件描述語言自頂向下的設(shè)計(jì)方式優(yōu)勢很多。在實(shí)驗(yàn)中也遇到了一些小的問題,最終和同伴、老師探討,疑問得以解決,在此感謝熱心的同伴們和不厭其煩的老師對我們的幫助!</p><p><b&g

41、t;  參考文獻(xiàn)</b></p><p>  [1]李勇權(quán), 劉永強(qiáng), 何云狀, 樊建明.一種基于FPGA的5B6B編譯碼的實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息 , 2007,(14)</p><p>  [2] 張少鋒, 楊章順, 戴琦, 齊恒, 冉立新. 光纖數(shù)字通信系統(tǒng)5B6B編譯碼的FPGA實(shí)現(xiàn)[J]. 光通信技術(shù) , 2004,(12)</p><p>

42、  [3] 劉增基,周洋溢,胡遼林,周綺麗. 光纖通信 (第二版) [M]. 西安:西安電子科技大學(xué)出版社,2008.12 </p><p>  [4] 劉紹漢,劉新民,林杜生. VHDL芯片設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2004.</p><p>  [5] 南利平,李光華,張晨燕,王亞飛. 通信原理簡明教程:第二版 [M]. 北京:清華大學(xué)出版社,2007.8.</p>

43、;<p>  [6] 楊祥林. 光纖通信系統(tǒng)[M]. 北京:國防工業(yè)出版社,2000.1.</p><p><b>  附錄:程序代碼</b></p><p>  五分頻器五分頻:序列發(fā)生器的輸入時(shí)鐘脈沖五分頻從而可以實(shí)現(xiàn)每輸入5BIT的串行信號就同步轉(zhuǎn)換輸出出五位的并行信號實(shí)現(xiàn)時(shí)鐘信號的同步。 </p><p><b>

44、;  具體程序如下:</b></p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all; </p><p>  entity cnt5 is </p><p

45、>  port(clk5:in std_logic; </p><p>  newclk1:out std_logic); </p><p><b>  end; </b></p><p>  architecture exam of CNT5 is </p><p>  signal q:integer rang

46、e 0 to 4; </p><p>  signal temp: std_logic; </p><p>  begin process(clk5) </p><p><b>  begin </b></p><p>  if clk5'event and clk5='1' then --表

47、示檢測clock的上升沿 </p><p>  if q=4 then </p><p>  q<=0; temp<='1'; </p><p>  else q<=q+1;temp<='0'; </p><p><b>  end if; </b></p&

48、gt;<p>  end if; </p><p>  end process; </p><p>  newclk1<=temp; --newclk1是用于五串變五并模塊和編碼部分的控制時(shí)鐘 </p><p>  end exam; </p><p>  串并轉(zhuǎn)換:5位串變并用循環(huán)移位實(shí)現(xiàn)Clk0來一次有效,Y接收

49、串行的數(shù)據(jù)就向右移一位當(dāng)五分頻的信號clk5有效時(shí)把Y輸出。</p><p>  編碼部分五串變五并程序: </p><p>  library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity SER2PAR5to5 is port(clk5:in std_logic; shif

50、t_in:in std_logic; A:out std_logic_vector(4 downto 0)); end ; architecture one of SER2PAR5to5 is signal q: std_logic_vector(4 downto 0); begin p1:process(clk5) begin if clk5'event and clk5='1' then q

51、<=shift_in & q(4 downto 1); end if; end process p1; A<=q; end one;</p><p>  編碼:根據(jù)上面的碼表確定5位碼對應(yīng)的6位碼利用類似查表的方法把輸入的五位數(shù)據(jù)當(dāng)作rom中的地址然后輸出對應(yīng)的6位碼。 </p><p><b>  編碼部分程序:</b></p>

52、;<p>  LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PROM5_6 IS PORT(Y:IN STD_LOGIC_VECTOR(4 DOWNTO 0); CLK6,F:IN STD_LOGIC; </p><p>  Q:OUT STD_LOGIC_VECTOR(

53、5 DOWNTO 0)); </p><p><b>  END ; </b></p><p>  ARCHITECTURE ONE OF PROM5_6 IS </p><p>  SIGNAL REG:STD_LOGIC_VECTOR(5 DOWNTO 0); </p><p><b>  BEGIN &l

54、t;/b></p><p>  P1:PROCESS(Y,F) </p><p><b>  BEGIN </b></p><p>  if F='0' then --模式一部分 </p><p>  case Y is </p><p>  when "

55、;00000"=>REG<="110010"; </p><p>  when "00001"=>REG<="110011"; </p><p>  when "00010"=>REG<="110110"; </p><p&g

56、t;  when "00011"=>REG<="100011"; </p><p>  when "00100"=>REG<="110101"; </p><p>  when "00101"=>REG<="100101"; </

57、p><p>  when "00110"=>REG<="100110"; </p><p>  when "00111"=>REG<="100111"; </p><p>  when "01000"=>REG<="10101

58、1"; </p><p>  when "01001"=>REG<="101001"; </p><p>  when "01010"=>REG<="101010"; </p><p>  when "01011"=>REG&l

59、t;="001011"; </p><p>  when "01100"=>REG<="101100"; </p><p>  when "01101"=>REG<="101101"; </p><p>  when "01110&q

60、uot;=>REG<="101110"; </p><p>  when "01111"=>REG<="001110"; </p><p>  when "10000"=>REG<="110001"; </p><p>  when

61、 "10001"=>REG<="111001"; </p><p>  when "10010"=>REG<="111010"; </p><p>  when "10011"=>REG<="010011"; </p>&

62、lt;p>  when "10100"=>REG<="110100"; </p><p>  when "10101"=>REG<="010101"; </p><p>  when "10110"=>REG<="010110";

63、 </p><p>  when "10111"=>REG<="010111"; </p><p>  when "11000"=>REG<="111000"; </p><p>  when "11001"=>REG<="

64、;011001"; </p><p>  when "11010"=>REG<="011010"; </p><p>  when "11011"=>REG<="011011"; </p><p>  when "11100"=>

65、;REG<="011100"; </p><p>  when "11101"=>REG<="011101"; </p><p>  when "11110"=>REG<="011110"; </p><p>  when "1

66、1111"=>REG<="001101"; </p><p>  WHEN OTHERS=>REG<=NULL; </p><p>  end case; </p><p><b>  end if; </b></p><p>  if F='1' t

67、hen --模式二部分 </p><p>  case Y is </p><p>  when "00000"=>REG<="110010"; </p><p>  when "00001"=>REG<="100001"; </p><

68、p>  when "00010"=>REG<="100010"; </p><p>  when "00011"=>REG<="100011"; </p><p>  when "00100"=>REG<="100100"; &l

69、t;/p><p>  when "00101"=>REG<="100101"; </p><p>  when "00110"=>REG<="100110"; </p><p>  when "00111"=>REG<="00

70、0111"; </p><p>  when "01000"=>REG<="101000"; </p><p>  when "01001"=>REG<="101001"; </p><p>  when "01010"=>RE

71、G<="101010"; </p><p>  when "01011"=>REG<="001011"; </p><p>  when "01100"=>REG<="101100"; </p><p>  when "0110

72、1"=>REG<="000101"; </p><p>  when "01110"=>REG<="000110"; </p><p>  when "01111"=>REG<="001110"; </p><p>  w

73、hen "10000"=>REG<="110001"; </p><p>  when "10001"=>REG<="010001"; </p><p>  when "10010"=>REG<="010010"; </p>

74、<p>  when "10011"=>REG<="010011"; </p><p>  when "10100"=>REG<="110100"; </p><p>  when "10101"=>REG<="010101&quo

75、t;; </p><p>  when "10110"=>REG<="010110"; </p><p>  when "10111"=>REG<="010100"; </p><p>  when "11000"=>REG<=&q

76、uot;011000"; </p><p>  when "11001"=>REG<="011001"; </p><p>  when "11010"=>REG<="011010"; </p><p>  when "11011"=

77、>REG<="001010"; </p><p>  when "11100"=>REG<="011100"; </p><p>  when "11101"=>REG<="001001"; </p><p>  when &quo

78、t;11110"=>REG<="001100"; </p><p>  when "11111"=>REG<="001101"; </p><p>  WHEN OTHERS=>REG<=NULL; </p><p>  end case; </p>

79、<p><b>  end if; </b></p><p>  END PROCESS P1; </p><p>  P2:PROCESS(CLK6) </p><p><b>  BEGIN </b></p><p>  IF CLK6'EVENT AND CLK6=

80、9;1' THEN </p><p><b>  Q<=REG; </b></p><p><b>  END IF; </b></p><p>  END PROCESS P2; </p><p>  END ONE; </p><p>  六分頻器:序列發(fā)

81、生器的輸入時(shí)鐘脈沖六分頻從而可以實(shí)現(xiàn)每輸入6BIT的并行信號就將其轉(zhuǎn)換給變量。</p><p><b>  具體程序如下: </b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity C

82、NT6 is port(clk6:in std_logic; cnter:out std_logic); end; </p><p>  architecture exam of CNT6 is signal q:std_logic_vector(2 downto 0); signal temp: std_logic; begin process(clk6) </p><p>

83、;<b>  begin </b></p><p>  if clk6'event and clk6='1' then </p><p>  if q="101" then </p><p>  q<="000"; temp<='1'; </p&g

84、t;<p>  else q<=q+1; temp<='0'; </p><p><b>  end if; </b></p><p>  end if; </p><p>  end process; </p><p>  cnter<=temp; </p&g

85、t;<p>  end exam; </p><p>  六位并變串轉(zhuǎn)換:把編碼實(shí)現(xiàn)的6位碼由并行轉(zhuǎn)換為串行輸出。 </p><p><b>  具體程序如下:</b></p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all; </

86、p><p>  entity PAR2SER6to6 is </p><p><b>  port ( </b></p><p>  clk0,clk6: in std_logic; </p><p>  Q : in std_logic_vector(5 downto 0); </p><p>  

87、shift_out : out std_logic); </p><p>  end PAR2SER6to6; </p><p>  architecture one of PAR2SER6to6 is </p><p>  signal N:INTEGER RANGE 0 TO 5; </p><p>  signal REG:std_

88、logic_vector(5 downto 0); </p><p><b>  begin </b></p><p>  p1:process(clk6,Q) </p><p><b>  begin </b></p><p>  if clk6'event and clk6='1

89、' then </p><p><b>  REG<=Q; </b></p><p><b>  end if; </b></p><p>  end process p1; </p><p>  PROCESS(CLK0,REG,N) BEGIN </p><p

90、>  IF CLK0'EVENT AND CLK0='1'THEN </p><p>  IF N=5 THEN N<=0; </p><p>  ELSE N<=N+1; </p><p><b>  END IF; </b></p><p><b>  END IF

91、; </b></p><p>  case N is </p><p>  when 0=>shift_out<=REG(0); </p><p>  when 1=>shift_out<=REG(1); </p><p>  when 2=>shift_out<=REG(2); </p&

92、gt;<p>  when 3=>shift_out<=REG(3); </p><p>  when 4=>shift_out<=REG(4); </p><p>  when 5=>shift_out<=REG(5); </p><p>  when others=>shift_out<='X

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論