版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 畢 業(yè) 設(shè) 計(jì)(論文)</p><p> 題目: 片上系統(tǒng)的UART接口控制器IP設(shè)計(jì)</p><p> 姓名 學(xué) 號(hào) </p><p><b> 所在單位 </b></p><p> 指導(dǎo)教師 完成日期
2、 </p><p> 片上系統(tǒng)的UART接口控制器IP設(shè)計(jì)</p><p><b> 摘 要</b></p><p> 當(dāng)代在通信和控制系統(tǒng)中,常使用UART (通用異步收發(fā)器)實(shí)現(xiàn)系
3、統(tǒng)輔助信息的傳輸。 UART雖然通信速度不快,但是它具有電路簡(jiǎn)單,成本低,性能可靠,特別適合遠(yuǎn)距離數(shù)據(jù)傳輸?shù)葍?yōu)點(diǎn)。因此,在許多對(duì)通信速度要求不高的場(chǎng)合,異步串行口還發(fā)揮著很重要的作用,被廣泛的使用。而如今市場(chǎng)上的UART功能復(fù)雜,在應(yīng)用只使用到它的幾個(gè)基本功能,因而造成資源浪費(fèi),為此我們需要對(duì)UART的功能進(jìn)行精簡(jiǎn),方便使用,降低CPU的工作負(fù)擔(dān),提高了系統(tǒng)性能。</p><p> 關(guān)鍵詞: UART 片上系統(tǒng)
4、 通信協(xié)議;</p><p><b> Abstract</b></p><p> Contemporary in communication and control system, often use UART (general asynchronous transceiver) to implement system auxiliary information
5、 transmission. UART although communication at a modest pace, but it has a circuit is simple, low cost and reliable performance, especially suitable for the remote data transmission, etc. Therefore, in many of the communi
6、cation speed demand is not high occasions, asynchronous serial mouth still plays a very important role, is widely used. And now the market </p><p> Key Words: UART; SOC; agree on communication</p>&l
7、t;p><b> 目 錄</b></p><p><b> 第一章 緒論1</b></p><p><b> 第二章 背景2</b></p><p><b> 2.1知識(shí)背景2</b></p><p> 2.2 本課題的研究?jī)?nèi)容
8、3</p><p> 2.3 論文結(jié)構(gòu)4</p><p> 第三章 UART接口協(xié)議5</p><p><b> 3.1幀格式5</b></p><p><b> 3.2 示例7</b></p><p> 3.3 物理接口8</p>&
9、lt;p> 第四章 UART接口控制器的設(shè)計(jì)與實(shí)現(xiàn)11</p><p> 4.1 UART接口控制器核(Core)的設(shè)計(jì)與實(shí)現(xiàn)11</p><p> 4.2 UART頂層設(shè)計(jì)24</p><p> 第五章 測(cè)試驗(yàn)證32</p><p> 5.1 基于quartus II的功能仿真測(cè)試32</p>
10、<p> 5.2 基于FPGA的系統(tǒng)級(jí)測(cè)試34</p><p> 第六章 總結(jié)35</p><p><b> 致 謝37</b></p><p><b> 附 錄38</b></p><p><b> 第一章 緒論</b></p>
11、;<p> 當(dāng)今社會(huì),隨著計(jì)算機(jī)的廣泛應(yīng)用,網(wǎng)絡(luò)技術(shù)的快速發(fā)展和數(shù)字通信技術(shù)的日益普及,經(jīng)常會(huì)采用串行通信方式來進(jìn)行數(shù)據(jù)信息的交換傳輸。在串口通信中,數(shù)據(jù)的串行/并行轉(zhuǎn)換工作主要是由UART來實(shí)現(xiàn)。UART是當(dāng)前較廣泛使用的串行數(shù)據(jù)傳輸協(xié)議之一,它允許在串行鏈路上進(jìn)行全雙工通信,其應(yīng)用范圍遍及計(jì)算機(jī)外設(shè)、工業(yè)控制等場(chǎng)合?,F(xiàn)在專用的UART集成電路如8250、8251等既要考慮異步收發(fā)功能,又要兼容RS-232C接口設(shè)計(jì)等
12、功能,比較復(fù)雜。而在實(shí)際應(yīng)用中,往往只需要用到UART的幾個(gè)基本功能,而使用專用芯片勢(shì)必會(huì)造成資源的浪費(fèi)以及設(shè)備成本的提高。所以我們可以將所需的UART功能集成到SOC內(nèi)部,實(shí)現(xiàn)與其他SOC數(shù)字系統(tǒng)的直接通信,從而簡(jiǎn)化了整個(gè)系統(tǒng)電路,使系統(tǒng)更為靈活、緊湊,性能也更加穩(wěn)定。UART16550采用通用的RS-232C串行接口標(biāo)準(zhǔn),其實(shí)現(xiàn)較為簡(jiǎn)單,最少只需要2條導(dǎo)線即可實(shí)現(xiàn)基本通信。</p><p><b>
13、 第二章 背景</b></p><p><b> 2.1知識(shí)背景</b></p><p> 一、UART概述及其發(fā)展</p><p> UART:(Universal Asynchronous Receiver/Transmitter),全稱是通用異步接收/發(fā)送裝置,UART是一個(gè)并行輸入成為串行輸出的芯片,用于控制計(jì)算機(jī)
14、與串行設(shè)備, 是實(shí)現(xiàn)設(shè)備之間低速數(shù)據(jù)通信的標(biāo)準(zhǔn)協(xié)議。通常集成在主板上,多數(shù)是16550AFN芯片。UART作為一種串口因可靠性高、傳輸距離遠(yuǎn)、線路簡(jiǎn)單、串口通信協(xié)議的簡(jiǎn)潔而廣泛應(yīng)用于串行數(shù)據(jù)通信電路。其基本原理是1個(gè)完整的數(shù)據(jù)在數(shù)據(jù)線上依次按比特位傳送,雖然傳輸速率較低,但由于這種傳輸方式需要的數(shù)據(jù)線較少,只需用兩根線就可以完成數(shù)據(jù)的收發(fā)(一根接收數(shù)據(jù),一根發(fā)送數(shù)據(jù)),而且成本低廉,因此特別適合遠(yuǎn)距離數(shù)據(jù)傳輸?!爱惒健敝覆恍枰~外的時(shí)鐘
15、線進(jìn)行數(shù)據(jù)的同步傳輸,是一種串行總線接口。常用的標(biāo)準(zhǔn)通信波特率有9600bps、115200bps等。</p><p> UART產(chǎn)生于上個(gè)世紀(jì)70年代,是第一塊大規(guī)模集成電路。1981年的推出的IBM PC采用了8250 UART與外設(shè)進(jìn)行數(shù)據(jù)通信,直到上個(gè)世紀(jì)末,UART一直是PC中最主要的串行通信接口。隨著高速串行總線USB的出現(xiàn),USB以其諸多的優(yōu)點(diǎn)取代了UART成為個(gè)人電腦中應(yīng)用最廣泛的串行接口。 &
16、lt;/p><p> 而在嵌入式領(lǐng)域,由于UART具有操作簡(jiǎn)單、工作可靠、抗干擾強(qiáng)、傳輸距離遠(yuǎn)(組成485網(wǎng)絡(luò)可以傳輸1,200米以上),設(shè)計(jì)人員普遍認(rèn)為UART是從CPU或微控制器向系統(tǒng)的其他部分傳輸數(shù)據(jù)的最佳方式,因此它們被大量地應(yīng)用在工業(yè)、通信和家電控制等嵌入式領(lǐng)域。通常MCU/CPU都會(huì)自帶一個(gè)UART串口,但實(shí)際應(yīng)用中一個(gè)串口往往不夠用,需要進(jìn)行UART串口擴(kuò)展。 </p><p>
17、;<b> 二、UART控制器</b></p><p> UART控制器完成串行通信功能,控制器在內(nèi)部總線的操作下,通過對(duì)寄存器的讀寫,完成如波特率設(shè)置、串并變換、FIFO控制、流控制及中斷控制等,最終將需要發(fā)送的并行數(shù)據(jù)以一定的格式發(fā)送;同時(shí)也將外部輸入的串口數(shù)據(jù)流按一定格式進(jìn)行采集完成數(shù)據(jù)的接收。</p><p> 計(jì)算機(jī)內(nèi)部采用并行數(shù)據(jù),不能直接把數(shù)據(jù)發(fā)到
18、Modem,必須經(jīng)過UART整理才能進(jìn)行異步傳輸,其過程為:CPU先把準(zhǔn)備寫入串行設(shè)備的數(shù)據(jù)放到UART的寄存器(臨時(shí)內(nèi)存塊)中,再通過FIFO(First Input First Output,先入先出隊(duì)列)傳送到串行設(shè)備,ykl若是沒有FIFO,信息將變得雜亂無章,不可能傳送到Modem。 </p><p> 三、SOC的基本概念</p><p> SOC (系統(tǒng)級(jí)芯片System
19、 onChip),也有稱片上系統(tǒng),狹義的角度上講,它是信息系統(tǒng)核心的芯片集成,是將系統(tǒng)關(guān)鍵部位集成在一塊芯片上;從廣義角度講,SOC是一個(gè)小型系統(tǒng),是一個(gè)產(chǎn)品,是一個(gè)有專用目標(biāo)的集成電路,其中包含完整系統(tǒng)并有嵌入軟件的全部?jī)?nèi)容。SOC 也有譯為“系統(tǒng)芯片集成”,意指它是一種技術(shù),用以實(shí)現(xiàn)從確定系統(tǒng)功能開始,到軟/硬件劃分,并完成設(shè)計(jì)的整個(gè)過程。</p><p> SOC是在單個(gè)芯片上集成一個(gè)完整的系統(tǒng),對(duì)所有或
20、部分必要的電子電路進(jìn)行包分組的技術(shù)。所謂完整的系統(tǒng)一般包括中央處理器(CPU)、存儲(chǔ)器、以及外圍電路等。 SoC是與其它技術(shù)并行發(fā)展的,如絕緣硅,它可以提供增強(qiáng)的時(shí)鐘頻率,從而降低微芯片的功耗。 </p><p> 片上系統(tǒng)技術(shù)通常應(yīng)用于小型的,日益復(fù)雜的客戶電子設(shè)備。例如,聲音檢測(cè)設(shè)備的片上系統(tǒng)是在單個(gè)芯片上為所有用戶提供包括音頻接收端、模數(shù)轉(zhuǎn)換器(ADC)、微處理器、必要的存儲(chǔ)器以及輸入輸出邏輯控制等設(shè)備。
21、此外系統(tǒng)芯片還應(yīng)用于單芯片無線產(chǎn)品,諸如藍(lán)牙設(shè)備,支持單芯片WLAN和蜂窩電話解決方案。 </p><p> 2.2 本課題的研究?jī)?nèi)容</p><p> 本課題內(nèi)容是設(shè)計(jì)面向SOC的UART接口控制器,具體來說是設(shè)計(jì)基于Nios II處理器系統(tǒng)的UART接口控制器并在DE2開發(fā)板上進(jìn)行了驗(yàn)證。</p><p><b> 2.3 論文結(jié)構(gòu)</b&
22、gt;</p><p><b> 第一章為緒論</b></p><p> 第二章介紹了背景,包括UART、SOC.</p><p> 第三章介紹UART接口協(xié)議</p><p> 第四章為UART接口控制器的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 第五章為測(cè)試驗(yàn)證</b&g
23、t;</p><p><b> 第六章為總結(jié)</b></p><p> 第三章 UART接口協(xié)議</p><p> UART主要由數(shù)據(jù)總線接口、控制邏輯、波特率發(fā)生器、發(fā)送部分和接收部分等組成。UART內(nèi)部所實(shí)現(xiàn)的功能包括微處理器接口、發(fā)送緩沖器、發(fā)送移位寄存器、幀產(chǎn)生、奇偶校驗(yàn)、數(shù)據(jù)接收緩沖器、接收移位寄存器等。</p>
24、<p><b> 3.1幀格式</b></p><p> UART一幀由起始位、數(shù)據(jù)位、校驗(yàn)位和停止位組成。數(shù)據(jù)逐位傳輸,示意圖如圖 3-1所示。異步串口通信協(xié)議作為UART的一種,工作原理是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位地傳輸。 其中各位的意義如下:</p><p> 圖3-1 UART幀格式示意圖</p><p><
25、b> 一、起始位 </b></p><p> UART空閑時(shí)(沒有數(shù)據(jù)傳輸),總線為高電平(邏輯1),當(dāng)需要數(shù)據(jù)傳輸時(shí),首先發(fā)送一個(gè)“起始位”,起始位為一個(gè)低電平“邏輯0”。 </p><p> 二、數(shù)據(jù)位(資料位) </p><p> 如圖3-1的“2.”所示,緊挨著“起始位”的是數(shù)據(jù)位,它可以是4、5、6、7或8位,收/發(fā)雙方在數(shù)據(jù)開始
26、傳輸前,需要對(duì)雙方數(shù)據(jù)位位數(shù)作一致的定義,否則會(huì)導(dǎo)致數(shù)據(jù)的傳輸錯(cuò)誤;數(shù)據(jù)位的發(fā)送采用低位(LSB)先發(fā)送。通常采用ASCII碼。從最低位開始傳送,靠時(shí)鐘定位。</p><p><b> 三、校驗(yàn)位 </b></p><p> UART的校驗(yàn)位緊挨著數(shù)據(jù)位,采用奇/偶位校驗(yàn)方式,數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以此來校驗(yàn)資料傳
27、送的正確性。在實(shí)際的應(yīng)用中,校驗(yàn)位可以是奇校驗(yàn)或者偶校驗(yàn),也可以不包括校驗(yàn)位。結(jié)束位也不一定是1位,還可以是1.5或者是2。可有可無,是為了驗(yàn)證數(shù)據(jù)傳輸?shù)陌踩远O(shè)置的,在收/發(fā)雙方進(jìn)行數(shù)據(jù)傳輸前要預(yù)設(shè)好是否需要校驗(yàn)位,如果需要?jiǎng)t是奇校驗(yàn)還是偶校驗(yàn)。如圖2-1的“3.”所示。</p><p> 奇/偶校驗(yàn)是對(duì)數(shù)據(jù)進(jìn)行逐位同或/異或運(yùn)算。如公式(1)和公式(2)所示。</p><p>
28、DEVEN = D7⊕D6⊕D5⊕D4⊕D3⊕D2⊕D1⊕D0 公式(1) </p><p> DODD = ~DEVEN 公式(2) </p><p> 如對(duì)8位數(shù)據(jù)0x55(01010101b)作偶校驗(yàn)操作,得到的結(jié)果為“0”;作奇校驗(yàn)得到的結(jié)果為“1”。簡(jiǎn)單而言,偶校驗(yàn)增加一位“0”或“1”,使數(shù)據(jù)位加上校驗(yàn)位后“1”的個(gè)數(shù)為偶數(shù);而奇校驗(yàn)則是使“1”的個(gè)數(shù)為奇數(shù)。</p&
29、gt;<p> 如圖 3-2所示為奇偶校驗(yàn)RTL(寄存器傳輸級(jí))示意圖。使用移位寄存器進(jìn)行逐位操作。當(dāng)“LOAD”為邏輯“1”時(shí),加載移位寄存器的數(shù)據(jù)和初始化校驗(yàn)結(jié)果寄存器為邏輯“0”;之后在“CLK”的每個(gè)上升沿進(jìn)行逐位“異或”運(yùn)算。</p><p> 圖3-2 奇偶校驗(yàn)RTL示意圖</p><p><b> 四、停止位 </b></p&g
30、t;<p> UART的幀以停止位作為停止標(biāo)志,是在數(shù)據(jù)位(沒有校驗(yàn)位)和校驗(yàn)位(有校驗(yàn)位)之后發(fā)送1~2位的邏輯“1”。停止為可以為1位、1.5位和2位。當(dāng)發(fā)送完停止位之后,UART總線進(jìn)入空閑。</p><p><b> 五、空閑位</b></p><p> 空閑指UART總線上沒有數(shù)據(jù)進(jìn)行傳輸,表現(xiàn)為發(fā)送方輸出邏輯“1”,在空閑時(shí),接收方時(shí)刻
31、監(jiān)視UART總線上電平變化,當(dāng)發(fā)現(xiàn)起始化,則進(jìn)入數(shù)據(jù)接收狀態(tài),直至接收完一幀數(shù)據(jù),如果最后沒有檢測(cè)到停止位,則標(biāo)志幀錯(cuò)誤。</p><p> 六、波特率(Baudrate) </p><p> 波特率是衡量資料傳送速率的指針,由于UART沒有同步時(shí)鐘線,收/發(fā)雙方如果需要進(jìn)行正確的數(shù)據(jù)傳輸,則要在收/發(fā)雙方定義一致的位時(shí)鐘,位時(shí)鐘可以理解為UART總線一個(gè)位所占用的時(shí)間,即“波特率”。
32、在定義上,收/發(fā)雙方的波特率可以是隨意的,只需要保持一致,如雙方都是1000bps,但是,這不能兼容現(xiàn)有常用的設(shè)備,兼容性差。所以在工程應(yīng)用中,常用一些特定的波特率真,如4800ps、9600bps或115200bps等。</p><p><b> 3.2 示例</b></p><p> 因?yàn)閁ART的幀格式是可變,以下以幾個(gè)示例,形象地描述UART的不同設(shè)置下的
33、幀格式。</p><p><b> 一、常用幀格式 </b></p><p> 如圖3-3所示為8位數(shù)據(jù)位、無校驗(yàn)位、1位停止位的幀格式示意圖,一幀共有10位。發(fā)送的數(shù)據(jù)為0xA5。</p><p> 圖3-3 常用幀格式</p><p><b> 二、偶校驗(yàn) </b></p>
34、<p> 如圖3-4所示為8位數(shù)據(jù)位、偶校驗(yàn)、1位停止位的幀格式示意圖。每幀共有11位。發(fā)送的數(shù)據(jù)為0xA5,則偶校驗(yàn)結(jié)果為“0”。當(dāng)加個(gè)校驗(yàn)位后,可以看出,“1”的個(gè)數(shù)為偶數(shù)。</p><p> 圖3-4 帶偶校驗(yàn)幀格式</p><p><b> 三、奇校驗(yàn) </b></p><p> 如圖3-5所示為8位數(shù)據(jù)位、奇校驗(yàn)、
35、1位停止位的幀格式示意圖。每幀共有11位。發(fā)送的數(shù)據(jù)為0xA5,則奇校驗(yàn)結(jié)果為“1”。當(dāng)加個(gè)校驗(yàn)位后,可以看出,“1”的個(gè)數(shù)為奇數(shù)。</p><p> 圖3-5 帶奇校驗(yàn)幀格式 </p><p><b> 3.3 物理接口</b></p><p> UART的物理接口可以是RS-232、RS-485和IrDA紅外線等。其中RS-232是
36、最為大家容易接觸的,在2006年之前是大部分PC機(jī)的標(biāo)準(zhǔn)接口,早期電話線上網(wǎng)就是利用RS-232連接數(shù)PC機(jī)和Modem。</p><p> 一、RS-232連接器</p><p> RS-232的連接器常用的是DB-9,其連接器示意圖如圖3-6所示,為九針連接器。對(duì)于常用的簡(jiǎn)單應(yīng)用,使用到的有三根線:RxD、TxD和GND。</p><p> 圖3-6 DB
37、-9連接器示意圖</p><p> 實(shí)物圖如圖 3-7所示。</p><p> 圖3-7 DB-9實(shí)物圖</p><p> 二、RS-232電氣特性</p><p> RS-232規(guī)定說明了RS-323C標(biāo)準(zhǔn)對(duì)邏輯電平的定義。對(duì)于數(shù)據(jù)(信息碼):邏輯“1”(傳號(hào))的電平低于-3V,邏輯“0”(空號(hào))的電平高于+3V;對(duì)于控制信號(hào);接通
38、狀態(tài)(ON)即信號(hào)有效的電平高于+3V,斷開狀態(tài)(OFF)即信號(hào)無效的電平低于-3V,也就是當(dāng)傳輸電平的絕對(duì)值大于3V時(shí),電路可以有效地檢查出來,介于-3~+3V之間的電壓無意義,低于-15V或高于+15V的電壓也認(rèn)為無意義,因此,實(shí)際工作時(shí),應(yīng)保證電平在±(3~15)V之間。</p><p> 在TxD和RxD上: </p><p> 邏輯“1”為-3
39、V~-15V; </p><p> 邏輯“0”為+3~+15V。 </p><p> 在RTS、CTS、DSR、DTR和DCD等控制線上: </p><p> 信號(hào)有效(接通,ON狀態(tài),正電壓)= +3V~+15V ; </p><p> 信號(hào)無效(斷開,OFF狀態(tài),負(fù)
40、電壓) = -3V~-15V 。</p><p> 三、RS-232電平轉(zhuǎn)換電路</p><p> 由于RS-232的電氣特性和MCU等輸出的電氣特性不一致,所以對(duì)于TTL電平的MCU,使用RS-232連接器(如和PC機(jī)通信),需要使用電平轉(zhuǎn)換電路,通常使用集成電路(IC)完成電平轉(zhuǎn)換,常用的IC有MAX232等,當(dāng)然還有其它公司生產(chǎn)的IC,如SP232等,常以232作為標(biāo)識(shí)。<
41、/p><p> 如圖 3-8所示,是使用MAX232作為轉(zhuǎn)換IC的電路圖。</p><p> 圖3-8 電平轉(zhuǎn)換電路</p><p><b> 四、實(shí)際應(yīng)用 </b></p><p> RS-232 </p><p> RS-232在實(shí)際應(yīng)用一般用于點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳輸,當(dāng)
42、然在硬件和軟件上加上一些手段,可以用于多機(jī)通信,但應(yīng)用不多。在通信速率低于20kb/s時(shí),RS-232C所直接連接的最大物理距離為15m。</p><p> RS-485 </p><p> RS-485在工業(yè)應(yīng)用現(xiàn)場(chǎng)應(yīng)用比較廣泛,常使用單工通信組成一主多從的通信網(wǎng)絡(luò),使用雙絞線連接多臺(tái)設(shè)備,使用差分信號(hào)傳輸數(shù)據(jù),所以抗共模干擾能力比RS-232強(qiáng),共通信距離可以
43、超過1Km。</p><p> 第四章 UART接口控制器的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.1 UART接口控制器核(Core)的設(shè)計(jì)與實(shí)現(xiàn)</p><p> UART采用模塊化、層次化的設(shè)計(jì)思想,全部設(shè)計(jì)都采用Verilog HDL來實(shí)現(xiàn),其組成框圖如圖4-1所示。整個(gè)UART由串行數(shù)據(jù)發(fā)送模塊、串行數(shù)據(jù)接收模塊、接收和發(fā)送FIFO、總線接口邏輯、寄存器
44、和控制邏輯構(gòu)成。串行發(fā)送模塊的接收完成并/串及串/并的轉(zhuǎn)換;發(fā)送和接收FIFO用于緩存發(fā)送和接收的數(shù)據(jù);總線邏輯用于連接UART IP內(nèi)部總線和LPC模塊接口;寄存器和控制邏輯實(shí)現(xiàn)UART內(nèi)部所有數(shù)據(jù)的收發(fā)、控制和狀態(tài)寄存器、內(nèi)部中斷的控制及波特率信號(hào)的產(chǎn)生等??偩€接口單元主要完成寄存器訪問。因?yàn)榭偩€是由LPC總線模塊產(chǎn)生。在這里需要為L(zhǎng)PC總線模塊產(chǎn)生lpc ack信號(hào)。因?yàn)閮?nèi)部寄存器操作相當(dāng)快,我們可以讓lpc ack在讀寫信號(hào)有效
45、后下一時(shí)鐘周期就有效,這樣可以簡(jiǎn)化設(shè)計(jì)。在UART中用到兩個(gè)FIFO,一個(gè)發(fā)送FIFO,一個(gè)接收FIFO,均為16個(gè)字節(jié)深度,8位寬。</p><p> 圖4-1 UART的模塊功能框圖</p><p> 異步傳輸方式指收發(fā)兩端各自有相互獨(dú)立的定位時(shí)鐘,收方利用數(shù)據(jù)本身來進(jìn)行同步的傳輸方式。數(shù)據(jù)流按照一定的幀格式串行發(fā)送,一個(gè)完整的數(shù)據(jù)幀由起始位、數(shù)據(jù)位、校驗(yàn)位、結(jié)束位構(gòu)成,完成一個(gè)字
46、節(jié)(8位)數(shù)據(jù)的傳輸。</p><p> 圖4-2 UART頂層框圖</p><p> 設(shè)計(jì)采用經(jīng)典的自上以下的分層次結(jié)構(gòu)</p><p> 由圖4-2 UART的頂層框圖獲知,本設(shè)計(jì)的UART分為以下三個(gè)模塊(module):</p><p> 一、波特率發(fā)生器divider </p><p> 這個(gè)模塊
47、用于為UART的收/發(fā)器提供時(shí)鐘,這個(gè)時(shí)鐘為UART的波特率的16倍頻,即如果波特率要求為9600bps時(shí),該模塊輸出的時(shí)鐘為9600Hz×16=153600Hz。輸出時(shí)鐘需要可配置(UBRRH、UBRRL)。波特率的產(chǎn)生由一個(gè)16位的計(jì)數(shù)器來產(chǎn)生,計(jì)數(shù)器的初值由波特率設(shè)置寄存器的值來決定,當(dāng)計(jì)數(shù)器計(jì)數(shù)到0時(shí)產(chǎn)生一個(gè)enable信號(hào),該信號(hào)的產(chǎn)生頻率為波特率的16倍。enable信號(hào)被用來控制接收和發(fā)送模塊狀態(tài)機(jī)的運(yùn)行。從而達(dá)
48、到控制發(fā)流數(shù)據(jù)位時(shí)間的目的。波特率發(fā)生器實(shí)現(xiàn)波特率的變換。利用外部時(shí)鐘信號(hào)產(chǎn)生一個(gè)所需波特率l6倍的波特率時(shí)鐘,用來控制UART的接收與發(fā)送。接收模塊是用于接收串行信號(hào),并將其轉(zhuǎn)化為并行數(shù)據(jù);而發(fā)送模塊則將準(zhǔn)備輸出的并行數(shù)據(jù)按照UART的幀格式轉(zhuǎn)化為串行數(shù)據(jù)輸出。</p><p> 波特率發(fā)生器實(shí)際上是一個(gè)分頻器。主要是產(chǎn)生和.RS-232通信所采用的波特率同步的時(shí)鐘。由于串行數(shù)據(jù)幀與接收數(shù)據(jù)時(shí)鐘是異步的,所以
49、在UART的接收端在什么時(shí)刻將數(shù)據(jù)移入寄存器.怎樣選擇可靠的采樣點(diǎn)是非常關(guān)鍵的。一般采用高速時(shí)鐘對(duì)串行數(shù)據(jù)采樣是非常有效的方法。在實(shí)際設(shè)計(jì)中,一般最大選擇16倍于波特率的時(shí)鐘頻率。實(shí)現(xiàn)波特率時(shí)鐘的基本思路就是設(shè)計(jì)一個(gè)計(jì)數(shù)器,該計(jì)數(shù)器工作在速度很高的系統(tǒng)時(shí)鐘下,通過總線寫入不同的數(shù)值到波特率發(fā)生器保持寄存器中,然后用計(jì)數(shù)器的方式生成所需要的各種波特率就能得到所需的波特率時(shí)鐘.</p><p><b>
50、,</b></p><p> 圖4-3 波特率發(fā)生器模塊圖</p><p> 圖4-4 波特率發(fā)生器電路圖</p><p><b> 波特率發(fā)生器代碼</b></p><p><b> 二、接收器rxd </b></p><p> 接收模塊是整個(gè)UART
51、的設(shè)計(jì)的重點(diǎn),其主要功能是檢測(cè)數(shù)據(jù)的起始位,并對(duì)接收的數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換,并將接收好的數(shù)據(jù)儲(chǔ)存等待微機(jī)處理。由于串行數(shù)據(jù)幀與接收數(shù)據(jù)時(shí)鐘是異步的,接收功能實(shí)現(xiàn)的關(guān)鍵是接收器與每個(gè)接收字符同步。要保證異步通信的雙方準(zhǔn)確無誤地交換信息,必須有效控制采集通信線路上的電平信號(hào)的時(shí)機(jī)。由異步串行通信的特點(diǎn)可知,接收同步是通過低電平起始位實(shí)現(xiàn)的。而為了保證采樣的正確性,采樣在數(shù)據(jù)位的中間進(jìn)行,并且接收單元采樣數(shù)據(jù)的頻率與發(fā)送單元發(fā)送數(shù)據(jù)的頻率相同,是
52、波特率時(shí)鐘周期的l6倍,這樣可以有效地降低由于時(shí)鐘不匹配而導(dǎo)致的誤采樣。接收模塊的設(shè)計(jì)主要由狀態(tài)機(jī)實(shí)現(xiàn)其核心功能,采用獨(dú)熱編碼方式,雖然獨(dú)熱編碼多用了兩個(gè)觸發(fā)器,但所用組合電路可節(jié)省一些.使電路的速度和可靠性有顯著提高161??刂平邮掌鞯钠鹗迹V刮粰z測(cè),接收數(shù)據(jù)的計(jì)數(shù),移位寄存的功能。</p><p> 接收器時(shí)刻監(jiān)視UART總線的RXD線的電平,當(dāng)檢測(cè)到起始位,接收器啟動(dòng)接收狀態(tài)機(jī),根據(jù)寄存器(UCSRB、
53、UCSRC)的設(shè)定,解析RXD線的電平,當(dāng)完成一個(gè)字節(jié)接收,輸出接收到的數(shù)據(jù)和線狀態(tài)。</p><p> 接收器的設(shè)計(jì)主要是圍繞“有限狀態(tài)機(jī)”而進(jìn)行。 </p><p> 圖4-5 接收器模塊圖</p><p> 圖4-6 接收器模塊電路圖 </p><p><b> 接收器部分代碼
54、</b></p><p> 串行數(shù)據(jù)接收器用于檢測(cè)串行數(shù)據(jù)的開始位,并在特定的時(shí)刻將串行總線上的串行數(shù)據(jù)進(jìn)行采樣,同時(shí)對(duì)數(shù)據(jù)流的幀格式進(jìn)行檢查,最后將轉(zhuǎn)換的并行數(shù)據(jù)輸出。</p><p> 因?yàn)檩斎氲拇袛?shù)據(jù)信號(hào)與內(nèi)部時(shí)鐘是異步的,因此,串行信號(hào)實(shí)際是一個(gè)跨時(shí)鐘域的信號(hào),為了保證信號(hào)被可靠的采樣并避免亞穩(wěn)態(tài)情況,我們采用了比較穩(wěn)妥的處理方法,那就是對(duì)輸入的外部串行數(shù)據(jù)信號(hào)進(jìn)
55、行了兩次采樣。</p><p> 采用以下verilog描述可以實(shí)現(xiàn)對(duì)輸入信號(hào)的兩次采樣。</p><p> always@(posedge clk)</p><p><b> begin</b></p><p> sig_stagel<:=siga;</p><p> sig_o
56、ut <:sig_stagel;</p><p><b> end</b></p><p> 同串行發(fā)送模塊一樣,我們采用有限狀態(tài)機(jī)來描述整個(gè)串行數(shù)據(jù)的接收過程。</p><p> 按照接收串行數(shù)據(jù)的順序,整個(gè)過程分為空閑狀態(tài)(idle)、接收開始位狀態(tài)(rec—start)、接收準(zhǔn)備狀態(tài)(rec--prepare)、接收數(shù)據(jù)狀態(tài)(
57、rec—bit)、接收數(shù)據(jù)完畢狀態(tài)(rec—end)、接收核驗(yàn)位狀(rec_parity)、校驗(yàn)位計(jì)算狀態(tài)(calc_parity)、校驗(yàn)位檢查狀態(tài)(check_parity)、等待(wait)、接收停止位狀態(tài)(rec_stop)、保存數(shù)據(jù)狀態(tài)(push)。整個(gè)狀態(tài)轉(zhuǎn)移見下圖。</p><p> 圖4-7 串行數(shù)據(jù)接收狀態(tài)轉(zhuǎn)移</p><p> 外部復(fù)位使?fàn)顟B(tài)從idle開始。</
58、p><p> 空閑狀態(tài)(idle):在此狀態(tài),不斷檢測(cè)UART使能和串行輸入信號(hào)的狀態(tài)。</p><p> 如果串行輸入信號(hào)出現(xiàn)由高到低的電平變化并且UART使能有效,則將采樣計(jì)數(shù)器置為14,并進(jìn)入下一狀態(tài)(rex _start)。</p><p> 接收開始位狀態(tài)(rex_start):在此狀態(tài),狀態(tài)機(jī)等待7個(gè)時(shí)鐘周期(也就是半個(gè)波特率的時(shí)間),然后重新對(duì)串行輸
59、入信號(hào)進(jìn)行采樣,如果仍為低,則認(rèn)為收到的開始位有效,馬上進(jìn)入接收準(zhǔn)備狀態(tài)(rex) ;否則認(rèn)為數(shù)據(jù)總線上先前檢測(cè)到的低電平為干擾,開始位無效,重新返回到空閑狀態(tài)。</p><p> 接收準(zhǔn)備狀態(tài)(rex_prepare):在此狀態(tài)中,根據(jù)LCR寄存器中的值算出即將接收的數(shù)據(jù)幀中數(shù)據(jù)位的個(gè)數(shù),然后等待采樣計(jì)數(shù)器被減至0,隨即轉(zhuǎn)入接收數(shù)據(jù)狀態(tài)(rex_bit),同時(shí)將采樣計(jì)數(shù)器再次置為14。</p>
60、<p> 接收數(shù)據(jù)狀態(tài)(rec_bit):當(dāng)采樣計(jì)數(shù)器計(jì)到7時(shí),接收串行數(shù)據(jù)線上的數(shù)據(jù)位,并放入移位寄存器中,并將數(shù)據(jù)位個(gè)數(shù)計(jì)數(shù)器減1。當(dāng)采樣計(jì)數(shù)器計(jì)到0時(shí),立刻轉(zhuǎn)入接收數(shù)據(jù)完畢狀態(tài)(rex_end)。</p><p> 接收數(shù)據(jù)完畢狀態(tài)(rex_end):在此狀態(tài)中,如果判斷到數(shù)據(jù)位數(shù)計(jì)數(shù)器已經(jīng)為0,表明數(shù)據(jù)字已經(jīng)接收完畢,這時(shí)要判斷幀中是否有校驗(yàn)位,如果沒有校驗(yàn)位,那么接下來將會(huì)是停止位的接收(
61、rex _stop);如果有核驗(yàn)位的話,下一狀態(tài)將會(huì)是接收核驗(yàn)位狀態(tài)(rex parity)。而如果發(fā)現(xiàn)數(shù)據(jù)位還沒有接收完時(shí),將會(huì)回到接收數(shù)據(jù)狀態(tài)(rex bit)繼續(xù)進(jìn)行數(shù)據(jù)位的獲取。</p><p> 接收校驗(yàn)位狀態(tài)(rex_parity):在采樣計(jì)數(shù)器計(jì)到7時(shí)開始對(duì)校驗(yàn)位進(jìn)行獲取。隨后進(jìn)入校驗(yàn)位計(jì)算狀態(tài)(calc_parity)。</p><p> 校驗(yàn)位計(jì)算狀態(tài)(calc):在
62、該狀態(tài),將根據(jù)接收的數(shù)及檢驗(yàn)位一起parity)</p><p> 進(jìn)行檢驗(yàn)各計(jì)算。隨后進(jìn)入校驗(yàn)位檢查狀態(tài)(check_parity)。</p><p> 校驗(yàn)位檢查狀態(tài)(check_parity):根據(jù)寄存器的核驗(yàn)位設(shè)置及接收數(shù)據(jù)的校</p><p> 驗(yàn)和來判斷是否出現(xiàn)校驗(yàn)錯(cuò)。隨后進(jìn)入等待(wait)狀態(tài)。</p><p> 等待
63、(wait):等待采樣計(jì)數(shù)器被減到0。此時(shí)可以進(jìn)入接收停止位狀態(tài)(rec_stop)。</p><p> 接收停止位狀態(tài)(rex_stop):仍然是在第7個(gè)采樣時(shí)鐘位置,對(duì)串行數(shù)據(jù)采樣獲得停止位,如果發(fā)現(xiàn)串行輸入數(shù)據(jù)為0,那么停止位不正常,將把frame error信號(hào)置為有效。在采樣時(shí)鐘計(jì)為0時(shí)進(jìn)入保存數(shù)據(jù)狀態(tài)(push)。</p><p> 保存數(shù)據(jù)狀態(tài)(push):在此狀態(tài)中,將
64、 push信號(hào)置為有效,同時(shí)將接收到的數(shù)據(jù)及狀態(tài)位壓入FIFO中。不過如果發(fā)現(xiàn)檢測(cè)到是break狀態(tài),那么壓入的數(shù)據(jù)將會(huì)是0。狀態(tài)然后將再次回到空閑(idle)狀態(tài)。完成一次數(shù)據(jù)幀的接收。</p><p><b> 三、發(fā)送器txd </b></p><p> 發(fā)送模塊的設(shè)計(jì)相對(duì)簡(jiǎn)單。其功能是將要發(fā)送的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù).并且在輸出的串行數(shù)據(jù)流中加入起始位和停
65、止位。發(fā)送器首先將要發(fā)送的8位數(shù)據(jù)寄存,并在最低位后添加起始‘O’.在最高位前添加停止位‘l’,組成10位要發(fā)送的數(shù)據(jù).然后根據(jù)UART內(nèi)核模塊的計(jì)數(shù)值將相應(yīng)的數(shù)據(jù)送人移位寄存器輸入端。UART內(nèi)核模塊輸出的計(jì)數(shù)值是從0依次計(jì)到9。即先將要發(fā)送數(shù)據(jù)的最低位送人移位寄存器。</p><p> 發(fā)送器是監(jiān)視EBI總線,當(dāng)檢測(cè)需要發(fā)送一個(gè)字節(jié)時(shí),發(fā)送器啟動(dòng)發(fā)送狀態(tài)機(jī),同樣時(shí),發(fā)送器會(huì)根據(jù)寄存器(UCSRB、UCSRC
66、)的設(shè)定,逐位往UART總線的TXD線發(fā)送數(shù)據(jù)。當(dāng)發(fā)送完成一個(gè)字節(jié),發(fā)送器輸出發(fā)送狀態(tài)。和接收器相似地,發(fā)送器的設(shè)計(jì)也是圍繞“有限狀態(tài)機(jī)”而進(jìn)行。</p><p> 圖4-8 發(fā)送模塊圖</p><p> 圖4-9 發(fā)送模塊電路圖</p><p><b> 發(fā)送器部分代碼</b></p><p> 串行數(shù)據(jù)發(fā)送模
67、塊將數(shù)據(jù)由并行數(shù)據(jù)按照一定的數(shù)據(jù)格式轉(zhuǎn)換為串行數(shù)據(jù)流,并從串行總線輸出。該部分設(shè)計(jì)采用有限狀態(tài)機(jī)實(shí)現(xiàn),分為空閑狀態(tài)(idle)、取數(shù)據(jù)(pop_byte)、發(fā)送開始位(send_start)、發(fā)送數(shù)據(jù)(Send_byte)、發(fā)送核驗(yàn)位(Send_parity)、發(fā)送停止位(Send_stop)這六個(gè)狀態(tài)。</p><p> 圖4-10 發(fā)送狀態(tài)遷移圖</p><p><b>
68、 串行發(fā)送狀態(tài)轉(zhuǎn)移</b></p><p> 空閑狀態(tài)(idle):當(dāng)所有數(shù)據(jù)(包括FIFO)都發(fā)送完畢后,狀態(tài)進(jìn)入該狀態(tài)。在此狀態(tài)中,一直檢查發(fā)送FIFO中的數(shù)據(jù)個(gè)數(shù),一旦FIFO中有數(shù)據(jù)后,馬上進(jìn)入下一狀態(tài)pop 。</p><p> 取數(shù)據(jù)(pop_byte):在此狀態(tài)中,首先將發(fā)送FIFO的pop信號(hào)有效從FIFO中取出數(shù)據(jù),同時(shí)根據(jù)LCR[1:0]的值來得到發(fā)送的
69、數(shù)據(jù)位數(shù)。分別算出數(shù)據(jù)的奇偶校驗(yàn)值,然后轉(zhuǎn)入下一狀態(tài)(Send_start)。</p><p> 發(fā)送開始位(send_start):輸入0并保持16個(gè)elk。</p><p> 發(fā)送數(shù)據(jù)(Send ):將數(shù)據(jù)每隔16個(gè)cll逐位發(fā)送到。發(fā)送過程中byte)TX還將根據(jù)LCR寄存器的值來得到將要發(fā)送的校驗(yàn)位。如果設(shè)置為不發(fā)送校驗(yàn)位,狀態(tài)直接跳轉(zhuǎn)到發(fā)送停止位(send_stop)。<
70、;/p><p> 發(fā)送核驗(yàn)位(Send_parity) :輸出校驗(yàn)位并保持16個(gè)clk。</p><p> 發(fā)送停止位(Send_stop):根據(jù)LCR的值得到發(fā)送停止位的長(zhǎng)度,輸出1。該狀態(tài)執(zhí)行完成后,跳轉(zhuǎn)到空閑狀態(tài)開始下一個(gè)數(shù)據(jù)字符的發(fā)送。</p><p> 最后要說明的是,當(dāng)LCR寄存器的break信號(hào)被置為有效后,所有的數(shù)據(jù)不應(yīng)該被輸出。</p>
71、;<p> 4.2 UART頂層設(shè)計(jì)</p><p> UART的頂層設(shè)計(jì)是使用和整合以上三個(gè)模塊,以寄存器的方式接到EBI,控制收/發(fā)器模塊。</p><p> 圖4-11 UART頂層設(shè)計(jì)框圖</p><p> 圖4-12 UART電路圖</p><p> 頂層主要是完成寄存器的實(shí)現(xiàn),使FPGA配置的UART可以以
72、外設(shè)方式接受單片機(jī)的監(jiān)控。 </p><p><b> 一、奇偶校驗(yàn)位設(shè)計(jì)</b></p><p> 如前面的文字可以了解到,奇/偶校驗(yàn)是對(duì)數(shù)據(jù)進(jìn)行逐位同或/異或運(yùn)算。可以概括成如公式(1)和公式(2)所示。</p><p> DEVEN = D7⊕D6⊕D5⊕D4⊕D3⊕D2⊕D1⊕D0 公式(1) </p><p&
73、gt; DODD = ~DEVEN 公式(2) </p><p> 對(duì)于串行UART,數(shù)據(jù)是逐位傳輸,奇偶檢驗(yàn)顯得很簡(jiǎn)單,如圖4-13所示為串行數(shù)據(jù)奇偶校驗(yàn)示意圖,可以看出,只需要一個(gè)異或門和一個(gè)D觸發(fā)器,D觸發(fā)器用于寄存當(dāng)前異結(jié)果,異或門監(jiān)視串行數(shù)據(jù),檢測(cè)到下一個(gè)串行數(shù)據(jù)到來時(shí),把這位的串行數(shù)據(jù)和D觸發(fā)器寄存的結(jié)果作異或運(yùn)算,D觸發(fā)器再把這個(gè)異或結(jié)果寄存起來。</p><p> 圖
74、4-13 串行數(shù)據(jù)奇偶校驗(yàn)</p><p> UART收/發(fā)器分別包含一個(gè)奇偶校驗(yàn),發(fā)送器的奇偶校驗(yàn)用于對(duì)將要發(fā)送的數(shù)據(jù)產(chǎn)生檢驗(yàn)值,發(fā)送到TXD線上;接收器的奇偶校驗(yàn)用于對(duì)接收的數(shù)據(jù)產(chǎn)生校驗(yàn)值,再和從RXD線上接收到的校驗(yàn)值比較,產(chǎn)生校驗(yàn)結(jié)果。</p><p> 代碼實(shí)現(xiàn)請(qǐng)見源低碼。 </p><p><b> 二、有限狀態(tài)機(jī)設(shè)計(jì)</b>
75、</p><p> 有限狀態(tài)機(jī)--Finite State Machine(FSM)的設(shè)計(jì)在FPGA設(shè)計(jì)中很經(jīng)常用到,在本設(shè)計(jì)狀態(tài)機(jī)也是采用常用的三步式結(jié)構(gòu)――更新狀態(tài)機(jī)當(dāng)前狀態(tài)、判斷狀態(tài)機(jī)下一個(gè)狀態(tài)和根據(jù)狀態(tài)機(jī)當(dāng)前狀態(tài)決定輸出。</p><p> 如程序清單 2.3(見附錄)_為FMS三步式結(jié)構(gòu)偽代碼,本設(shè)計(jì)UART的接收器和發(fā)送器的狀態(tài)機(jī)是按照這種代碼結(jié)構(gòu)編寫。</p>
76、<p> 首先,先定義狀態(tài)機(jī)的狀態(tài)值和編碼方式(如Gray、One-Hot等編碼),按規(guī)范編寫的狀態(tài)機(jī)可以被綜合器發(fā)現(xiàn),可以在綜合器選項(xiàng)中選擇狀態(tài)機(jī)的編碼方式,所以代碼中狀態(tài)機(jī)的狀態(tài)值設(shè)定不是太關(guān)鍵,綜合器是會(huì)自動(dòng)分配的.</p><p><b> 狀態(tài)機(jī)部分代碼</b></p><p> 三、UART接收器設(shè)計(jì)</p><p&
77、gt; UART接收器的框圖如圖4-14所示。由框圖看出,UART接收器的設(shè)計(jì)主要是圍繞“接收狀態(tài)機(jī)”進(jìn)行。RXD線需經(jīng)濾波器處理再進(jìn)入狀態(tài)機(jī)處理,同步時(shí)鐘是有用于使UART接收器的波特率時(shí)鐘和發(fā)送器同步,波特率計(jì)數(shù)器產(chǎn)生波特率,控制狀態(tài)機(jī)的數(shù)據(jù)接收。</p><p> 整個(gè)接收器的工作由RXD線上的有效起始位啟動(dòng)。</p><p> 圖4-14 UART接收器框圖</p>
78、;<p> (1)總線電平濾波采樣 </p><p> 由于使用環(huán)境的干擾等,RXD線可能出現(xiàn)毛刺,所示需要RXD的輸入需經(jīng)濾波處理,處理方法是在一位數(shù)據(jù)中間取三個(gè)點(diǎn)的電平值,少于2個(gè)點(diǎn)為電平“1”,則把該位判為電平“0”,否則判為電平“1”,這種方法稱為“多數(shù)表決法”。</p><p> 如圖 4-15所求為這種方法的原理和實(shí)現(xiàn)示意圖,表 4.1所示為對(duì)應(yīng)的真值表。
79、</p><p> 圖4-15 RXD濾波(多數(shù)表決)</p><p> 表4-1 RXD濾波真值表</p><p> 對(duì)RXD線上的濾波適用于起始位的檢測(cè)、數(shù)據(jù)位接收、校驗(yàn)位接收和停止位的判別。</p><p><b> ?。?)同步時(shí)鐘 </b></p><p> 由于UART的收/發(fā)
80、兩個(gè)設(shè)備的時(shí)鐘可以存在差異,如果接收器在接收時(shí)和發(fā)送器的時(shí)鐘不同步,增加了傳輸錯(cuò)誤的機(jī)率,所以,接收器需要在檢測(cè)到起始位的起始邊沿時(shí),同步自身的時(shí)鐘,這樣將減小因雙方時(shí)鐘上的差異而導(dǎo)致數(shù)據(jù)傳輸錯(cuò)誤的機(jī)率。</p><p> 該功能的實(shí)現(xiàn)是在接收器空閑時(shí),當(dāng)檢測(cè)到RXD線的電平從高到低的變化時(shí),復(fù)位接收器的濾特率計(jì)數(shù)器,即濾特率計(jì)數(shù)器在檢測(cè)到以上條件時(shí)才開始計(jì)數(shù)。</p><p><
81、b> ?。?)停止位處理 </b></p><p> 停止位是發(fā)送器明確告訴接收器一幀的結(jié)束,發(fā)送器發(fā)送完停止位后可以立即發(fā)送下一幀數(shù)據(jù)的起始位。</p><p> 如上小節(jié)所述,檢測(cè)一位的電平是取中間三點(diǎn)電平作多數(shù)表決運(yùn)算,這個(gè)法規(guī)同樣對(duì)停止位的接收有效。如果多數(shù)表決為“0”電平,則置位“幀錯(cuò)誤”標(biāo)志位。</p><p> 但有別于其它位的
82、接收,如圖4-16所示,完成停止位的接收不是在一個(gè)波特位結(jié)束處,而是在取完三點(diǎn)電平作多數(shù)表決運(yùn)算后立取結(jié)束停止位的接收,之后接收器馬上重新監(jiān)視RXD線電平的下降沿,開始檢測(cè)下一幀的起始位。</p><p> 圖4-16 接收器停止位處理</p><p> 停止位處理可以降低UART收/發(fā)兩個(gè)設(shè)備因時(shí)鐘的不一致而導(dǎo)致的傳輸失敗率。</p><p> ?。?)奇偶校
83、驗(yàn)處理 </p><p> 奇偶校驗(yàn)是用于標(biāo)記狀態(tài)寄存器的“校驗(yàn)錯(cuò)誤”標(biāo)志位。如4.2.1小節(jié)所述的奇偶校驗(yàn)設(shè)計(jì),無論是否使能奇偶校驗(yàn),接收器每接收到一個(gè)數(shù)據(jù)位就運(yùn)算一次校驗(yàn),完成數(shù)據(jù)位的接收后得到剛接收到數(shù)據(jù)的校驗(yàn)值,如果禁止了奇偶校驗(yàn),這個(gè)校驗(yàn)值被放棄;如果使能了校驗(yàn),這個(gè)校驗(yàn)值會(huì)和接發(fā)到的校驗(yàn)位作比較,根據(jù)比較結(jié)果標(biāo)志相關(guān)的狀態(tài)位。</p><p> ?。?)接收器狀態(tài)機(jī) <
84、/p><p> 圖4-17所示為接收器狀態(tài)機(jī)的狀態(tài)圖,狀態(tài)機(jī)的設(shè)計(jì)在4.2.2 小節(jié)已有所述,本模塊的狀態(tài)機(jī)是按照其結(jié)構(gòu)編寫。</p><p> 狀態(tài)機(jī)在空閑狀態(tài)時(shí),RXD為高電平時(shí),由狀態(tài)圖看出,空閑狀態(tài)下,RXD的下降沿將啟動(dòng)狀態(tài)機(jī),這個(gè)下降沿是UART通信協(xié)議的起始位。</p><p> 使用狀態(tài)機(jī)處理接收,可以使設(shè)計(jì)思路清晰,有利于設(shè)計(jì)的維護(hù)和升級(jí)。 &l
85、t;/p><p> 圖4-17 接收器狀態(tài)機(jī)</p><p><b> (6)模塊接口 </b></p><p> 接收器模塊的接口定義如程序清單 4.2所示</p><p> 四、UART發(fā)送器設(shè)計(jì)</p><p> 發(fā)送器的設(shè)計(jì)相對(duì)接收器簡(jiǎn)單很多,因?yàn)榘l(fā)送器只需根據(jù)控制輸入,往TXD逐位
86、輸出數(shù)據(jù),在這里省去了發(fā)送器的設(shè)計(jì)過程,請(qǐng)自行參考源代碼,代碼設(shè)計(jì)和接收器相似。</p><p> 如程序清單 2.5所示為發(fā)送器模塊接口。</p><p><b> 第五章 測(cè)試驗(yàn)證</b></p><p> 5.1 基于quartus II的功能仿真測(cè)試</p><p><b> 一、發(fā)送數(shù)據(jù)測(cè)
87、試</b></p><p> ?。ㄒ唬┩鶖?shù)據(jù)寄存器(UDR)寫輸入數(shù)據(jù)0xA5</p><p> 根據(jù)接口設(shè)計(jì),數(shù)據(jù)寄存器UDR的內(nèi)部地址是0,故操作時(shí)序?yàn)椋簝?nèi)部寄存器地址address = 0;寫請(qǐng)求置高,即write_req = 1,數(shù)據(jù)線Write_data = A5,如下圖所示。</p><p><b> 圖5-1</b>
88、;</p><p> ?。ǘ┌l(fā)送數(shù)據(jù)線TX電平情況</p><p> 根據(jù)測(cè)試,當(dāng)往數(shù)據(jù)寄存器定入數(shù)據(jù)后,如果控制器處于空閑狀態(tài),將立即發(fā)送該數(shù)據(jù)。數(shù)據(jù)是逐bit發(fā)送的,低位先發(fā)送(LSB),前一步中寫入的數(shù)據(jù)是0xA5=0b10100101,故發(fā)送時(shí)比特流應(yīng)為0b10100101,加上起始位(低電平)和停止位(高電平),共10位,最終比特流程為0b0101001011。下圖為寫入數(shù)據(jù)
89、后的發(fā)送數(shù)據(jù)線txd_xo的波形仿真截圖,從圖中可以看到,UART控制器數(shù)據(jù)發(fā)送功能正確。</p><p><b> 圖5-2</b></p><p><b> 二、接收數(shù)據(jù)測(cè)試</b></p><p> (1)數(shù)據(jù)線RX接收比特流0b0101011111</p><p> 在仿真波形文件上
90、編輯數(shù)據(jù)線rxd_xi的電平值,包括1個(gè)起始位,8個(gè)數(shù)據(jù)位和1個(gè)停止位,如下圖所示。</p><p><b> 圖5-3</b></p><p> ?。?)讀取數(shù)據(jù)寄存器(UDR)</p><p> 當(dāng)數(shù)據(jù)寄存器UDR接收到一幀數(shù)據(jù)后,中斷線int_o將置高,以通知微控制器中斷服務(wù)程序讀取數(shù)據(jù)寄存器中的數(shù)據(jù)。UDR內(nèi)部地址為0,故讀取時(shí)序?yàn)?/p>
91、:內(nèi)部寄存器地址address = 0;寫請(qǐng)求置高,即Read_req = 1。結(jié)果數(shù)據(jù)線read_data上給出了數(shù)據(jù)0xF5,如下圖所示。</p><p><b> 圖5-4</b></p><p> 分析,數(shù)據(jù)線rxd_xi上接收到的有效數(shù)據(jù)比特流為0b10101111,該比特流是低位在前,正常位序?yàn)?b11110101,即0xF5,說明UART控制順數(shù)據(jù)接
92、收功能正確。</p><p> 5.2 基于FPGA的系統(tǒng)級(jí)測(cè)試</p><p><b> 第六章 總結(jié)</b></p><p> 隨著電子技術(shù)的日新月異,電子設(shè)備向著小型化、低功耗方向發(fā)展。本文以某手持設(shè)備接口板開發(fā)為契機(jī),結(jié)合實(shí)際需求,通過了解和學(xué)習(xí)最新的電子技術(shù)與設(shè)計(jì)手段,提出了不同于傳統(tǒng)的采用ASIC芯片實(shí)現(xiàn)的方案,也就是采用
93、SOC來實(shí)現(xiàn)UART控制器的設(shè)計(jì)。UART是一款比較有代表的串行通信接口。文中介紹了UART通信協(xié)議及程序設(shè)計(jì)過程。SOC作為可編程器件,具有硬件電路簡(jiǎn)潔、系統(tǒng)靈活性高的特點(diǎn)。這種方式實(shí)現(xiàn)的串行通信可以在保證了系統(tǒng)的功能性的同時(shí)使系統(tǒng)硬件更加簡(jiǎn)潔,從而降低系統(tǒng)功耗和成本。</p><p> 論文采用業(yè)界流行的Verilog HDL語言,按照自頂而下的設(shè)計(jì)流程完成了UART內(nèi)部各模塊的設(shè)計(jì)和仿真。在后期,在實(shí)物開
94、發(fā)平臺(tái)上進(jìn)行了的設(shè)計(jì)驗(yàn)證,結(jié)果證實(shí)了該方案能夠完成擴(kuò)展UART的功能,并且能夠擁有更小的體積,消耗更少的能量,非常適合手持設(shè)備的應(yīng)用。</p><p> 隨著IP核的不斷積累和成熟以及SOC芯片工藝的提高,它的設(shè)計(jì)靈活性、低功耗、高度集成性等優(yōu)勢(shì)會(huì)越來越明顯,必將成為一種主流的設(shè)計(jì)方法得到廣泛的應(yīng)用。參考文獻(xiàn)</p><p> [1] Nios II Processor Referen
95、ce Handbook. Altera Corporation.2006,10</p><p> [2] Nios II Software Developer’s Handbook. Altera Corporation.2006</p><p> [3] DE2 User Manual. Altera Corporation.2006</p><p> [4
96、] Quartus II Handbook v9.1.Altera Corporation.2009</p><p> [5] 魏亞防,李振華,盧雪萍.基于FPGA的UART控制器的實(shí)現(xiàn). 浙江紹興:浙江郵電職業(yè)技術(shù)學(xué)院,2011</p><p> [6] 唐建.LPC總線接口UART控制器FPGA實(shí)現(xiàn).西安:西安電子科技大學(xué),2008</p><p> [
97、7] 夏宇聞,《Verilog 數(shù)字系統(tǒng)設(shè)計(jì)》 北京:北京航空航天大學(xué)出版社,2004</p><p> [8] 潘松,王國(guó)棟《VHDL實(shí)用教程》 成都:電子科技大學(xué)出版社,2001,7</p><p> [9] 季雄,段繼海,胡媛媛,等.《基于Verilog HDL 的UART設(shè)計(jì)》[J].微計(jì)算機(jī)信息</p><p> [10]馬忠梅,祝烈煌,李善平,
98、葉楠《ARM&Linux嵌入式系統(tǒng)教程》,北京航空航天大學(xué)出版社</p><p><b> 致 謝</b></p><p> 本次畢業(yè)設(shè)計(jì)是在兩位指導(dǎo)教員--戴紫彬教授與李偉教員的悉心指導(dǎo)下完成的。導(dǎo)師嚴(yán)謹(jǐn)求是的治學(xué)態(tài)度,深厚廣博的學(xué)術(shù)功底,春風(fēng)化雨的指導(dǎo)精神,在整個(gè)設(shè)計(jì)過程中,無疑給我了莫大的幫助和鼓舞。在此,我衷心的向兩位教員表示感謝!</p&
99、gt;<p> 同時(shí),我要感謝母校四年來對(duì)我的教育和培養(yǎng),感謝它為我提供了良好的學(xué)習(xí)和生活環(huán)境,感謝各位領(lǐng)導(dǎo)、教員在思想上、學(xué)習(xí)上、生活上對(duì)我的關(guān)懷和指導(dǎo),感謝各位同學(xué)在學(xué)習(xí)生活中給予我的關(guān)心和幫助,尤其是劉繼德、張白冰、賈志和楊昌盛同學(xué),是他們?cè)谡撐淖珜懠罢n題實(shí)施過程中給予我?guī)椭椭С郑⒃谠O(shè)計(jì)過程多次提出了他們寶貴的意見,完善了我的論文。</p><p> 最后,再次感謝所有幫助過我的教員和
100、同學(xué)!</p><p><b> 附 錄</b></p><p><b> 狀態(tài)機(jī)設(shè)計(jì)代碼</b></p><p> 程序清單 4.1 FMS三步式結(jié)構(gòu)偽代碼/* </p><p> * 定義狀態(tài)機(jī)的狀態(tài) */ </p><p> `define STAT_WID
101、TH 3 </p><p> parameter </p><p> STAT_IDLE = 1, </p><p> STAT_ONE = 2, </p><p> STAT_TWO = 3, </p><p> STAT_THREE = 4; </p><p> reg [`ST
102、AT_WIDTH-1] rStatCur; </p><p> reg [`STAT_WIDTH-1] rStatNext; </p><p> * 更新狀態(tài)機(jī)的當(dāng)前狀態(tài) */ </p><p> always @(posedge clk or negedge rst_n) </p><p><b> begin </
103、b></p><p> if (~rst_n) begin </p><p> rStatCur <= STAT_IDLE; </p><p><b> end </b></p><p> else begin </p><p> rStatCur <= rStatNe
104、xt; </p><p><b> end </b></p><p><b> end </b></p><p> * 根據(jù)當(dāng)前狀態(tài)機(jī)的狀態(tài)和判斷條件, 決定狀態(tài)機(jī)的下一個(gè)狀態(tài), * 綜合成組合邏輯 */ </p><p> always @( </p><p>
105、rStatCur or </p><p><b> ... or </b></p><p><b> ... </b></p><p><b> ) </b></p><p><b> begin </b></p><p>
106、 case (rStatCur) </p><p> STAT_IDLR: begin </p><p><b> if (...) </b></p><p> rStatNext <= STAT_ONE; </p><p><b> else </b></p><
107、;p> rStatNext <= STAT_IDLE; </p><p><b> end </b></p><p> STAT_ONE: begin </p><p><b> ...; </b></p><p><b> ...; </b></p
108、><p><b> end </b></p><p> STAT_TWO: begin </p><p><b> ...; </b></p><p><b> ...; </b></p><p><b> end </b>&
109、lt;/p><p> STAT_THREE: begin </p><p><b> ...; </b></p><p><b> ...; </b></p><p><b> end </b></p><p> default: begin &l
110、t;/p><p> rStatNext <= STAT_IDLE; </p><p><b> end </b></p><p><b> endcase </b></p><p><b> end </b></p><p> * 根據(jù)當(dāng)前狀
111、態(tài)機(jī)的狀態(tài), 決定輸出 */ </p><p> always @(posedge clk or negedge rst_n) </p><p><b> begin </b></p><p> if (~rst_n) begin </p><p><b> end </b></p&g
112、t;<p> else begin </p><p> case (rStatCur) </p><p> STAT_IDLR: begin </p><p><b> ...; </b></p><p><b> ...; </b></p><p>
113、<b> end </b></p><p> STAT_ONE: begin </p><p><b> ...; </b></p><p><b> ...; </b></p><p><b> end </b></p><
114、p> STAT_TWO: begin </p><p><b> ...; </b></p><p><b> ...; </b></p><p><b> end </b></p><p> STAT_THREE: begin </p><
115、p><b> ...; </b></p><p><b> ...; </b></p><p><b> end </b></p><p> default: begin </p><p><b> ...; </b></p>
116、<p><b> ...; </b></p><p><b> end </b></p><p><b> endcase </b></p><p><b> end </b></p><p><b> end </b
117、></p><p><b> 模塊接口設(shè)計(jì)代碼</b></p><p> 程序清單 4.2 接收器模塊接口</p><p> **==============================================</p><p> ** 模塊 名: rxd </p><p>
118、; ** 描述: 實(shí)現(xiàn)UART的接收功能, 可能選擇數(shù)據(jù)位, 檢查奇偶檢驗(yàn), 幀錯(cuò)誤檢查功能, 實(shí) 現(xiàn)了ARV單片機(jī)的異步串口(UART) </p><p> **============================================== </p><p> module rxd ( </p><p><b> clk, <
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于usb接口的溫度控制器畢業(yè)設(shè)計(jì)
- 基于fpga的uart控制器設(shè)計(jì)
- 面向SOC的UART及DMA控制器IP軟核的設(shè)計(jì).pdf
- LPC總線接口UART控制器FPGA實(shí)現(xiàn).pdf
- 基于嵌入式片上系統(tǒng)的AC97控制器IP核設(shè)計(jì).pdf
- 畢業(yè)設(shè)計(jì)--液位系統(tǒng)的控制器設(shè)計(jì)
- 基于FPGA的UART控制器設(shè)計(jì)定稿.doc
- CAN總線控制器的接口IP核設(shè)計(jì)與實(shí)現(xiàn).pdf
- 畢業(yè)設(shè)計(jì)---汽車控制器的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----水位控制器設(shè)計(jì)
- usb2.0主機(jī)控制器片上系統(tǒng)設(shè)計(jì)的研究
- 溫度控制器畢業(yè)設(shè)計(jì)
- 畢業(yè)論文-基于fpga的uart控制器設(shè)計(jì)【精校排版】
- pci接口控制器的設(shè)計(jì)
- abs控制器畢業(yè)設(shè)計(jì)
- pid控制器畢業(yè)設(shè)計(jì)
- 溫度控制器畢業(yè)設(shè)計(jì)
- 基于FPGA的UART控制器設(shè)計(jì)論文初稿.doc
- 全速USB設(shè)備控制器接口IP核的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 畢業(yè)設(shè)計(jì)--微波爐控制器系統(tǒng)
評(píng)論
0/150
提交評(píng)論