


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章UART设计3.1 UART的帧格式在UART中,数据位是以字符为传送单位,数据的前、后要有起始位、停止 位,另外可以在停止位的前面加上一个比特(bit)的校验位。其帧格式如图所示图3_1数据帧格式文章通 过分析UART的功能,利用有限状态机来描述UART核心控制逻辑 的方法,将其核心功能集成,从而使整个设计更加稳定、可靠。基本的UART通信只需要两条信号线就可以完成数据的相互通信。 UART的功能模块如图3_2 所示。图3_2UART的功能模块图3.2 UART 模块在大规模电路的设计中,广泛采用层次化,结构化的设计方法。它将一个完 整的硬件设计任务从系统级开始,划分为若干个可操作的模
2、块,编制出相应的模 型并进行仿真验证,最后在系统级上进行组合。这样在提高设计效率的同时又提 高了设计质量,是目前复杂数字系统实现的主要手段,也是本文设计思想的基础 其系统模块可划分为4个部分,如波特发生器,控制器,接收器,发送器,如图3-3所示:图3-3uart结构图主要引脚功能介绍Read串行输入Datan并行输入Cs通知cpu接收数据位Reset重启输入Clk:48M时钟输入sen d:串行输出data_out并行输出ks:通知cpu发送准备位state:uart状态输入主体程序timescale 1ns/1nsmodule gs_opt(in putwireread,in putwire
3、clk,in putwirereset,in putwirestate,in putwire7:0 dat_in,output wire send,output wire cs,output wire ks,output wire 7:0 dat_out);wiresend_en able;wireread_e nable;wire clk_e nable3;wire clk_e nable4;wire clear3 ;wire clear4 ;wire clk_e nable;wire 7:0 coun ters;wire clear ;wiret1;/*read,se nd,cs,ks,r
4、eset,state,clk,dat_i n,dat_out);/module uart(read,se nd,cs,ks,reset,state,clk,dat_i n,dat_out); in put read,clk,reset,state;/read为串行输入,clk为时钟输入50MHZ , reset为重启键 input7:0 dat_in;并行数据输入output sen d,cs,ks;/send为串行输出,cs为通知cpu接收数据位,ks为发送准备位 output7:0 dat_out;/ 并行数据输出wire clear,clk_e nable,read_e nable,cl
5、ear3,se nd_en able,clear4,t1; wire7:0 coun ters,dat_i n;*/rxd u1 (.dat_out (dat_out) ,.cs (cs),.read (read),.reset (reset) ,.clk_e nable3 (clk_e nable3),.clk (clk) ,.read_enable (read_enable),.clear3 (clear3),.co un ters(co un ters);/接收数据moduletxd u2 (.dat_in (dat_i n),.ks (ks),.se nd (se nd),.reset
6、 (reset),.clk_e nable4 (clk_e nable4),.clk (clk),.se nd_en able (se nd_en able),.clear4 (clear4),.co un ters( coun ters);发送数据moduleclk_bau u3 (.clk(clk),t1 (t1),.clk_e nable (clk_e nable) );时钟计数器模块ctrl u4(.read_e nable (read_e nable), .se nd_en able (se nd_en able), .clk (clk),.state (state),.t1 (t1
7、),.read (read ),.co un ters (cou nters),.reset (reset ),.clear (clear);check_cle u5 (.state (state),.clear3 (clear3),.clear4 (clear4),.clear (clear),.clk_e nable3 (clk_e nable3),.clk_e nable4 (clk_e nable4), .clk_e nable (clk_e nable) );en dmodule/ /3.3UART发送模块的数据发送服务发送器实现的功能是将输入的8位并行数据变为串行数据,同时在数据头
8、部加 起始位,在数据位尾部加奇偶校验位和停止位。数据发送服务如表3.1计数器018910操作发送低电平发送数据和奇偶校验发送奇偶校验结果发送高电平表3.1数据发送其基本特点是: 在信号线上共有两种状态,可分别用逻辑 1和逻辑。来区分。在发送器空 闲时,数据线应该保持在逻辑高电平状态。 发送 起 始 位:该位是一个逻辑0,总是加在每一帧的头部,提示接受器数据 传输即将开始,在接收数据位过程中又被分离出去,占据一个数据位的时间。 发送数据位:在起始位之后就是数据位,一般为8位一个字节的数据,低位 在前,高位在后。如字母 C在ASCII表中是十进制67,二进制01000011,那么 传输的将是110
9、000100=并在数据发送过程当中,进行数据位奇偶校验。 发送校 验 位:该位一般用来判断接收的数据位有无错误, 常用的校验方法是 奇偶校验法。将3过程当中奇偶校验的结果输入到数据线,并占一个数据位时钟。 停止位:停止位总在每一帧的末尾,为逻辑1,用于标志一个字符传送的结束, 占据一个数据位的时间。 帧:从起始位到停止位之间的一组数据称为一帧。的数据发送操作如图3-4图3-4数据发送操作解释:采用9600波特率发送从cpu传入数据:是指将data_in端口的数据存入寄存器中Cpu发送为检测:是指将ks寄存器置位,即数据发送完毕的数据发送模块程序module rxd(dat_out,cs,rea
10、d,reset,clk_e nable3,clk,read_e nable,clear3,co un ters);接收数据modulein put read_e nable;in put read,reset,clk;/read 为串行输入,read_co ntrol 为时钟控制,reset 为 重启键in put7:0 coun ters;output cs,clear3,clk_enable3;/cs为通知 cpu 读取数据位output7:0 dat_out;/wire clear3;reg cs,cs1,clk_e nable3;reg7:0 data_out;移位寄存器reg par
11、ity_check_result,parity_result,clear3,clear1;/ /always(posedge clk)beg inif(read_enable)/当read_enable为高电平时为发送操作状态beg inclk_e nable3=1;clear3=clear1;endelsebeg inclear3=1;endend/always( negedge coun tersO)/ 接收操作if(read_e nable & !reset)beg inif (cou nters=8b00011000) 1beg indata_out7v=read; parity_ch
12、eck_result=parity_check_result + read; endelse if (cou nters=8b00101000) 2beg indata_out6v=read; parity_check_result=parity_check_result + read; endelse if (cou nters=8b00111000) 3beg indata_out5v=read; parity_check_result=parity_check_result + read; endelse if (cou nters=8b01001000) 4beg indata_out
13、4=read; parity_check_result=parity_check_result + read; endelse if (cou nters=8b01011000) 5beg indata_out3=read;parity_check_result=parity_check_result + read;endelse if (cou nters=8b01101000) 6beg indata_out2v=read;parity_check_result=parity_check_result + read;endelse if (cou nters=8b01111000) /7b
14、eg indata_out1=read;parity_check_result=parity_check_result + read;endelse if (cou nters=8b10001000) 8beg indata_out0=read;parity_check_result=parity_check_result + read;endelse if (cou nters=8b10011000) 9进行奇偶校验检测beg inparity_result=read;parity_result=#2 (parity_check_result = parity_result)1:0;ende
15、lse if (cou nters=8b10101000) 0进行帧检测beg incs1=(read) ? 1:0;endelse if (counters=8b10101010) 01 给 cpu 发送接收信号beg incs=(cs1 & parity_result) ? 1:0;/当奇偶校验结果与帧检测结果都为1时,cs置位一clear1=1;/clk_e nable=0;clk_e nable3=0;endelse if(cou nters=8b00001000)/检测是否是毛刺beg inclear1=(!read)?0:1;endelse clear1=0;endelse cle
16、ar1=1;en dmodule的数据发送模块程序仿真图当reset为零时图3-5reset为零时仿真图如图为UART的数据发送模块的功能仿真图,为方便观察,其中的时钟是直 接给出来的,根据图中的数据判读,其功能为正确,UART的数据发送模块编译成功。1. 当计时器为140 ns时,为数据接收2. 当计时器为357ns时,为数据发送3. 当计时器为705ns时,为奇偶校验结果发送4. 当计时器为825ns时,发送高电平当reset为1时如图3-6图3-6reset为1时仿真图3.4UART接收模块数据接收服务串行数据帧和接收时钟是异步的,由逻辑1跳变为逻辑0可视为一个数据 帧的开始,所以接收器
17、首先要判断起始位。如表3.2计数器0910操作数据起始位检 测数据接收和奇偶校验奇偶校验数据判断表3.2uart的数据接收服务其基本特点是:UART接收状态一共有4个:state0检测起始位),stat e1(对数据位进行采样, 并串/并转换),state2奇偶校验 分析),state3接收数据正确与否检测)。 起始位判读:当UART接收器复位以后,接收器将处 于这一状态。在该状态, 控制器一直等待read电平的跳变,即从逻辑1变为逻辑0,也就是等待起始位 的到来。一旦检测到起始位,就对采样时钟elk rev上跳沿计 数,当计数为 8时,也就是确保在起始位的中间点 ,然后转到state1状态。
18、 数据接收:该状态下,每间隔16位倍频采样一位 串行数据,接收8位异步 数据并进行串/并转换。即对clk 一 rev上跳沿计数,当为16时,就对数据采样, 这样 保证了数据位是在中点处被采样的,同时串/并转换,当检测到已收到8个 数据后以后,便进入了 state2状态。 奇偶校验:该状态实现的功能是奇偶校验。本文采用的是偶校验。校验结束以后,转到state3状态。 数据帧判读:该状态是用来帧校验的,即在校验位以后,检测停止位是否为逻辑高电平数据接收操作图3-7UART数据接收操作图3-7UART数据接收操作解释:数据接收速度9600波特率,以16倍频接收cpu接收位检测:当奇偶结果比较和数据帧
19、检测都正确时,cpu检测接收位CS置位的数据接收模块程序/发送数据模块module txd(dat_i n,sen d,reset,clk_e nable4,clk,send_enable,clear4,counters,ks);发送数据 modulein put7:0 dat_ in,coun ters;in put reset,clk,se nd_en able;output sen d,clk_e nable4,clear4;output ks;/jiawire clear;wire7:0 dat_s;reg sen d,parity_result,ks;reg clk_e nable,
20、clear1,clear4,clk_e nable4;reg7:0 date_s;/always(posedge elk)beginif(send_enable & !reset)当send_enable为高电平时为发送操作状态 beginclk_e nable4=1;clear4=clear1;endelsebeginclear4=1;endend/always(posedge clk)if(send_en able & !reset)beginif(cou nters=8bOOOOOOO1)Obeginsen d=0;date_s=dat_ in;/?parity_result=1;end
21、else if(cou nters=8bOOO1OOOO)1beginsen d=date_s0; parity_result=parity_result + date_s0;endelse if(cou nters=8bOO1OOOOO)2beginsen d=date_s1; parity_result=parity_result + date_s0;endelse if(cou nters=8bOO11OOOO)3beginsen d=date_s2; parity_result=parity_result + date_s0;endelse if(cou nters=8b0100000
22、0)/4beginsen d=date_s3;parity_result=parity_result + date_s0;endelse if(cou nters=8bO1O1OOOO)5beginsen d=date_s4; parity_result=parity_result + date_s0;endelse if(cou nters=8bO11OOOOO)6beginsen d=date_s5; parity_result=parity_result + date_s0;endelse if(cou nters=8bO111OOOO)7beginsen d=date_s6; pari
23、ty_result=parity_result + date_s0;endelse if(cou nters=8b10000000)/8beginsen d=date_s7; parity_result=parity_result + date_s0;endelse if(counters=8b10010000)/9 发送奇偶校验结果 beginsen d=parity_result;endelse if(counters=8b10100000)/0 发送高电平beginsend=1;endelse if(cou nters=8b10101111)/0beginclear1=1;ks=(se
24、nd & parity_result) ? 1:0;endelse if(cou nters=8b00000000)beginsend=1;endelse clear1=0;elseendsend:k5-dG.二5口应 *|配WQ1Rbs Ti.rit Sir 12. nt jJ | tr99 03 fitiKtarvklfill 5E S h rtErii也o 皿iw.p m滋mpasiD.p u.债拓口卫皿男o.pmir1i1i;1N.r1 l . . r 1 i1111Ji.111i. j. .ii . ii1_1 1_1 111 1_1 l_ 1 :_11 1_1 111 Lnnjvi
25、JTrLrLrLn_rLrLrLrLTLn .nLrLrirLn_r run jl rLrLrLn_rLn_rLTLrb-:jLVJi-.n.unrjir-nrULnr.nnrnnrr.mnuirimriiiimiiinnifwmitiiiWMiiiwiwiiwiMUiMiwifWwri 厂厂厂 iriirir.iirir 眄 iiiinr呱 iriimiiuni “hrJMiScskjGnnJ:ia*图3-9当counters未指定时间时功能仿真3.5UART控制器控制器服务UART控制器实质上是一组计数器,由 state决定计数器数据发送对象,在这 里指定当state为1时,发送到UART
26、接收模块,反之,发送到UART发送模块 当计数到指定数据时,触发指定模块的制定操作。控制器模块程序module coun ters(read_e nable,se nd_en able,clk,state,t1,read,co un ters,reset,clear)程序计数寄存器in put clk,state,t1,read,reset,clear;/stat为 uart 状态输入,/clear为程序计数寄存器清零控制位output7:0 coun ters;output read_e nable,se nd_en able;reg read_enable,send_enable,cont
27、rol;/read_enab为接收控制位?/send_enable为发送控制位,control为程序计数寄存器为零状态寄存位 reg7:0 co un ters;/8位程序计数寄存器always(posedge clk)/当程序计数寄存器为零时,程序计数寄存器为零状态寄存位置位begi ncon trol=(!co un ters)? 1 : 0;end/always( negedge read)/uar发送或接收状态判断if(con trol)beg inif(state)begi nif(!read)beg inread_e nable=1;send_en able=0;endelsebeg insend_en able=0;endendelsebegi nsend_en able=1;read_e nable8b10101111)cou nters=8b00000000;elsecoun ters=co un ters + 1;endels
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第二储油罐建设合同书
- 公寓租赁合同及家电清单
- 设备采购与安装合同
- 护理员的初级培训课件
- 运动解剖学题库(含参考答案)
- 人教版小学四年级上册数学口算练习试题 全套
- 精密仪器销售合同模板
- 电子商务战略合作合同范本
- 腰椎病人骨折的护理
- 班级心理健康教育
- JB-T 8532-2023 脉冲喷吹类袋式除尘器
- 第11课《送东阳马生序》(课件)九年级语文下册
- (正式版)SHT 3045-2024 石油化工管式炉热效率设计计算方法
- 2024年中储粮集团招聘笔试参考题库附带答案详解
- 基于大概念的高中历史大单元教学
- (2024年)保安培训图文课件
- 《养老护理员》-课件:协助卧床老年人使用便器排便
- 统编版语文八年级下册全册大单元整体教学设计表格式教案
- 初三励志、拼搏主题班会课件
- 特种加工技术课件
- 提升教师数字素养培训方案
评论
0/150
提交评论