![FPGA的UART完整設(shè)計_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/e9b52ffe-149b-4b7c-a29c-7af21031f1bb/e9b52ffe-149b-4b7c-a29c-7af21031f1bb1.gif)
![FPGA的UART完整設(shè)計_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/e9b52ffe-149b-4b7c-a29c-7af21031f1bb/e9b52ffe-149b-4b7c-a29c-7af21031f1bb2.gif)
![FPGA的UART完整設(shè)計_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/e9b52ffe-149b-4b7c-a29c-7af21031f1bb/e9b52ffe-149b-4b7c-a29c-7af21031f1bb3.gif)
![FPGA的UART完整設(shè)計_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/e9b52ffe-149b-4b7c-a29c-7af21031f1bb/e9b52ffe-149b-4b7c-a29c-7af21031f1bb4.gif)
![FPGA的UART完整設(shè)計_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/e9b52ffe-149b-4b7c-a29c-7af21031f1bb/e9b52ffe-149b-4b7c-a29c-7af21031f1bb5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、電子科技大學(xué)成都學(xué)院畢業(yè)設(shè)計論文第三章UART設(shè)計3.1 UART的幀格式 在 UART 中,數(shù)據(jù)位是以字符為傳送單位,數(shù)據(jù)的前、后要有起始位、停止位,另外可以在停止位的前面加上一個比特(bit)的校驗位。其幀格式如圖所示。數(shù)據(jù)位 起始位D0 D1 D2 D3 D7 校驗位 停止位以9600波特率接收或發(fā)送,每一位時間為1/9600秒,或48MHZ晶振5000次計數(shù)圖3_1數(shù)據(jù)幀格式 文章 通 過 分析UART的功能,利用有限狀態(tài)機來描述UART核心控制邏輯的方法,將其核心功能集成,從而使整個設(shè)計更加穩(wěn)定、可靠。基本的UART通信只需要兩條信號線就可以完成數(shù)據(jù)的相互通信。UART的功能模塊如圖
2、3_2所示。波特發(fā)生器Uart控制器接收模塊發(fā)送模塊對象模塊圖3_2UART的功能模塊圖173.2 UART模塊在大規(guī)模電路的設(shè)計中,廣泛采用層次化,結(jié)構(gòu)化的設(shè)計方法。它將一個完整的硬件設(shè)計任務(wù)從系統(tǒng)級開始,劃分為若干個可操作的模塊,編制出相應(yīng)的模型并進行仿真驗證,最后在系統(tǒng)級上進行組合。這樣在提高設(shè)計效率的同時又提高了設(shè)計質(zhì)量,是目前復(fù)雜數(shù)字系統(tǒng)實現(xiàn)的主要手段,也是本文設(shè)計思想的基礎(chǔ)。其系統(tǒng)模塊可劃分為4個部分,如波特發(fā)生器,控制器,接收器,發(fā)送器,如圖3-3所示:readsendclear_checkreadsend Clr3 clr4ks csData_inData_outclearRe
3、ad_enablesend_enablecounterscountersresetCounters(control)stateT1clk_enableClk_clearClk(波特發(fā)生器)clk圖3-3uart結(jié)構(gòu)圖3.2.1主要引腳功能介紹 Read:串行輸入send:串行輸出 Data_in:并行輸入data_out:并行輸出 Cs:通知cpu接收數(shù)據(jù)位ks:通知cpu發(fā)送準(zhǔn)備位 Reset:重啟輸入state:uart狀態(tài)輸入 Clk:48M時鐘輸入3.2.2UART主體程序timescale 1ns/1nsmodule gs_opt(input wire read,input wire
4、 clk,input wire reset,input wire state,input wire 7:0 dat_in, output wire send,output wire cs,output wire ks,output wire 7:0 dat_out );wire send_enable; wire read_enable; wire clk_enable3;wire clk_enable4; wire clear3 ; wire clear4 ; wire clk_enable;wire 7:0 counters; wire clear ; wire t1; /*read,se
5、nd,cs,ks,reset,state,clk,dat_in,dat_out); /module uart(read,send,cs,ks,reset,state,clk,dat_in,dat_out);input read,clk,reset,state;/read為串行輸入,clk為時鐘輸入50MHZ,reset為重啟鍵input7:0 dat_in;/并行數(shù)據(jù)輸入output send,cs,ks;/send為串行輸出,cs為通知cpu接收數(shù)據(jù)位,ks為發(fā)送準(zhǔn)備位output7:0 dat_out;/并行數(shù)據(jù)輸出wire clear,clk_enable,read_enable,cle
6、ar3,send_enable,clear4,t1;wire7:0 counters,dat_in;*/rxd u1 (.dat_out (dat_out) ,.cs (cs) ,.read (read) ,.reset (reset) ,.clk_enable3 (clk_enable3) ,.clk (clk) ,.read_enable (read_enable) ,.clear3 (clear3) ,.counters (counters) ); /接收數(shù)據(jù)moduletxd u2 (.dat_in (dat_in),.ks (ks),.send (send),.reset (rese
7、t),.clk_enable4 (clk_enable4),.clk (clk),.send_enable (send_enable),.clear4 (clear4),.counters( counters);/發(fā)送數(shù)據(jù)moduleclk_bau u3 ( .clk(clk) , .t1 (t1), .clk_enable (clk_enable) ); /時鐘計數(shù)器模塊ctrl u4( .read_enable (read_enable) , .send_enable (send_enable), .clk (clk), .state (state), .t1 (t1), .read (r
8、ead ), .counters (counters), .reset (reset ), .clear (clear) );check_cle u5 ( .state (state), .clear3 (clear3), .clear4 (clear4), .clear (clear), .clk_enable3 (clk_enable3), .clk_enable4 (clk_enable4), .clk_enable (clk_enable) );endmodule/3.3UART發(fā)送模塊3.3.1UART的數(shù)據(jù)發(fā)送服務(wù) 發(fā)送器實現(xiàn)的功能是將輸入的8位并行數(shù)據(jù)變?yōu)榇袛?shù)據(jù),同時在數(shù)據(jù)頭部
9、加起始位,在數(shù)據(jù)位尾部加奇偶校驗位和停止位。數(shù)據(jù)發(fā)送服務(wù)如表3.1計數(shù)器 0 18 9 10操作發(fā)送低電平發(fā)送數(shù)據(jù)和奇偶校驗發(fā)送奇偶校驗結(jié)果發(fā)送高電平表3.1數(shù)據(jù)發(fā)送其基 本 特 點是: 在 信 號線上共有兩種狀態(tài),可分別用邏輯1和邏輯。來區(qū)分。在發(fā)送器空閑時,數(shù)據(jù)線應(yīng)該保持在邏輯高電平狀態(tài)。發(fā)送 起 始 位:該位是一個邏輯0,總是加在每一幀的頭部,提示接受器數(shù)據(jù)傳輸即將開始,在接收數(shù)據(jù)位過程中又被分離出去,占據(jù)一個數(shù)據(jù)位的時間。發(fā)送 數(shù) 據(jù) 位:在起始位之后就是數(shù)據(jù)位,一般為8位一個字節(jié)的數(shù)據(jù),低位在前,高位在后。如字母C在ASCII表中是十進制67,二進制01000011,那么傳輸?shù)膶⑹?
10、10000100。并在數(shù)據(jù)發(fā)送過程當(dāng)中,進行數(shù)據(jù)位奇偶校驗。 發(fā)送校 驗 位:該位一般用來判斷接收的數(shù)據(jù)位有無錯誤,常用的校驗方法是奇偶校驗法。將3過程當(dāng)中奇偶校驗的結(jié)果輸入到數(shù)據(jù)線,并占一個數(shù)據(jù)位時鐘。 停止位 :停止位總在每一幀的末尾,為邏輯1,用于標(biāo)志一個字符傳送的結(jié)束,占據(jù)一個數(shù)據(jù)位的時間。 幀:從起始位到停止位之間的一組數(shù)據(jù)稱為一幀。3.3.2UART的數(shù)據(jù)發(fā)送操作如圖3-4拉低電平空閑檢測Cpu發(fā)送位檢測 自檢測接cpu傳入數(shù)據(jù)拉高電平發(fā)送等待數(shù)據(jù)發(fā)送和奇偶校驗奇偶結(jié)果發(fā)送圖3-4數(shù)據(jù)發(fā)送操作解釋:采用9600波特率發(fā)送從cpu傳入數(shù)據(jù):是指將data_in端口的數(shù)據(jù)存入寄存器中C
11、pu發(fā)送為檢測:是指將ks寄存器置位,即數(shù)據(jù)發(fā)送完畢3.3.3UART的數(shù)據(jù)發(fā)送模塊程序module rxd(dat_out,cs,read,reset, clk_enable3,clk,read_enable,clear3,counters);/接收數(shù)據(jù)moduleinput read_enable;input read,reset,clk;/read為串行輸入,read_control為時鐘控制,reset為重啟鍵input7:0 counters;output cs,clear3,clk_enable3;/cs為通知cpu讀取數(shù)據(jù)位output7:0 dat_out;/wire clea
12、r3;reg cs,cs1,clk_enable3;reg7:0 data_out;/移位寄存器 reg parity_check_result,parity_result,clear3,clear1;/always(posedge clk)beginif(read_enable)/當(dāng)read_enable為高電平時為發(fā)送操作狀態(tài)beginclk_enable3<=1;clear3<=clear1;endelsebeginclear3<=1;endend/always(negedge counters0)/接收操作if(read_enable & !reset)beg
13、in if (counters=8'b00011000) /1begindata_out7<=read;parity_check_result<=parity_check_result + read;endelse if (counters=8'b00101000) /2begindata_out6<=read;parity_check_result<=parity_check_result + read;endelse if (counters=8'b00111000) /3 begindata_out5<=read;parity_che
14、ck_result<=parity_check_result + read;endelse if (counters=8'b01001000) /4begindata_out4<=read;parity_check_result<=parity_check_result + read;endelse if (counters=8'b01011000) /5begindata_out3<=read;parity_check_result<=parity_check_result + read;endelse if (counters=8'b0
15、1101000) /6begindata_out2<=read;parity_check_result<=parity_check_result + read;endelse if (counters=8'b01111000) /7begindata_out1<=read;parity_check_result<=parity_check_result + read;endelse if (counters=8'b10001000) /8begindata_out0<=read;parity_check_result<=parity_chec
16、k_result + read;endelse if (counters=8'b10011000) /9進行奇偶校驗檢測beginparity_result<=read; parity_result<=#2 (parity_check_result = parity_result) ? 1:0;endelse if (counters=8'b10101000) /0進行幀檢測begincs1<=(read) ? 1:0; endelse if (counters=8'b10101010) /01給cpu發(fā)送接收信號begincs<=(cs1 &a
17、mp;& parity_result) ? 1:0;/當(dāng)奇偶校驗結(jié)果與幀檢測結(jié)果都為1時,cs置位clear1<=1;/clk_enable<=0;/clk_enable3<=0;endelse if(counters=8'b00001000)/檢測是否是毛刺beginclear1<=(!read)?0:1;endelse clear1<=0;endelse clear1<=1;endmodule3.3.4UART的數(shù)據(jù)發(fā)送模塊程序仿真圖當(dāng)reset為零時圖3-5reset為零時仿真圖 如圖為UART的數(shù)據(jù)發(fā)送模塊的功能仿真圖,為方便觀察,其
18、中的時鐘是直接給出來的,根據(jù)圖中的數(shù)據(jù)判讀,其功能為正確,UART的數(shù)據(jù)發(fā)送模塊編譯成功。1. 當(dāng)計時器為140ns時,為數(shù)據(jù)接收2. 當(dāng)計時器為357ns時,為數(shù)據(jù)發(fā)送3. 當(dāng)計時器為705ns時,為奇偶校驗結(jié)果發(fā)送4. 當(dāng)計時器為825ns時,發(fā)送高電平當(dāng)reset為1時如圖3-6圖3-6reset為1時仿真圖3.4UART接收模塊3.4.1UART數(shù)據(jù)接收服務(wù) 串行 數(shù) 據(jù) 幀和接收時鐘是異步的,由邏輯1跳變?yōu)檫壿?可視為一個數(shù)據(jù)幀的開始,所以接收器首先要判斷起始位。如表3.2計數(shù)器 0 18 9 10操作數(shù)據(jù)起始位檢測數(shù)據(jù)接收和奇偶校驗奇偶校驗數(shù)據(jù)判斷表3.2uart的數(shù)據(jù)接收服務(wù) 其
19、基 本 特 點是:UART 接收狀態(tài) 一 共 有 4個:state0(檢測起始位),stat e1( 對數(shù)據(jù)位進行采樣,并串/并轉(zhuǎn)換),state2(奇偶校驗 分析),state3(接收數(shù)據(jù)正確與否檢測)。 起始位判讀:當(dāng)UART接收器復(fù)位以后,接收器將處 于這一狀態(tài)。在該狀態(tài),控制器一直等待read電平的跳 變,即從邏輯1變?yōu)檫壿?,也就是等待起始位的到來 。一旦檢測到起始位,就對采樣時鐘elk一 rev 上跳沿計 數(shù),當(dāng)計數(shù)為8時,也就是確保在起始位的中間點 ,然后轉(zhuǎn)到state1 狀態(tài)。 數(shù)據(jù)接收 :該狀態(tài)下,每間隔16位倍頻采樣一位 串行數(shù)據(jù),接收8位異步數(shù)據(jù)并進行串/并轉(zhuǎn)換。即對 c
20、lk一 rev 上跳沿計數(shù),當(dāng)為16時,就對數(shù)據(jù)采樣,這樣 保證了數(shù)據(jù)位是在中點處被采樣的,同時串/并轉(zhuǎn)換,當(dāng)檢測到已收到8個數(shù)據(jù)后以后,便進入了state2狀態(tài)。 奇偶校驗 :該狀態(tài)實現(xiàn)的功能是奇偶校驗。本文采 用的是偶校驗。校驗結(jié)束以后,轉(zhuǎn)到state3狀態(tài)。 數(shù)據(jù)幀判讀 :該狀態(tài)是用來幀校驗的,即在校驗位 以后,檢測停止位是否為邏輯高電平3.4.2UART數(shù)據(jù)接收操作圖3-7UART數(shù)據(jù)接收操作起始位檢測空閑檢測Cpu接收位檢測 檢測毛刺檢測數(shù)據(jù)幀檢測接收等待數(shù)據(jù)位讀取和奇偶校驗奇偶結(jié)果比較圖3-7UART數(shù)據(jù)接收操作解釋:數(shù)據(jù)接收速度9600波特率,以16倍頻接收cpu接收位檢測:當(dāng)奇
21、偶結(jié)果比較和數(shù)據(jù)幀檢測都正確時,cpu檢測接收位cs置位3.4.3UART的數(shù)據(jù)接收模塊程序/發(fā)送數(shù)據(jù)模塊module txd(dat_in,send,reset,clk_enable4,clk,send_enable,clear4,counters,ks);/發(fā)送數(shù)據(jù)moduleinput7:0 dat_in,counters;input reset,clk,send_enable;output send,clk_enable4,clear4;output ks;/jiawire clear;wire7:0 dat_s;reg send,parity_result,ks;reg clk_en
22、able,clear1,clear4,clk_enable4;reg7:0 date_s;/always(posedge clk)beginif(send_enable & !reset)/當(dāng)send_enable為高電平時為發(fā)送操作狀態(tài)beginclk_enable4<=1;clear4<=clear1;endelsebeginclear4<=1;endend /always(posedge clk)if(send_enable & !reset)beginif(counters=8'b00000001)/0beginsend<=0;date_
23、s<=dat_in;/?parity_result<=1;endelse if(counters=8'b00010000)/1beginsend<=date_s0;parity_result<=parity_result + date_s0;endelse if(counters=8'b00100000)/2beginsend<=date_s1;parity_result<=parity_result + date_s0;endelse if(counters=8'b00110000)/3beginsend<=date_s2;p
24、arity_result<=parity_result + date_s0;endelse if(counters=8'b01000000)/4beginsend<=date_s3;parity_result<=parity_result + date_s0;endelse if(counters=8'b01010000)/5beginsend<=date_s4;parity_result<=parity_result + date_s0; endelse if(counters=8'b01100000)/6beginsend<=da
25、te_s5;parity_result<=parity_result + date_s0;endelse if(counters=8'b01110000)/7beginsend<=date_s6;parity_result<=parity_result + date_s0;endelse if(counters=8'b10000000)/8beginsend<=date_s7;parity_result<=parity_result + date_s0;endelse if(counters=8'b10010000)/9發(fā)送奇偶校驗結(jié)果be
26、ginsend=parity_result;endelse if(counters=8'b10100000)/0發(fā)送高電平beginsend<=1;endelse if(counters=8'b10101111)/0beginclear1<=1;ks<=(send && parity_result) ? 1:0;endelse if(counters=8'b00000000)beginsend<=1;endelse clear1<=0; end else send<=1;endmodule/3.4.4UART的數(shù)據(jù)接收
27、模塊程序功能仿真圖圖3-8當(dāng)counters指定時間時功能仿真圖3-8當(dāng)counters指定時間時解釋:由圖可明顯看出data0和data1變化,模塊功能仿真通過圖3-9當(dāng)counters未指定時間時功能仿真圖3-9當(dāng)counters未指定時間時功能仿真3.5UART控制器3.5.1UART控制器服務(wù) UART控制器實質(zhì)上是一組計數(shù)器,由state決定計數(shù)器數(shù)據(jù)發(fā)送對象,在這里指定當(dāng)state為1時,發(fā)送到UART接收模塊,反之,發(fā)送到UART發(fā)送模塊。當(dāng)計數(shù)到指定數(shù)據(jù)時,觸發(fā)指定模塊的制定操作。3.5.2UART控制器模塊程序module counters(read_enable,send_
28、enable,clk,state,t1,read,counters,reset,clear);/程序計數(shù)寄存器input clk,state,t1,read,reset,clear;/state為uart狀態(tài)輸入,/clear為程序計數(shù)寄存器清零控制位output7:0 counters;output read_enable,send_enable;reg read_enable,send_enable,control;/read_enable為接收控制位?/send_enable為發(fā)送控制位,control為程序計數(shù)寄存器為零狀態(tài)寄存位reg7:0 counters;/8位程序計數(shù)寄存器al
29、ways(posedge clk)/當(dāng)程序計數(shù)寄存器為零時,程序計數(shù)寄存器為零狀態(tài)寄存位置位begincontrol<=(!counters)? 1 : 0;end/always(negedge read)/uart發(fā)送或接收狀態(tài)判斷if(control)beginif(state)beginif(!read)beginread_enable<=1;send_enable<=0;endelsebeginsend_enable<=0;endendelsebeginsend_enable<=1;read_enable<=0;endend/always(posedge t1)if(!reset && !clear)/reset為1時,clear為1時程序計數(shù)寄存器清零beginif(counters>8'b10101111)counters<=8'b00000000;elsecounters<=counters + 1;en
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小動物流行病知識競賽考試題庫300題(含答案)
- 2025年新型電力系統(tǒng)(配電自動化)職業(yè)技能競賽參考試題庫(含答案)
- 2025年安徽省職教高考《語文》核心考點必刷必練試題庫(含答案)
- 2025年桂林山水職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025年昆明幼兒師范高等??茖W(xué)校高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025年新疆建設(shè)職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 中班冬季主題活動策劃方案五篇
- 全新合同式環(huán)保管家服務(wù)下載
- 食品銷售代理合同范本
- 商品房買賣合同預(yù)售
- 蘇教版四年級數(shù)學(xué)下冊第三單元第二課時《常見的數(shù)量關(guān)系》課件
- 浙江省臺州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評估政治試題 含解析
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024年全國高考新課標(biāo)卷物理真題(含答案)
- 勞動合同薪酬與績效約定書
- 足療店營銷策劃方案
- 學(xué)校安全一崗雙責(zé)
- 交通工程公司乳化瀝青儲油罐拆除工程安全協(xié)議書
- YS/T 441.1-2014有色金屬平衡管理規(guī)范第1部分:銅選礦冶煉
評論
0/150
提交評論