




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章UART設(shè)計(jì)3.1 UART的幀格式 在 UART 中,數(shù)據(jù)位是以字符為傳送單位,數(shù)據(jù)的前、后要有起始位、停止位,另外可以在停止位的前面加上一個(gè)比特(bit)的校驗(yàn)位。其幀格式如圖所示。數(shù)據(jù)位 起始位D0 D1 D2 D3 D7 校驗(yàn)位 停止位以9600波特率接收或發(fā)送,每一位時(shí)間為1/9600秒,或48MHZ晶振5000次計(jì)數(shù)圖3_1數(shù)據(jù)幀格式 文章 通 過(guò) 分析UART的功能,利用有限狀態(tài)機(jī)來(lái)描述UART核心控制邏輯的方法,將其核心功能集成,從而使整個(gè)設(shè)計(jì)更加穩(wěn)定、可靠?;镜腢ART通信只需要兩條信號(hào)線就可以完成數(shù)據(jù)的相互通信。UART的功能模塊如圖3_2所示。波特發(fā)生器Uart控
2、制器接收模塊發(fā)送模塊對(duì)象模塊圖3_2UART的功能模塊圖3.2 UART模塊在大規(guī)模電路的設(shè)計(jì)中,廣泛采用層次化,結(jié)構(gòu)化的設(shè)計(jì)方法。它將一個(gè)完整的硬件設(shè)計(jì)任務(wù)從系統(tǒng)級(jí)開(kāi)始,劃分為若干個(gè)可操作的模塊,編制出相應(yīng)的模型并進(jìn)行仿真驗(yàn)證,最后在系統(tǒng)級(jí)上進(jìn)行組合。這樣在提高設(shè)計(jì)效率的同時(shí)又提高了設(shè)計(jì)質(zhì)量,是目前復(fù)雜數(shù)字系統(tǒng)實(shí)現(xiàn)的主要手段,也是本文設(shè)計(jì)思想的基礎(chǔ)。其系統(tǒng)模塊可劃分為4個(gè)部分,如波特發(fā)生器,控制器,接收器,發(fā)送器,如圖3-3所示:readsendclear_checkreadsendClr3 clr4ks csData_inData_outclearRead_enablesend_enabl
3、ecounterscountersresetCounters(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時(shí)鐘輸入3.2.2UART主體程序timescale 1ns/1nsmodule gs_opt(input wire read,input wire clk,input wire res
4、et,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,send,cs,ks,reset,state
5、,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為時(shí)鐘輸入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,clear3,send_enable,clea
6、r4,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 (reset),.clk_enable4 (clk
7、_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í)鐘計(jì)數(shù)器模塊ctrl u4( .read_enable (read_enable) , .send_enable (send_enable), .clk (clk), .state (state), .t1 (t1), .read (read ), .counters (co
8、unters), .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ā)送器實(shí)現(xiàn)的功能是將輸入的8位并行數(shù)據(jù)變?yōu)榇袛?shù)據(jù),同時(shí)在數(shù)據(jù)頭部加起始位,在數(shù)據(jù)位尾部加奇偶校驗(yàn)位和停止
9、位。數(shù)據(jù)發(fā)送服務(wù)如表3.1計(jì)數(shù)器 0 18 9 10操作發(fā)送低電平發(fā)送數(shù)據(jù)和奇偶校驗(yàn)發(fā)送奇偶校驗(yàn)結(jié)果發(fā)送高電平表3.1數(shù)據(jù)發(fā)送其基 本 特 點(diǎn)是: 在 信 號(hào)線上共有兩種狀態(tài),可分別用邏輯1和邏輯。來(lái)區(qū)分。在發(fā)送器空閑時(shí),數(shù)據(jù)線應(yīng)該保持在邏輯高電平狀態(tài)。發(fā)送 起 始 位:該位是一個(gè)邏輯0,總是加在每一幀的頭部,提示接受器數(shù)據(jù)傳輸即將開(kāi)始,在接收數(shù)據(jù)位過(guò)程中又被分離出去,占據(jù)一個(gè)數(shù)據(jù)位的時(shí)間。發(fā)送 數(shù) 據(jù) 位:在起始位之后就是數(shù)據(jù)位,一般為8位一個(gè)字節(jié)的數(shù)據(jù),低位在前,高位在后。如字母C在ASCII表中是十進(jìn)制67,二進(jìn)制01000011,那么傳輸?shù)膶⑹?10000100。并在數(shù)據(jù)發(fā)送過(guò)程當(dāng)中,
10、進(jìn)行數(shù)據(jù)位奇偶校驗(yàn)。 發(fā)送校 驗(yàn) 位:該位一般用來(lái)判斷接收的數(shù)據(jù)位有無(wú)錯(cuò)誤,常用的校驗(yàn)方法是奇偶校驗(yàn)法。將3過(guò)程當(dāng)中奇偶校驗(yàn)的結(jié)果輸入到數(shù)據(jù)線,并占一個(gè)數(shù)據(jù)位時(shí)鐘。 停止位 :停止位總在每一幀的末尾,為邏輯1,用于標(biāo)志一個(gè)字符傳送的結(jié)束,占據(jù)一個(gè)數(shù)據(jù)位的時(shí)間。 幀:從起始位到停止位之間的一組數(shù)據(jù)稱為一幀。UART的數(shù)據(jù)發(fā)送操作如圖3-4拉低電平空閑檢測(cè)Cpu發(fā)送位檢測(cè) 自檢測(cè)接cpu傳入數(shù)據(jù)拉高電平發(fā)送等待數(shù)據(jù)發(fā)送和奇偶校驗(yàn)奇偶結(jié)果發(fā)送圖3-4數(shù)據(jù)發(fā)送操作解釋:采用9600波特率發(fā)送從cpu傳入數(shù)據(jù):是指將data_in端口的數(shù)據(jù)存入寄存器中Cpu發(fā)送為檢測(cè):是指將ks寄存器置位,即數(shù)據(jù)發(fā)送完
11、畢UART的數(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為時(shí)鐘控制,reset為重啟鍵input7:0 counters;output cs,clear3,clk_enable3;/cs為通知cpu讀取數(shù)據(jù)位output7:0 dat_out;/wire clear3;reg cs,cs1,clk_enable3;reg7
12、:0 data_out;/移位寄存器 reg parity_check_result,parity_result,clear3,clear1;/always(posedge clk)beginif(read_enable)/當(dāng)read_enable為高電平時(shí)為發(fā)送操作狀態(tài)beginclk_enable3<=1;clear3<=clear1;endelsebeginclear3<=1;endend/always(negedge counters0)/接收操作if(read_enable & !reset)begin if (counters=8'b0001100
13、0) /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_check_result<=parity_check_res
14、ult + 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'b01101000) /6begindata_out2<=
15、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_check_result + read;endelse if (co
16、unters=8'b10011000) /9進(jìn)行奇偶校驗(yàn)檢測(cè)beginparity_result<=read; parity_result<=#2 (parity_check_result = parity_result) ? 1:0;endelse if (counters=8'b10101000) /0進(jìn)行幀檢測(cè)begincs1<=(read) ? 1:0; endelse if (counters=8'b10101010) /01給cpu發(fā)送接收信號(hào)begincs<=(cs1 && parity_result) ? 1:0;
17、/當(dāng)奇偶校驗(yàn)結(jié)果與幀檢測(cè)結(jié)果都為1時(shí),cs置位clear1<=1;/clk_enable<=0;/clk_enable3<=0;endelse if(counters=8'b00001000)/檢測(cè)是否是毛刺beginclear1<=(!read)?0:1;endelse clear1<=0;endelse clear1<=1;endmoduleUART的數(shù)據(jù)發(fā)送模塊程序仿真圖當(dāng)reset為零時(shí)圖3-5reset為零時(shí)仿真圖 如圖為UART的數(shù)據(jù)發(fā)送模塊的功能仿真圖,為方便觀察,其中的時(shí)鐘是直接給出來(lái)的,根據(jù)圖中的數(shù)據(jù)判讀,其功能為正確,UART的數(shù)
18、據(jù)發(fā)送模塊編譯成功。1. 當(dāng)計(jì)時(shí)器為140ns時(shí),為數(shù)據(jù)接收2. 當(dāng)計(jì)時(shí)器為357ns時(shí),為數(shù)據(jù)發(fā)送3. 當(dāng)計(jì)時(shí)器為705ns時(shí),為奇偶校驗(yàn)結(jié)果發(fā)送4. 當(dāng)計(jì)時(shí)器為825ns時(shí),發(fā)送高電平當(dāng)reset為1時(shí)如圖3-6圖3-6reset為1時(shí)仿真圖3.4UART接收模塊3.4.1UART數(shù)據(jù)接收服務(wù) 串行 數(shù) 據(jù) 幀和接收時(shí)鐘是異步的,由邏輯1跳變?yōu)檫壿?可視為一個(gè)數(shù)據(jù)幀的開(kāi)始,所以接收器首先要判斷起始位。如表3.2計(jì)數(shù)器 0 18 9 10操作數(shù)據(jù)起始位檢測(cè)數(shù)據(jù)接收和奇偶校驗(yàn)奇偶校驗(yàn)數(shù)據(jù)判斷表3.2uart的數(shù)據(jù)接收服務(wù) 其基 本 特 點(diǎn)是:UART 接收狀態(tài) 一 共 有 4個(gè):state0(
19、檢測(cè)起始位),stat e1( 對(duì)數(shù)據(jù)位進(jìn)行采樣,并串/并轉(zhuǎn)換),state2(奇偶校驗(yàn) 分析),state3(接收數(shù)據(jù)正確與否檢測(cè))。 起始位判讀:當(dāng)UART接收器復(fù)位以后,接收器將處 于這一狀態(tài)。在該狀態(tài),控制器一直等待read電平的跳 變,即從邏輯1變?yōu)檫壿?,也就是等待起始位的到來(lái) 。一旦檢測(cè)到起始位,就對(duì)采樣時(shí)鐘elk一 rev 上跳沿計(jì) 數(shù),當(dāng)計(jì)數(shù)為8時(shí),也就是確保在起始位的中間點(diǎn) ,然后轉(zhuǎn)到state1 狀態(tài)。 數(shù)據(jù)接收 :該狀態(tài)下,每間隔16位倍頻采樣一位 串行數(shù)據(jù),接收8位異步數(shù)據(jù)并進(jìn)行串/并轉(zhuǎn)換。即對(duì) clk一 rev 上跳沿計(jì)數(shù),當(dāng)為16時(shí),就對(duì)數(shù)據(jù)采樣,這樣 保證了數(shù)據(jù)
20、位是在中點(diǎn)處被采樣的,同時(shí)串/并轉(zhuǎn)換,當(dāng)檢測(cè)到已收到8個(gè)數(shù)據(jù)后以后,便進(jìn)入了state2狀態(tài)。 奇偶校驗(yàn) :該狀態(tài)實(shí)現(xiàn)的功能是奇偶校驗(yàn)。本文采 用的是偶校驗(yàn)。校驗(yàn)結(jié)束以后,轉(zhuǎn)到state3狀態(tài)。 數(shù)據(jù)幀判讀 :該狀態(tài)是用來(lái)幀校驗(yàn)的,即在校驗(yàn)位 以后,檢測(cè)停止位是否為邏輯高電平3.4.2UART數(shù)據(jù)接收操作圖3-7UART數(shù)據(jù)接收操作起始位檢測(cè)空閑檢測(cè)Cpu接收位檢測(cè) 檢測(cè)毛刺檢測(cè)數(shù)據(jù)幀檢測(cè)接收等待數(shù)據(jù)位讀取和奇偶校驗(yàn)奇偶結(jié)果比較圖3-7UART數(shù)據(jù)接收操作解釋:數(shù)據(jù)接收速度9600波特率,以16倍頻接收cpu接收位檢測(cè):當(dāng)奇偶結(jié)果比較和數(shù)據(jù)幀檢測(cè)都正確時(shí),cpu檢測(cè)接收位cs置位UART的數(shù)據(jù)
21、接收模塊程序/發(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_enable,clear1,clear4,clk_enable4;reg7:0 da
22、te_s;/always(posedge clk)beginif(send_enable & !reset)/當(dāng)send_enable為高電平時(shí)為發(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_s<=dat_in;/?parity_result<=1;endels
23、e 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;parity_result<=parity_result + date_s0;
24、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<=date_s5;parity_result<=parity_result + da
25、te_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ā)送奇偶校驗(yàn)結(jié)果beginsend=parity_result;endelse if(counters=
26、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; endelse send<=1;endmodule/UART的數(shù)據(jù)接收模塊程序功能仿真圖圖3-8當(dāng)counters指定時(shí)間時(shí)功能仿真圖3-8當(dāng)counters指定時(shí)間
27、時(shí)解釋:由圖可明顯看出data0和data1變化,模塊功能仿真通過(guò)圖3-9當(dāng)counters未指定時(shí)間時(shí)功能仿真圖3-9當(dāng)counters未指定時(shí)間時(shí)功能仿真3.5UART控制器3.5.1UART控制器服務(wù) UART控制器實(shí)質(zhì)上是一組計(jì)數(shù)器,由state決定計(jì)數(shù)器數(shù)據(jù)發(fā)送對(duì)象,在這里指定當(dāng)state為1時(shí),發(fā)送到UART接收模塊,反之,發(fā)送到UART發(fā)送模塊。當(dāng)計(jì)數(shù)到指定數(shù)據(jù)時(shí),觸發(fā)指定模塊的制定操作。3.5.2UART控制器模塊程序module counters(read_enable,send_enable,clk,state,t1,read,counters,reset,clear);/
28、程序計(jì)數(shù)寄存器input clk,state,t1,read,reset,clear;/state為uart狀態(tài)輸入,/clear為程序計(jì)數(shù)寄存器清零控制位output7:0 counters;output read_enable,send_enable;reg read_enable,send_enable,control;/read_enable為接收控制位?/send_enable為發(fā)送控制位,control為程序計(jì)數(shù)寄存器為零狀態(tài)寄存位reg7:0 counters;/8位程序計(jì)數(shù)寄存器always(posedge clk)/當(dāng)程序計(jì)數(shù)寄存器為零時(shí),程序計(jì)數(shù)寄存器為零狀態(tài)寄存位置位be
29、gincontrol<=(!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時(shí),clear為1時(shí)程序計(jì)數(shù)寄存器清零beginif(counters>8'b10101111)counters<=8'b00000000;elsecounters<=counters + 1;end
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 腎動(dòng)脈狹窄的臨床護(hù)理
- 短視頻直播帶貨專業(yè)化運(yùn)營(yíng)知識(shí)培訓(xùn)課件(30P)
- 生物的變異教學(xué)設(shè)計(jì)
- 護(hù)理團(tuán)隊(duì)建設(shè)報(bào)告
- 上斜肌腱鞘綜合征的臨床護(hù)理
- 江蘇省連云港市灌南縣2025年八年級(jí)數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 膽石癥患者的護(hù)理
- 保健品會(huì)銷實(shí)戰(zhàn)策略
- 園林類國(guó)企面試題及答案
- 人教部編版五年級(jí)上冊(cè)小學(xué)語(yǔ)文《將相和》教學(xué)設(shè)計(jì)
- 班組安全教育試題及答案
- 虎符銅砭刮痧課件
- 數(shù)字媒體對(duì)人際親密關(guān)系的影響機(jī)制研究
- 稅務(wù)審計(jì)理論試題及答案解析
- 智能海洋牧場(chǎng)裝備行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 麻醉鎮(zhèn)靜藥與阿片類
- 中考化學(xué)第一輪復(fù)習(xí) 物質(zhì)的性質(zhì)與應(yīng)用(常見(jiàn)的酸堿鹽)測(cè)試題(解析版)
- 病理學(xué)課件-炎癥的機(jī)制
- 2025年全國(guó)保密教育線上培訓(xùn)考試試題庫(kù)含答案(新)附答案詳解
- 2025世界高血壓日控住血壓穩(wěn)住幸福高血壓健康講座
- 安徽卓越縣中聯(lián)盟2024-2025學(xué)年高三下學(xué)期5月份檢測(cè)政治試卷+答案
評(píng)論
0/150
提交評(píng)論