基于Verilog的UART模塊的設(shè)計(jì)課程設(shè)計(jì)_第1頁(yè)
基于Verilog的UART模塊的設(shè)計(jì)課程設(shè)計(jì)_第2頁(yè)
基于Verilog的UART模塊的設(shè)計(jì)課程設(shè)計(jì)_第3頁(yè)
基于Verilog的UART模塊的設(shè)計(jì)課程設(shè)計(jì)_第4頁(yè)
基于Verilog的UART模塊的設(shè)計(jì)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 電子課程設(shè)計(jì)實(shí)踐報(bào)告題 目:基于verilog的uart模塊的設(shè)計(jì) 班 級(jí): 信科07-4班 學(xué) 號(hào): 08073653 姓 名: 姚萬(wàn)華 指導(dǎo)教師: 孫統(tǒng)風(fēng) 中國(guó)礦業(yè)大學(xué)計(jì)算機(jī)學(xué)院2010-6-2摘 要uart(即 universal asynchronous receiver transmitter通用異步收發(fā)器)是廣泛使用的串行數(shù)據(jù)傳輸協(xié)議。uart允許在串行鏈路上進(jìn)行全雙工的通信。通過(guò)應(yīng)用 eda技術(shù),基于 cpld/ fpga器件設(shè)計(jì)與實(shí)現(xiàn) uart的波特率產(chǎn)生器、uart發(fā)送器和接收器及其整合電路,目的是熟練運(yùn)用 verilog hd語(yǔ)言,掌握 cpld芯片的使用。波特率發(fā)生器、

2、接收器和發(fā)送器是uart的三個(gè)核心功能模塊,利用verilog hdl語(yǔ)言對(duì)這三個(gè)功能模塊進(jìn)行描述并加以整合,通過(guò)maxplusii10.01仿真,用串口調(diào)試助手進(jìn)行驗(yàn)證,其結(jié)果完全符合uart協(xié)議的要求和預(yù)期的結(jié)果。關(guān)鍵詞:uart;串行通訊;veriloghdl;cpld;仿真目 錄第1章 課題概述31.1 課題背景21.2 課題目的與意義21.3 報(bào)告組織結(jié)構(gòu)2第2章 相關(guān)理論與技術(shù)32.1 uart相關(guān)內(nèi)容簡(jiǎn)介32.1.1復(fù)雜可編程邏輯器件cpld簡(jiǎn)介32.1.2 rs-232介紹32.1.3 verilog hdl簡(jiǎn)介62.2 uart協(xié)議介紹62.3 硬件結(jié)構(gòu)設(shè)計(jì)82.4

3、軟件設(shè)計(jì)9第3章 課題詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)93.1uart的整體設(shè)計(jì)93.2 波特率發(fā)生器113.2.波特率的分頻因子的計(jì)算113.3 接收模塊設(shè)計(jì)133.3.1接收模塊原理133.3.2接收模塊的源程序143.4 發(fā)送模塊設(shè)計(jì)53.4.1發(fā)送模塊設(shè)計(jì)原理53.4.2發(fā)送模塊源程序63.5功能的測(cè)試11結(jié) 論11參考文獻(xiàn)12第1章 課題概述1.1 課題背景uart協(xié)議是數(shù)據(jù)通信及控制系統(tǒng)中廣泛使用的一種全雙工串行數(shù)據(jù)傳輸協(xié)議,在實(shí)際工業(yè)生產(chǎn)中有時(shí)并不使用uart的全部功能。只需將其核心功能集成即可。波特率發(fā)生器、接收器和發(fā)送器是uart的三個(gè)核心功能模塊,利用vefilog-hdl語(yǔ)言對(duì)這三個(gè)功能模

