版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章UAR假计UART的帧格式在UART中,数据位是以字符为传送单位,数据的前、后要有起始位、停止位,另外可以在停止位的前面加上一个比特(bit)的校验位。其帧格式如图所示。:据''起始位,D0D1D2D3D7校验位停止位以9600波特率接收或发送,每一位时间为1/9600秒,或48MH如振5000次计数图3_1数据帧格式文章通过分析UART勺功能,利用有限状态机来描述UARTK心控制逻辑的方法,将其核心功能集成,从而使整个设计更加稳定、可靠。基本的UART1信只需要两条信号线就可以完成数据的相互通信。UART勺功能模块如图3_2所示。对象模块图3_2UART勺功能模块图UA
2、RT模块在大规模电路的设计中,广泛采用层次化,结构化的设计方法。它将一个完整的硬件设计任务从系统级开始,划分为若干个可操作的模块,编制出相应的模型并进行仿真验证,最后在系统级上进行组合。这样在提高设计效率的同时又提高了设计质量,是目前复杂数字系统实现的主要手段,也是本文设计思想的基础。其系统模块可划分为4个部分,如波特发生器,控制器,接收器,发送器,如图T1clk_enableClk_clearClk(波特发生器)clk图3-3uart结构图主要引脚功能介绍Read:串行输入Data_in:并行输入Cs:通知cpu接收数据位Reset:重启输入Clk:48M时钟输入send:串行输出data_
3、out:并行输出ks:通知cpu发送准备位state:uart状态输入主体程序'timescale1ns/1nsmodulegs_opt(inputwireread,inputwireclk,inputwirereset,inputwirestate,inputwire7:0dat_in,outputwiresend,outputwirecs,outputwireks,outputwire7:0dat_out);wiresend_enable;wireread_enable;wireclk_enable3;wireclk_enable4;wireclear3;wireclear4;wi
4、reclk_enable;wire7:0counters;wireclear;wiret1;/*read,send,cs,ks,reset,state,clk,dat_in,dat_out);at_out(dat_out),.cs(cs),.read(read),.reset(reset),.clk_enable3(clk_enable3).clk(clk),.read_enable(read_enable).clear3(clear3),.counters(counters);at_in(dat_in),.ks(ks),.send(send),.reset(reset),.clk_enabl
5、e4(clk_enable4),.clk(clk),.send_enable(send_enable),.clear4(clear4),.counters(counters);lk(clk),.t1(t1),.clk_enable(clk_enable);ead_enable(read_enable),.send_enable(send_enable),.clk(clk),.state(state),.t1(t1),.read(read),.counters(counters),.reset(reset),.clear(clear);check_cleu5(.state(state),.cle
6、ar3(clear3),.clear4(clear4),.clear(clear),.clk_enable3(clk_enable3),.clk_enable4(clk_enable4),.clk_enable(clk_enable);endmodule/发送模块的数据发送服务发送器实现的功能是将输入的8位并行数据变为串行数据,同时在数据头部加起始位,在数据位尾部加奇偶校验位和停止位。数据发送服务如表计数器018910操作发送低电平发送数据和奇偶校验发送奇偶校验结果发送高电平表数据发送其基本特点是:在信号线上共有两种状态,可分别用逻辑1和逻辑。来区分。在发送器空闲时,数据线应该保持在逻辑高电平
7、状态。发送起始位:该位是一个逻辑0,总是加在每一帧的头部,提示接受器数据传输即将开始,在接收数据位过程中又被分离出去,占据一个数据位的时间。发送数据位:在起始位之后就是数据位,一般为8位一个字节的数据,低位在前,高位在后。如字母C在ASCII表中是十进制67,二进制01000011,那么传输的将是0o并在数据发送过程当中,进行数据位奇偶校验。发送校验位:该位一般用来判断接收的数据位有无错误,常用的校验方法是奇偶校验法。将3过程当中奇偶校验的结果输入到数据线,并占一个数据位时钟。停止位:停止位总在每一帧的末尾,为逻辑1,用于标志一个字符传送的结束,占据一个数据位的时间。帧:从起始位到停止位之间的
8、一组数据称为一帧。的数据发送操作如图3-4拉低电平空闲检测4CCpu发*检测自检测接cpu传入数据拉高电平发送等待奇偶结果发送数据发送和奇偶校验3-4数据发送操作解释:采用9600波特率发送从cpu传入数据:是指将data_in端口的数据存入寄存器中Cpu发送为检测:是指将ks寄存器置位,即数据发送完毕的数据发送模块程序modulerxd(dat_out,cs,read,reset,clk_enable3,clk,read_enable,clear3,counters);/接收数据moduleinputread_enable;inputread,reset,clk;/read为串行输入,rea
9、d_control为时钟控制,reset为重启键input7:0counters;outputcs,clear3,clk_enable3;/cs为通知cpu读取数据位output7:0dat_out;/wireclear3;regcs,cs1,clk_enable3;reg7:0data_out;/移位寄存器regparity_check_result,parity_result,clear3,clear1;/always(posedgeclk)beginif(read_enable)/当read_enable为高电平时为发送操作状态beginclk_enable3<=1;clear3&
10、lt;=clear1;endelsebeginclear3<=1;endend/always(negedgecounters0)/接收操作if(read_enable&!reset)beginif(counters=8'b00011000)/1begindata_out7<=read;parity_check_result<=parity_check_result+read;endelseif(counters=8'b00101000)/2begindata_out6<=read;parity_check_result<=parity_ch
11、eck_result+read;endelseif(counters=8'b00111000)/3begindata_out5<=read;parity_check_result<=parity_check_result+read;endelseif(counters=8'b01001000)/4begindata_out4<=read;parity_check_result<=parity_check_result+read;endelseif(counters=8'b01011000)/5begindata_out3<=read;par
12、ity_check_result<=parity_check_result+read;begindata_out2<=read;parity_check_result<=parity_check_result+read;endelseif(counters=8'b01111000)/7begindata_out1<=read;parity_check_result<=parity_check_result+read;endelseif(counters=8'b)/8begindata_out0<=read;parity_check_resul
13、t<=parity_check_result+read;endelseif(counters=8'b)/9进行奇偶校验检测beginparity_result<=read;parity_result<=#2(parity_check_resultparity_result)1:0;begincs1<=(read)1:0;endelseif(counters=8'b)/01给cpu发送接收信号begincs<=(cs1&&parity_result)1:0;/当奇偶校验结果与帧检测结果都为1时,cs置位clear1<=1;/cl
14、k_enable<=0;/clk_enable3<=0;endelseif(counters=8'b00001000)/检测是否是毛刺beginclear1<=(!read)0:1;endelseclear1<=0;endelseclear1<=1;endmodule的数据发送模块程序仿真图JXOJJLLi UWX 叫 Q7TmTX 1,加川。乂当reset为夺时Si«-nlln1iniifwtfvrmtF4d.lttTill4l«r01%”止如0SfiImw*rd.0nIM二imfmi1.二.:即乏叩心?q皿瞥aX呼卬出痴心观欢呼呱川
15、御电5gx迪河前触眄七七Mg痛年因匚;!;ljIi_j_II11Ir;_:221Q153ULJ图3-5reset为零时仿真图如图为UART勺数据发送模块的功能仿真图,为方便观察,其中的时钟是直接给出来的,根据图中的数据判读,其功能为正确,UART的数据发送模块编译成功。1 .当计时器为140ns时,为数据接收2 .当计时器为357ns时,为数据发送3 .当计时器为705ns时,为奇偶校验结果发送4 .当计时器为825ns时,发送高电平当reset为1时如图3-61*1 a如U U 33,W1ocjnoouc: nnmji1 I Mlinn iHiR3Sb n ul ,ti-j.p m dtL.
16、DLOi.Ol 旺 c-W. JW3 电1 I3 %L«i司 HCTUTLEmi X opaiDim v idlceoxi Wlleejqdt3-6reset为1时仿真图接收模块数据接收服务用行数据帧和接收时钟是异步的,由逻辑1跳变为逻辑0可视为一个数据帧的开始,所以接收器首先要判断起始位。如表计数器018910操作数据起始位检测数据接收和奇偶校验奇偶校验数据判断表的数据接收服务其基本特点是:UART接收状态一共有4个:state0(检测起始位),state1(对数据位进行采样,并用/并转换),state2(奇偶校验分析),state3(接收数据正确与否检测)c 起始位判读:当UAR
17、TS收器复位以后,接收器将处于这一状态。在该状态,控制器一直等待read电平的跳变,即从逻辑1变为逻辑0,也就是等待起始位的到来。一旦检测到起始位,就对采样时钟elkrev上跳沿计数,当计数为8时,也就是确保在起始位的中间点,然后转到statel状态。 数据接收:该状态下,每间隔16位倍频采样一位串行数据,接收8位异步数据并进行用/并转换。即对clk-rev上跳沿计数,当为16时,就对数据采样,这样保证了数据位是在中点处被采样的,同时用/并转换,当检测到已收到8个数据后以后,便进入了state2状态。奇偶校验:该状态实现的功能是奇偶校验。本文采用的是偶校验。校验结束以后,转到state3状态。
18、数据帧判读:该状态是用来帧校验的,即在校验位以后,检测停止位是否为逻辑高电平数据接收操作图3-7UAR微据接收操作接收等待数据位读取和奇偶校验奇偶结果比较图3-7UART数据接收操作解释:数据接收速度9600波特率,以16倍频接收cpu接收位检测:当奇偶结果比较和数据帧检测都正确时,cpu检测接收位cs置位的数据接收模块程序/发送数据模块moduletxd(dat_in,send,reset,clk_enable4,clk,发送数据 modulesend_enable,clear4,counters,ks);/input7:0dat_in,counters;inputreset,clk,sen
19、d_enable;outputsend,clk_enable4,clear4;outputks;/jiawireclear;wire7:0dat_s;regsend,parity_result,ks;regclk_enable,clear1,clear4,clk_enable4;reg7:0date_s;/always(posedgeclk)beginif(send_enable&!reset)/当send_enable为高电平时为发送操作状态beginclk_enable4<=1;clear4<=clear1;endelsebeginclear4<=1;endend
20、/always(posedgeclk)if(send_enable&!reset)beginif(counters=8'b00000001)/0beginsend<=0;date_s<=dat_in;/parity_result<=1;endelseif(counters=8'b00010000)/1beginsend<=date_s0;parity_result<=parity_result+date_s0;endelseif(counters=8'b00100000)/2beginsend<=date_s1;parity_
21、result<=parity_result+date_s0;endelseif(counters=8'b00110000)/3beginsend<=date_s2;parity_result<=parity_result+date_s0;endelseif(counters=8'b01000000)/4beginsend<=date_s3;parity_result<=parity_result+date_s0;endelseif(counters=8'b01010000)/5beginsend<=date_s4;parity_res
22、ult<=parity_result+date_s0;endelseif(counters=8'b01100000)/6beginsend<=date_s5;parity_result<=parity_result+date_s0;endelseif(counters=8'b01110000)/7beginsend<=date_s6;parity_result<=parity_result+date_s0;endelseif(counters=8'b)/8beginsend<=date_s7;parity_result<=par
23、ity_result+date_s0;endelseif(counters=8'b)/9发送奇偶校验结果beginsend=parity_result;endelseif(counters=8'b)0发送局电平beginsend<=1;endelseif(counters=8'b)/0beginclear1<=1;ks<=(send&&parity_result)1:0;endelseif(counters=8'b00000000)beginsend<=1;endelseclear1<=0;endelsesend&l
24、t;=1;endmodule/的数据接收模块程序功能仿真图M38昌counters仿真! k O 7 » kdgr -.h 0 / trclJT_!kEhlai dLvu-1*11 rcLB k«r'i二二专:七二一:二Ilrl:EladTUjFi*BU-31XJE*rTdKA.t«<r93b.EIc.t*h'7A1TQZiE3IL*StUi't:-4guadl.H.-.- aD,;9- £AUJL<L«.- ivU*a.vLTQUBlvEJda;ia3-8当counters指定时间时解释:由图可明显看出da
25、ta0和data1变化,模块功能仿真通过图3-9当counters未指定时间时功能仿真EG MEndM 0 一MU. 0力匚图3-9当counters未指定时间时功能仿真VjJ.p JiL二二二77一一二】.£)-二五.二七-J豆控制器控制器服务UART控制器实质上是一组计数器,由state决定计数器数据发送对象,在这里指定当state为1时,发送到UART8收模块,反之,发送到UARTg送模块当计数到指定数据时,触发指定模块的制定操作。控制器模块程序程序计数寄存器modulecounters(read_enable,send_enable,clk,state,t1,read,cou
26、nters,reset,clear);/为 uart 状态输入 ,inputclk,state,t1,read,reset,clear;/state/clear为程序计数寄存器清零控制位output7:0counters;outputread_enable,send_enable;为接收控制位/regread_enable,send_enable,control;/read_enable/send_enable为发送控制位,control为程序计数寄存器为零状态寄存位reg7:0counters;/8位程序计数寄存器always(posedgeclk)/当程序计数寄存器为零时,程序计数寄存器为
27、零状态寄存位置位begincontrol<=(!counters)1:0;end/always(negedgeread)/uart发送或接收状态判断if(control)beginif(state)beginif(!read)beginread_enable<=1;send_enable<=0;endelsebeginsend_enable<=0;endendelsebeginsend_enable<=1;read_enable<=0;endend/always(posedget1)if(!reset&&!clear)/reset为1时,clear为1时程序计数寄存器清零beginif(counters>8'b)counters<=8'b00000000;elsecounters<=counters+1;endels
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场新冠肺炎疫情防控措施
- 公司股权转让协议(内部转让)
- zc初级中学教学楼墙涂刷工程承包合同
- 合伙购买股票协议书
- 设立有限责任公司合同
- 秋冬季防风防火防雪应急预案范例(3篇)
- 行政部2025年工作计划(2篇)
- 幼儿园小班公开课教案方案样本(5篇)
- 秩序部夜班人员工作制度(4篇)
- 生产车间电器安全操作规程模版(3篇)
- 英语-湖南省天一大联考暨郴州市2025届高考高三第二次教学质量检测(郴州二检怀化统考)试题和答案
- 【MOOC期末】《形势与政策》(北京科技大学)期末慕课答案
- 营销专业安全培训
- 2024年度五星级酒店厨师团队管理与服务合同3篇
- 2024年医疗健康知识科普视频制作合同3篇
- 广东省广州市花都区2024年七年级上学期期末数学试题【附答案】
- 期末测试模拟练习 (含答案) 江苏省苏州市2024-2025学年统编版语文七年级上册
- 上海市徐汇区2024-2025学年高一语文下学期期末试题含解析
- 安全风险隐患举报奖励制度
- 江苏省苏州市2023-2024学年高三上学期期末考试 数学 含答案
- 线性代数知到智慧树章节测试课后答案2024年秋贵州理工学院
评论
0/150
提交评论