付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章 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 的功能模塊圖3.2 UART 模塊在大規(guī)模電路的設(shè)計中, 廣泛采用層次化, 結(jié)構(gòu)化的設(shè)計方法。 它將一個完整的硬件設(shè)計任務(wù)從系統(tǒng)級開始, 劃分為若干個可操作的模塊, 編制出相應(yīng)的模型并進(jìn)行仿真驗證, 最后在系統(tǒng)級上進(jìn)行組合。 這樣在提高設(shè)計效率的同時又提高了設(shè)計質(zhì)量,是目前復(fù)雜數(shù)字系統(tǒng)實現(xiàn)的主要手段, 也是本文設(shè)計思想的基礎(chǔ)。其系統(tǒng)模塊可劃分為 4 個部分,如波特發(fā)生器,控制器,接收器,發(fā)送器,如圖3-3 所示:readsendClr3clr4kscsclear_checkData_inData_out
3、clearRead_enablesend_enablereadsendcounterscountersresetCounters(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(inputwi
4、reread,inputwireclk,inputwirereset,inputwirestate,inputwire7:0 dat_in,output wire send,output wire cs,output wire ks,output wire 7:0 dat_out);wiresend_enable;wireread_enable;wire clk_enable3;wire clk_enable4;wire clear3 ;wire clear4 ;wire clk_enable;wire 7:0 counters;wire clear ;wiret1;/*read,send,c
5、s,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,re
6、ad_enable,clear3,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 (reset)
7、,.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 (read ),.coun
8、ters (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ù)頭部加起始位,在數(shù)據(jù)位尾部加奇偶校驗位和停止位。
9、數(shù)據(jù)發(fā)送服務(wù)如表3.1計數(shù)器操作0發(fā)送低電平18發(fā)送數(shù)據(jù)和奇9發(fā)送奇偶校驗10發(fā)送高電平偶校驗結(jié)果表 3.1 數(shù)據(jù)發(fā)送其基本特點是: 在 信 號線上共有兩種狀態(tài),可分別用邏輯閑時,數(shù)據(jù)線應(yīng)該保持在邏輯高電平狀態(tài)。1 和邏輯。來區(qū)分。在發(fā)送器空發(fā)送 起 始 位:該位是一個邏輯 0,總是加在每一幀的頭部,提示接受器數(shù)據(jù)傳輸即將開始,在接收數(shù)據(jù)位過程中又被分離出去,占據(jù)一個數(shù)據(jù)位的時間。發(fā)送 數(shù) 據(jù) 位:在起始位之后就是數(shù)據(jù)位,一般為 8 位一個字節(jié)的數(shù)據(jù),低位在前,高位在后。如字母 C 在 ASCII 表中是十進(jìn)制 67,二進(jìn)制 01000011,那么傳輸?shù)膶⑹?110000100。并在數(shù)據(jù)發(fā)送過
10、程當(dāng)中,進(jìn)行數(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ā)送和奇偶校驗3-4 數(shù)據(jù)發(fā)送操作奇偶結(jié)果發(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;/
12、wire clear3; reg cs,cs1,clk_enable3;reg7:0 data_out;/移位寄存器regparity_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 &
13、!reset)beginif (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) /3begindata_out5<=read;pa
14、rity_check_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=
15、8'b01101000) /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<=par
16、ity_check_result + read;endelse if (counters=8'b10011000) /9進(jìn)行奇偶校驗檢測 beginparity_result<=read;parity_result<=#2 (parity_check_result = parity_result) ?1:0;endelse if (counters=8'b10101000) /0進(jìn)行幀檢測begincs1<=(read) ? 1:0;endelse if (counters=8'b10101010) /01給 cpu 發(fā)送接收信號 begincs<
17、;=(cs1 && 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;endelseclear1<=0;endelseclear1<=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數(shù)據(jù)起始位檢18 數(shù)據(jù)接收和奇9
19、奇偶校驗10數(shù)據(jù)判斷測偶校驗表 3.2uart 的數(shù)據(jù)接收服務(wù)其基本特點是:UART 接收狀態(tài) 一 共 有 4 個 :state0(檢測起始位 ),stat e1( 對數(shù)據(jù)位進(jìn)行采樣,并串 /并轉(zhuǎn)換 ),state2(奇偶校驗 分析 ), state3(接收數(shù)據(jù)正確與否檢測 )。 起始位判讀 :當(dāng) UART 接收器復(fù)位以后, 接收器將處 于這一狀態(tài)。 在該狀態(tài),控制器一直等待 read 電平的跳 變,即從邏輯 1 變?yōu)檫壿?0,也就是等待起始位的到來 。一旦檢測到起始位, 就對采樣時鐘 elk 一 rev 上跳沿計 數(shù),當(dāng)計數(shù)為8 時,也就是確保在起始位的中間點,然后轉(zhuǎn)到 state1 狀態(tài)。
20、 數(shù)據(jù)接收:該狀態(tài)下,每間隔16 位倍頻采樣一位串行數(shù)據(jù),接收8 位異步數(shù)據(jù)并進(jìn)行串 /并轉(zhuǎn)換。即對 clk 一 rev 上跳沿計數(shù),當(dāng)為 16 時,就對數(shù)據(jù)采樣,這樣 保證了數(shù)據(jù)位是在中點處被采樣的,同時串 /并轉(zhuǎn)換,當(dāng)檢測到已收到 8 個數(shù)據(jù)后以后,便進(jìn)入了 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ù)位讀取和奇
21、偶校驗3-7UART 數(shù)據(jù)接收操作數(shù)據(jù)幀檢測奇偶結(jié)果比較解釋:數(shù)據(jù)接收速度9600 波特率,以16 倍頻接收cpu 接收位檢測:當(dāng)奇偶結(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
22、ks;/jiawire clear;wire7:0 dat_s;reg send,parity_result,ks;reg clk_enable,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
23、 & !reset)beginif(counters=8'b00000001)/0beginsend<=0;date_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 +
24、 date_s0;endelse if(counters=8'b00110000)/3beginsend<=date_s2;parity_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_re
25、sult + date_s0;endelse if(counters=8'b01100000)/6beginsend<=date_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<=par
26、ity_result + date_s0;endelse if(counters=8'b10010000)/9 發(fā)送奇偶校驗結(jié)果beginsend=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&l
27、t;=1;endelse clear1<=0;endelsesend<=1;endmodule/3.4.4UART 的數(shù)據(jù)接收模塊程序功能仿真圖圖 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
28、 接收模塊,反之,發(fā)送到 UART 發(fā)送模塊。當(dāng)計數(shù)到指定數(shù)據(jù)時,觸發(fā)指定模塊的制定操作。3.5.2UART 控制器模塊程序module counters(read_enable,send_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_e
29、nable,control;/read_enable為接收控制位 ?/send_enable為發(fā)送控制位, control 為程序計數(shù)寄存器為零狀態(tài)寄存位reg7:0 counters;/8 位程序計數(shù)寄存器always(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&
30、lt;=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;endelsebegincounters<=8'b00000000
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 營造林技術(shù)員操作管理評優(yōu)考核試卷含答案
- 礦井測塵工班組安全評優(yōu)考核試卷含答案
- 液力元件制造工安全意識強化能力考核試卷含答案
- 灌區(qū)供水工操作規(guī)范測試考核試卷含答案
- 2024年揚州工業(yè)職業(yè)技術(shù)學(xué)院輔導(dǎo)員招聘考試真題匯編附答案
- 電離輻射計量員10S考核試卷含答案
- 金屬制粉工安全防護(hù)評優(yōu)考核試卷含答案
- 打葉復(fù)烤設(shè)備操作工崗前實操水平考核試卷含答案
- 重過磷酸鈣生產(chǎn)工創(chuàng)新實踐模擬考核試卷含答案
- 2024年電子科技大學(xué)成都學(xué)院輔導(dǎo)員考試參考題庫附答案
- 連鎖餐飲門店運營管理標(biāo)準(zhǔn)流程
- 別人買房子給我合同范本
- 電力通信培訓(xùn)課件
- 中建三局2024年項目經(jīng)理思維導(dǎo)圖
- 中國藥物性肝損傷診治指南(2024年版)解讀
- 基層黨建知識測試題及答案
- DG-TJ08-2021-2025 干混砌筑砂漿抗壓強度現(xiàn)場檢測技術(shù)標(biāo)準(zhǔn)
- 鼻竇炎的護(hù)理講課課件
- 腸系膜脂膜炎CT診斷
- 體外膜肺氧合技術(shù)ECMO培訓(xùn)課件
- 老年醫(yī)院重點??平ㄔO(shè)方案
評論
0/150
提交評論