4、塊進(jìn)行描述并加以整合uart(即universal asynchronousreceiver transmitter 通用異步收發(fā)器)是廣泛使用的串行數(shù)據(jù)傳輸協(xié)議。uart允許在串行鏈路上進(jìn)行全雙工的通信。串行外設(shè)用到rs232-c異步串行接口,一般采用專用的集成電路即uart實(shí)現(xiàn)。如8250、8251、ns16450等芯片都是常見(jiàn)的uart器件,這類芯片已經(jīng)相當(dāng)復(fù)雜,有的含有許多輔助的模塊(如fifo),有時(shí)我們不需要使用完整的uart的功能和這些輔助功能?;蛘咴O(shè)計(jì)上用到了fpga/cpld器件,那么我們就可以將所需要的uart功能集成到fpga內(nèi)部。使用vhdl或veriolog -hdl

5、將uart的核心功能集成,從而使整個(gè)設(shè)計(jì)更加緊湊、穩(wěn)定且可靠。本文應(yīng)用eda技術(shù),基于fpga/cpld器件設(shè)計(jì)與實(shí)現(xiàn)uart。1.2 課題目的與意義實(shí)際應(yīng)用上,有時(shí)我們不需要使用完整的uart的功能和這些輔助功能。使用verilog-hdl將所需要的uart的核心功能集成到fpgacpld內(nèi)部,就可以實(shí)現(xiàn)緊湊、穩(wěn)定且可靠的uart數(shù)據(jù)傳輸。這樣,既可以滿足實(shí)際的應(yīng)用,實(shí)現(xiàn)所要求的簡(jiǎn)單的通信和控制,又能夠去除更多不需要的繁雜復(fù)雜的功能實(shí)現(xiàn)。1.3 報(bào)告組織結(jié)構(gòu)第一章介紹課題的背景目的及意義,同時(shí)介紹了整個(gè)課題報(bào)告的組織形式。第二章介紹uart協(xié)議和硬件結(jié)構(gòu);以及rs232的簡(jiǎn)要介紹。簡(jiǎn)要介紹了

6、課題所用的語(yǔ)言verilog hdl語(yǔ)言。第三章是課題的詳細(xì)設(shè)計(jì),分為波特率分頻因子的計(jì)算,接收模塊和發(fā)送模塊。每一部分分為設(shè)計(jì)原理和源程序。最后是結(jié)論和參考文獻(xiàn)。第2章 相關(guān)理論與技術(shù)2.1 uart相關(guān)內(nèi)容簡(jiǎn)介2.1.1復(fù)雜可編程邏輯器件cpld簡(jiǎn)介cpld是 complex pld的簡(jiǎn)稱, 顧名思義, 其是一種較pld為復(fù)雜的邏輯元件。cpld是一種整合性較高的邏輯元件。由于具有高整合性的特點(diǎn), 故其有性能提升, 可靠度增加,pcb面積減少及成本下降等優(yōu)點(diǎn)。cpld元件,基本上是由許多個(gè)邏輯方塊(logic blocks) 所組合而成的。而各個(gè)邏輯方塊均相似于一個(gè)簡(jiǎn)單的pld元件( 如

7、22v10) 。邏輯方塊間的相互關(guān)系則由可變成的連線架構(gòu), 將整個(gè)邏輯電路合成而成。常見(jiàn)的cpld元件有 altera 公司的max5000 及max7000 系列。cypress的 max340 及flash370 系列等, 一般來(lái)說(shuō), cpld元件的邏輯門數(shù)約在10007000 門之間?!?】2.1.2 rs-232介紹rs232接口,就是普通電腦后面那個(gè)串口.一般為9針的,也有25針的.是1970年由美國(guó)電子工業(yè)協(xié)會(huì)(eia)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備(dte)和數(shù)據(jù)通訊設(shè)備(dce)之間串行二進(jìn)制數(shù)據(jù)交換接口技

