FPGA的UART完整设计(21页).doc
《FPGA的UART完整设计(21页).doc》由会员分享,可在线阅读,更多相关《FPGA的UART完整设计(21页).doc(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-FPGA的UART完整设计-第 15 页第三章UART设计3.1 UART的帧格式 在 UART 中,数据位是以字符为传送单位,数据的前、后要有起始位、停止位,另外可以在停止位的前面加上一个比特(bit)的校验位。其帧格式如图所示。数据位 起始位D0 D1 D2 D3 D7 校验位 停止位以9600波特率接收或发送,每一位时间为1/9600秒,或48MHZ晶振5000次计数图3_1数据帧格式 文章 通 过 分析UART的功能,利用有限状态机来描述UART核心控制逻辑的方法,将其核心功能集成,从而使整个设计更加稳定、可靠。基本的UART通信只需要两条信号线就可以完成数据的相互通信。UART的功
2、能模块如图3_2所示。波特发生器Uart控制器接收模块发送模块对象模块图3_2UART的功能模块图3.2 UART模块在大规模电路的设计中,广泛采用层次化,结构化的设计方法。它将一个完整的硬件设计任务从系统级开始,划分为若干个可操作的模块,编制出相应的模型并进行仿真验证,最后在系统级上进行组合。这样在提高设计效率的同时又提高了设计质量,是目前复杂数字系统实现的主要手段,也是本文设计思想的基础。其系统模块可划分为4个部分,如波特发生器,控制器,接收器,发送器,如图3-3所示:readsendclear_checkreadsend Clr3 clr4ks csData_inData_outclea
3、rRead_enablesend_enablecounterscountersresetCounters(control)stateT1clk_enableClk_clearClk(波特发生器)clk图3-3uart结构图3.2.1主要引脚功能介绍 Read:串行输入send:串行输出 Data_in:并行输入data_out:并行输出 Cs:通知cpu接收数据位ks:通知cpu发送准备位 Reset:重启输入state:uart状态输入 Clk:48M时钟输入3.2.2UART主体程序timescale 1ns/1nsmodule gs_opt(input wire read,input w
4、ire 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_outwire 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,
5、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;/并行数据输入output send,cs,ks;/send为串行输出,cs为通知cpu接收数据位,ks为发送准备位output7:0 dat_out;/并行数据输出wire clear,clk_enable,read_enable,clear3
6、,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) ); /接收数据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);/发送数据moduleclk_bau u3 ( .clk(clk) , .t1 (t1), .clk_enable (clk_enable) ); /时钟计数器模块ctrl u4( .read_enable (read_enable) , .send_enable (send_enable), .clk (clk), .state (state), .t1 (t1), .read (read
8、 ), .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发送模块3.3.1UART的数据发送服务 发送器实现的功能是将输入的8位并行数据变为串行数据,同时在数据头部加起始位,在数据位
9、尾部加奇偶校验位和停止位。数据发送服务如表3.1计数器 0 18 9 10操作发送低电平发送数据和奇偶校验发送奇偶校验结果发送高电平表3.1数据发送其基 本 特 点是: 在 信 号线上共有两种状态,可分别用逻辑1和逻辑。来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。发送 起 始 位:该位是一个逻辑0,总是加在每一帧的头部,提示接受器数据传输即将开始,在接收数据位过程中又被分离出去,占据一个数据位的时间。发送 数 据 位:在起始位之后就是数据位,一般为8位一个字节的数据,低位在前,高位在后。如字母C在ASCII表中是十进制67,二进制01000011,那么传输的将是110000100。
10、并在数据发送过程当中,进行数据位奇偶校验。 发送校 验 位:该位一般用来判断接收的数据位有无错误,常用的校验方法是奇偶校验法。将3过程当中奇偶校验的结果输入到数据线,并占一个数据位时钟。 停止位 :停止位总在每一帧的末尾,为逻辑1,用于标志一个字符传送的结束,占据一个数据位的时间。 帧:从起始位到停止位之间的一组数据称为一帧。3.3.2UART的数据发送操作如图3-4拉低电平空闲检测Cpu发送位检测 自检测接cpu传入数据拉高电平发送等待数据发送和奇偶校验奇偶结果发送图3-4数据发送操作解释:采用9600波特率发送从cpu传入数据:是指将data_in端口的数据存入寄存器中Cpu发送为检测:是
11、指将ks寄存器置位,即数据发送完毕3.3.3UART的数据发送模块程序module rxd(dat_out,cs,read,reset, clk_enable3,clk,read_enable,clear3,counters);/接收数据moduleinput read_enable;input read,reset,clk;/read为串行输入,read_control为时钟控制,reset为重启键input7:0 counters;output cs,clear3,clk_enable3;/cs为通知cpu读取数据位output7:0 dat_out;/wire clear3;reg cs
12、,cs1,clk_enable3;reg7:0 data_out;/移位寄存器 reg parity_check_result,parity_result,clear3,clear1;/always(posedge clk)beginif(read_enable)/当read_enable为高电平时为发送操作状态beginclk_enable3=1;clear3=clear1;endelsebeginclear3=1;endendalways(negedge counters0)/接收操作if(read_enable & !reset)begin if (counters=8b00011000
13、) /1begindata_out7=read;parity_check_result=parity_check_result + read;endelse if (counters=8b00101000) /2begindata_out6=read;parity_check_result=parity_check_result + read;endelse if (counters=8b00111000) /3 begindata_out5=read;parity_check_result=parity_check_result + read;endelse if (counters=8b0
14、1001000) /4begindata_out4=read;parity_check_result=parity_check_result + read;endelse if (counters=8b01011000) /5begindata_out3=read;parity_check_result=parity_check_result + read;endelse if (counters=8b01101000) /6begindata_out2=read;parity_check_result=parity_check_result + read;endelse if (counte
15、rs=8b01111000) /7begindata_out1=read;parity_check_result=parity_check_result + read;endelse if (counters=8b10001000) /8begindata_out0=read;parity_check_result=parity_check_result + read;endelse if (counters=8b10011000) /9进行奇偶校验检测beginparity_result=read; parity_result=#2 (parity_check_result = parity
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA UART 完整 设计 21
限制150内