8、術(shù)標(biāo)準(zhǔn)”(rs-232c,其中c表示此標(biāo)準(zhǔn)修改了三次).標(biāo)準(zhǔn)中包括了電氣和機(jī)械方面的規(guī)定.該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25個(gè)腳的 db25連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定.后來(lái)隨著設(shè)備的不斷改進(jìn),成了目前大家普遍見(jiàn)到的9腳.【2】在不使用傳輸控制信號(hào)的情況下,用3根線就可以傳輸了,9芯的是2收3發(fā)5地,25芯的是2發(fā)3收7地。兩設(shè)備用rs232相連的時(shí)候?yàn)槭瞻l(fā),發(fā)收,地地。接口特性: (1)接口的電氣特性:在rs-232c中任何一條信號(hào)線的電壓均為負(fù)邏輯關(guān)系。即:邏輯“1”,-5 -15v;邏輯“0” +5 +15v 。噪聲容限為2v。即要求接收器能識(shí)別低至+3v

9、的信號(hào)作為邏輯“0”,高到-3v的信號(hào)作為邏輯“1” (2) 接口的物理結(jié)構(gòu): rs-232-c接口連接器一般使用型號(hào)為db25的25芯插頭座,通常插頭在dce端,插座在dte端. 一些設(shè)備與pc機(jī)連接的rs-232c接口,因?yàn)椴皇褂脤?duì)方的傳送控制信號(hào),只需三條接口線,即“發(fā)送數(shù)據(jù)”、“接收數(shù)據(jù)”和“信號(hào)地”。所以采用db-9的9芯插頭座,傳輸線采用屏蔽雙絞線。 (3) 傳輸電纜長(zhǎng)度由rs-232c標(biāo)準(zhǔn)規(guī)定在碼元畸變小于4%的情況下,傳輸電纜長(zhǎng)度應(yīng)為50英尺.其實(shí)在一般應(yīng)用中,傳輸距離小于50m,最大傳輸速率為20kbps.由于rs-232-c接口標(biāo)準(zhǔn)出現(xiàn)較早,難免有不足之處,主要有以下四點(diǎn):

10、 (1)接口的信號(hào)電平值較高,易損壞接口電路的芯片,又因?yàn)榕cttl 電平不兼容故需使用電平轉(zhuǎn)換電路方能與ttl電路連接。 (2)傳輸速率較低,在異步傳輸時(shí),波特率為20kbps。 (3)接口使用一根信號(hào)線和一根信號(hào)返回線而構(gòu)成共地的傳輸形式,這種共地傳輸容易產(chǎn)生共模干擾,所以抗噪聲干擾性弱。 (4)傳輸距離有限,最大傳輸距離標(biāo)準(zhǔn)值為50英尺,實(shí)際上也只能用在50米左右。 rs232的接口芯片 單片機(jī)的串口是ttl電平,在實(shí)際應(yīng)用時(shí),需要將ttl電平轉(zhuǎn)換成rs232電平。rs232的接口芯片很多,最著名的當(dāng)然是maxim公司的max232;跟這個(gè)芯片完全兼容的芯片很多,象linear公司的lt1

11、081、lt1181,harris的icl232等,都是十分著名且常用的芯片,linear的串行接口轉(zhuǎn)換芯片在早期的電路設(shè)計(jì)中經(jīng)常可以見(jiàn)到,但是近來(lái)好像比較少見(jiàn)了。icl232似乎比max232便宜??磎ax232的原理框圖,需要注意到2點(diǎn):1)需要外接電容0.1u電容,或者1u的膽電解電容或電解電容,有一款232芯片不需要外接電容,但是因?yàn)樵谛酒凶鲆粋€(gè)達(dá)到電容效果的電路是比較難,所以也比較貴;所以一般都選用外接電容的;之所以需要電容,是因?yàn)閞s232電平是工作在大約9v9v之間,需要電容將5v電壓轉(zhuǎn)換成rs232電平所需要的10v和10v;電路上叫電荷泵,很形象;2) rs232的邏輯和t

12、tl是正好相反的。在框圖上,輸入和輸出之間的邏輯是反的;對(duì)于ttl電平,當(dāng)沒(méi)有232信號(hào)發(fā)出時(shí),是高電平;對(duì)于rs232來(lái)說(shuō),這時(shí),tx端是-89v電壓,相對(duì)于0v來(lái)說(shuō);如果有了信號(hào),那就是從+9v-9v交錯(cuò)變化的一系列信號(hào),使用示波器可以看到信號(hào)的變化。利用以上的特點(diǎn),我們可以測(cè)試rs232接口電路的好壞。1)判斷芯片是否正常,參見(jiàn)max232的框圖,使用萬(wàn)用表測(cè)量2和6腳,只要2腳的電壓在8v9v之間、6腳在-8v-9v之間,就基本上可以斷定這個(gè)芯片是好的;2)在rs232沒(méi)有發(fā)信號(hào)時(shí),看tx端電壓為rs232的高電平,也就是-8v-9v之間,當(dāng)發(fā)信號(hào)時(shí),數(shù)據(jù)在變化,這說(shuō)明這個(gè)rs232的

13、端口是好的;這個(gè)方法也適用于測(cè)量本地的串口。早起的rs232接口芯片是mc1488(發(fā)送)、mc1489。mc1489因?yàn)橹挥薪邮?,所以是?v電源工作;mc1488則需要正負(fù)12v電源;但是在工控機(jī)的板卡中,正負(fù)電源不是問(wèn)題,所以在moxa c168等多串口卡中,仍然使用mc1488、mc1489,價(jià)格便宜成本低啊2.1.3 verilog hdl簡(jiǎn)介verilog hdl是一種硬件描述語(yǔ)言,用于從算法級(jí)、門級(jí)到開關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對(duì)象的復(fù)雜性可以介于簡(jiǎn)單的門和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)能夠按層次描述,并可在相同描述中顯式地進(jìn)行時(shí)序建模。v

14、erilog hdl 語(yǔ)言具有下述描述能力:設(shè)計(jì)的行為特性、設(shè)計(jì)的數(shù)據(jù)流特性、設(shè)計(jì)的結(jié)構(gòu)組成以及包含響應(yīng)監(jiān)控和設(shè)計(jì)驗(yàn)證方面的時(shí)延和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語(yǔ)言。此外,verilog hdl語(yǔ)言提供了編程語(yǔ)言接口,通過(guò)該接口可以在模擬、驗(yàn)證期間從設(shè)計(jì)外部訪問(wèn)設(shè)計(jì),包括模擬的具體控制和運(yùn)行。verilog hdl語(yǔ)言不僅定義了語(yǔ)法,而且對(duì)每個(gè)語(yǔ)法結(jié)構(gòu)都定義了清晰的模擬、仿真語(yǔ)義。因此,用這種語(yǔ)言編寫的模型能夠使用verilog仿真器進(jìn)行驗(yàn)證。語(yǔ)言從c編程語(yǔ)言中繼承了多種操作符和結(jié)構(gòu)。verilog hdl提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。但是,verilog hdl語(yǔ)言

15、的核心子集非常易于學(xué)習(xí)和使用,這對(duì)大多數(shù)建模應(yīng)用來(lái)說(shuō)已經(jīng)足夠。當(dāng)然,完整的硬件描述語(yǔ)言足以對(duì)從最復(fù)雜的芯片到完整的電子系統(tǒng)進(jìn)行描述。2.2 uart協(xié)議介紹基本的uart通信只需要兩條信號(hào)線(rxd,txd)就可以完成數(shù)據(jù)的全雙工通信任務(wù)。txd是uart發(fā)送端,為輸出;rxd是uart接收端,為輸人【3】。uart的基本特點(diǎn)是:在信號(hào)線上共有兩種狀 態(tài),分別用邏輯1(高電平)和邏輯o(低電平)來(lái)區(qū)分。例如,在發(fā)送器空閑時(shí),數(shù)據(jù)線保持在邏輯高電平狀態(tài),發(fā)送器是通過(guò)發(fā)送起始位來(lái)開始一個(gè)數(shù)據(jù)幀的傳送,起始位使數(shù)據(jù)線處于邏輯o狀態(tài),提示接收器數(shù)據(jù)傳輸即將開始。接著發(fā)送數(shù)據(jù)位,數(shù)據(jù)位一般為8位一個(gè)字節(jié)

16、的數(shù)據(jù)(也有5位、6位或7位的情況),低位(lsb)在前,高位(msb)在后。然后發(fā)送校驗(yàn)位,校驗(yàn)位一般用來(lái)判斷傳輸?shù)臄?shù)據(jù)位有無(wú)錯(cuò)誤,一般是奇偶校驗(yàn)。在使用中,該位常取消。停止位在最后,用以標(biāo)識(shí)數(shù)據(jù)傳送的結(jié)束,它對(duì)應(yīng)于邏輯1狀態(tài)。uart的幀格式包括起始位(start bit,低電平)、58位數(shù)據(jù)位(data bits)、校驗(yàn)位(parity bit,可選)和停止位(stop bit,位數(shù)可為1、15、2位)。這種格式是由起始位和停止位來(lái)實(shí)現(xiàn)字符的同步h1,如圖l所示。2.3 硬件結(jié)構(gòu)設(shè)計(jì)2.4軟件設(shè)計(jì)軟件采用 altera公司的 max+plus設(shè)計(jì)邏輯結(jié)構(gòu),設(shè)計(jì)的內(nèi)容包括通用 i/o地址譯

17、碼器、各個(gè)寄存器以及 uart核。uart核主要包括 3個(gè)部分:波特率發(fā)生器、數(shù)據(jù)發(fā)送部分和數(shù)據(jù)接收部分。 i/o地址譯碼器和 uart核使用硬件描述語(yǔ)言 veriloge-hdl來(lái)編寫實(shí)現(xiàn)。第3章 課題詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)3.1uart的整體設(shè)計(jì)3.2 波特率發(fā)生器3.2.波特率的分頻因子的計(jì)算產(chǎn)生波特率的主信號(hào)頻率是越高越好,這樣才可產(chǎn)生較高且精確的波特率。若是以 40mhz主頻率要產(chǎn)生 9600 波特率則必須將此clock= 40mhz除以 4166. 66666不是整數(shù),取一個(gè)最接近的數(shù)是 4166 則波特率為 9601. 53 ,其誤差小于 00. 1 %。假如除數(shù)為 4160 則波特率為

18、 40 000 000/4160 = 9615.38其誤差率為0.16 %。這里取div_clk=4167電路的時(shí)序模擬如圖 2所示。分頻模塊的程序流程圖3.3 接收模塊設(shè)計(jì)3.3.1接收模塊原理接收不是由本機(jī)啟動(dòng),而是由一個(gè)外部事件觸發(fā)的。在空閑狀態(tài)時(shí),若接收線上出現(xiàn)一個(gè)下降沿,即視為一個(gè)可能的起始位,應(yīng)該對(duì)其再次采樣加以確定。一個(gè)真實(shí)的起始位,其低電平維持時(shí)間為104.3ns。我們?cè)谄鹗嘉坏闹虚g時(shí)刻,以波特率的16倍頻對(duì)接收線采樣三次,經(jīng)多數(shù)表決確認(rèn)其電平狀態(tài)。狀態(tài)為高,表明是一個(gè)干擾信號(hào),uart仍回到空閑狀態(tài)。若確認(rèn)接收線的狀態(tài)為低,則這個(gè)起始位得到確認(rèn),uart開始接收后續(xù)數(shù)據(jù)。每一

19、位的接收方式與起始位確認(rèn)方式一樣,uart對(duì)數(shù)據(jù)接收的時(shí)序圖參見(jiàn)圖4。接收完畢uart又回到空閑狀態(tài)。如果最后的停止位出錯(cuò),則這一幀數(shù)據(jù)接收失敗,放棄接收到的數(shù)據(jù)。uart的接收狀態(tài)轉(zhuǎn)換圖見(jiàn)圖3。 3.3.2接收模塊的源程序timescale 1ns/1nsmodule receiver(data_out,data_ready,framing_error,parity_error,serial_in,clock,reset);output data_ready; /數(shù)據(jù)接收完畢output 7:0data_out;/輸出數(shù)據(jù)總線output framing_error;/幀錯(cuò)誤信號(hào)1outpu

20、t parity_error; /驗(yàn)錯(cuò)誤信號(hào)1input serial_in; /串行數(shù)據(jù)輸入input clock; /輸入時(shí)鐘input reset; /復(fù)位信號(hào)1有?/input read_strobe; /讀鎖存信號(hào)0有?初始值為1parameter baud_cnt=4;/波特率輸入數(shù)據(jù),數(shù)字代表接收時(shí)鐘分頻40mh,分頻系數(shù)4166parameter rvbaud_cnt=2;reg serial_in1;reg serial_in2;reg rxclk_enable;reg 2:0 clk_div;reg 1:0 rvclk_div;reg 7:0 rsr;reg 7:0 rbr

21、;reg 3:0 control_cnt;reg data_ready;reg parity;reg parity_error;reg framing_error; wire rxclk; /接收時(shí)鐘1有?wire read_strobe; /讀鎖存信號(hào)0有?初始值為1/輸入數(shù)據(jù)寄存器,用于下降沿檢查always (posedge clock)beginserial_in1<=serial_in;serial_in2<=serial_in1;end/接收時(shí)鐘使能,在時(shí)鐘使能范?內(nèi)產(chǎn)生接受時(shí)鐘并對(duì)輸入數(shù)據(jù)采樣always (posedge clock or posedge reset

22、)begin if(reset) begin rxclk_enable<=1'b0; / parity<=1'b0; end else if(!serial_in1&&serial_in2) /檢查下降沿 rxclk_enable<=1'b1; else if(control_cnt=10) /數(shù)據(jù)接收完畢 begin rxclk_enable<=1'b0; / parity<=1'b0; endend/控制計(jì)數(shù)器always (posedge rxclk or posedge reset)begin if(

23、reset) control_cnt=0; else begin if(!rxclk_enable) control_cnt=0; else control_cnt=control_cnt+1; endend/數(shù)據(jù)接收完畢,通知微處理器可以產(chǎn)生read_strobe信號(hào)來(lái)讀取并行數(shù)據(jù)always (posedge clock or posedge reset or negedge read_strobe) begin if(reset) data_ready=1'b0; else if (!read_strobe) data_ready=1'b0; else if (contr

24、ol_cnt=10) data_ready=1'b1; end/產(chǎn)生接受時(shí)鐘always (posedge clock or posedge reset) begin if(reset) clk_div=0; else begin if(rxclk_enable) begin if(clk_div>=(baud_cnt-1) clk_div=0; else clk_div=clk_div+1; end end endassign rxclk=(clk_div>=baud_cnt-1) ? 1:0;always (negedge clock) begin if(rvclk_d

25、iv>=rvbaud_cnt-1) rvclk_div=0; else rvclk_div=rvclk_div+1;endassign read_strobe=(rvclk_div>=rvbaud_cnt-1) ? 1:0;/*接收數(shù)據(jù)進(jìn)程: rsr:接收移位寄存器 rbr:接收緩沖寄存器*/always (posedge rxclk or posedge reset) if(reset) begin rsr<=8'b0; rbr<=8'b0; parity<=1'b1; /偶校驗(yàn),如果是奇校驗(yàn),parity=0; framing_erro

26、r=1'b0; parity_error=1'b0; end else begin if(control_cnt>=1&&control_cnt<=8) begin rsr7<=serial_in; rsr6:0<=rsr7:1; /移位 parity<=parityrsr7;/產(chǎn)生校驗(yàn)碼 end else if (control_cnt=9) begin rbr<=rsr; /緩沖 end else if(!parity) parity_error=1'b1; /產(chǎn)生校驗(yàn)信息 else if (control_cnt

27、=10)&&(serial_in!=1'b1) framing_error=1'b1; /產(chǎn)生偵錯(cuò)誤信號(hào) else framing_error=1'b0; endassign data_out=!read_strobe ? rbr : 8'bz; /并行數(shù)據(jù)輸出endmodule3.4 發(fā)送模塊設(shè)計(jì)3.4.1發(fā)送模塊設(shè)計(jì)原理以波特率頻率產(chǎn)生器的txclk將數(shù)據(jù)data_in以write_strobe控制信號(hào)將其送入發(fā)送緩沖寄存器 rbr ,并令寄存器內(nèi)容已載有數(shù)據(jù)而非空的標(biāo)志 rsr= 0。當(dāng)同步波特率信txclk來(lái)臨時(shí)監(jiān)視是否處于rsr= 0(

28、內(nèi)有數(shù)據(jù))以及rsr= 0(內(nèi)有送入數(shù)據(jù)) ,但因 rsr以送入傳輸寄存器 rbr內(nèi),為空故rsr = 1 ,此rsr代表緩沖寄存器rbr是否有被送入數(shù)據(jù)或已轉(zhuǎn)送入傳輸寄存器,rbr是否為空,可再予以送入新的要發(fā)送的數(shù)據(jù)。假如rsr= 0(內(nèi)有送入數(shù)據(jù))則便要開始進(jìn)行數(shù)據(jù)串行傳輸,傳出數(shù)據(jù)為8位,連同啟動(dòng)信號(hào)“0”、校驗(yàn)位、停止信號(hào)共需12位的發(fā)送計(jì)數(shù),以control_cnt作計(jì)數(shù)。當(dāng)control_cnt = 0計(jì)數(shù)器便開始遞加計(jì)數(shù)字節(jié),同時(shí)令 start起始信號(hào)為 0 ,送入 txd輸出端輸出。而在計(jì)數(shù)器為18時(shí)都將rbr的最低位rbr(0)輸出到 txd端,并令 rbr 作算術(shù)右移運(yùn)算

29、。依次將rbr 的d7d0通過(guò)d0移到 txd端輸出,直到第 12位是停止移位,并將停止位 txd = 0發(fā)送而結(jié)束一個(gè)8位數(shù)據(jù)的發(fā)送。發(fā)送流程圖如圖5。對(duì)應(yīng)的發(fā)送模塊的模擬時(shí)序則如圖6所示。3.4.2發(fā)送模塊源程序timescale 1ns/1nsmodule transmit(data_in,transmiting,reset,clock,serie_out);output transmiting; /表示正在發(fā)送output serie_out; /串行輸出數(shù)據(jù)input 7:0 data_in; /并行輸入數(shù)據(jù)input clock;input reset;parameter baud

30、_cnt=4; /代表波特率輸入數(shù)據(jù),數(shù)字代表接收時(shí)鐘的分頻數(shù)parameter txbaud_cnt=2;reg transmiting;reg txclk_enable;reg 7:0 tsr; /發(fā)送移位寄存器reg 7:0 tbr; /發(fā)送緩沖寄存器reg parity;reg 2:0 clk_div;reg 1:0 txclk_div;wire txclk;wire write_strobe; /寫鎖存信號(hào)reg serie_out;reg 3:0 control_cnt;reg write_strobe1;reg write_strobe2;/initial begin txclk

31、_enable<=1'b0; end/always #10 write_strobe=write_strobe;/寫入控制信號(hào)寄存器,用于下降沿always (posedge clock) begin write_strobe1<=write_strobe; write_strobe2<=write_strobe1; end/發(fā)送時(shí)鐘使能,在時(shí)鐘使能和范圍內(nèi)產(chǎn)生發(fā)送時(shí)鐘,發(fā)送適中的數(shù)據(jù)和此時(shí)鐘同步always (posedge clock or posedge reset) if(reset) begin transmiting<=1'b0; txclk

32、_enable<=1'b0; end / else if(!txclk_enable) / begin else if(!write_strobe1&&write_strobe2) /檢測(cè)下降沿 begin txclk_enable<=1'b1; end / end else if(control_cnt=1) begin transmiting<=1; end else if(control_cnt=12) begin txclk_enable<=1'b0; transmiting<=1'b0; / parity&

33、lt;=1'b0;/檢測(cè)校驗(yàn)位 end/控制計(jì)數(shù)器always (posedge txclk or posedge reset ) if(reset) control_cnt=0; else if(!txclk_enable) control_cnt=0; else control_cnt=control_cnt+1;/*在write_strobe的下降沿接收并行數(shù)據(jù)到發(fā)送緩沖器tbr:transmit buffer register*/always (negedge write_strobe or posedge reset)beginif(reset)tbr=8'b0; e

34、lsetbr=data_in;end/產(chǎn)生發(fā)送時(shí)鐘always (posedge clock or posedge reset)begin if(reset) clk_div=0; else begin if(txclk_enable) begin if(clk_div>=(baud_cnt-1) clk_div=0; else clk_div=clk_div+1; end endendassign txclk=(clk_div>=baud_cnt-1)? 1:0; always (negedge clock)begin if(txclk_div>=(txbaud_cnt-1

35、) txclk_div=0; else txclk_div=txclk_div+1;endassign write_strobe=(txclk_div>=txbaud_cnt-1)? 1:0;/*發(fā)送數(shù)據(jù)進(jìn)程tsr:transmit serial register;tbr:transmit buffer register*/always (negedge txclk or posedge reset) if(reset) begin serie_out<=1'b1; parity<=1'b0; /偶檢驗(yàn),如果是奇校驗(yàn)設(shè)parity=1'b1; tsr&

36、lt;=8'b0; end else begin if(control_cnt=1) begin tsr<=tbr; end else if(control_cnt=2) serie_out<=1'b0; /發(fā)送起始位 else if(control_cnt>=3)&&(control_cnt<=10) begin tsr6:0<=tsr7:1; tsr7<=1'b0; serie_out<=tsr0;/發(fā)送串行數(shù)據(jù),lsb parity<=paritytsr0;/計(jì)算校驗(yàn)位 end else if(con

37、trol_cnt=11) begin serie_out<=parity; /發(fā)送校驗(yàn)位 end else if(control_cnt=12) /發(fā)送停止位 begin serie_out<=1'b1; parity<=1'b0; end endendmodule3.5功能的測(cè)試本課題中設(shè)計(jì)的所有模塊均采用verilog-hdl硬件描述語(yǔ)言進(jìn)行描述,在altera公司的maxplus ii開發(fā)環(huán)境下進(jìn)行程序的編譯、邏輯綜合和仿真以及管腳分配,在cpldee-4系統(tǒng)上進(jìn)行驗(yàn)證。cpldee-4型實(shí)驗(yàn)開發(fā)系統(tǒng)簡(jiǎn)介 本設(shè)計(jì)采用中國(guó)礦業(yè)大學(xué)信息與電氣工程學(xué)院制造的cpldee-4型實(shí)驗(yàn)開發(fā)系統(tǒng),其cpld芯片為altera公司的acex ep1k100qc208

溫馨提示

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

評(píng)論

0/150

提交評(píng)論