FPGA的UART完整设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章UART设计
3、1 UART得帧格式
在UART 中,数据位就是以字符为传送单位,数据得前、后要有起始位、停止位,另外可以在停止位得前面加上一个比特(bit)得校验位。其帧格式如图所示。
文章通过分析UART得功能,利用有限状态机来描述UART核心控制逻辑得方法,将其核心功能集成,从而使整个设计更加稳定、可靠。基本得UART通信只需要两条信号线就可以完成数据得相互通信。UART得功能模块如图3_2所示。
3、2 UART模块
在大规模电路得设计中,广泛采用层次化,结构化得设计方法。它将一个完整得硬件设计任务从系统级开始,划分为若干个可操作得模块,编制出相应得模型并进行仿真验证,最后在系统级上进行组合。这样在提高设计效率得同时又提高了设计质量,就是目前复杂数字系统实现得主要手段,也就是本文设计思想得基础。其系统模块可划分为4个部分,如波特发生器,控制器,接收器,发送器,如图3-3所示:
3
Data_in:并行输入data_out:并行输出
Cs:通知cpu接收数据位ks:通知cpu发送准备位
Reset:重启输入state:uart状态输入
Clk:48M时钟输入
3、2、2UART主体程序
`timescale 1ns/1ns
module gs_opt(
input wire read,
input wire 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_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,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为重启键input[7:0] dat_in;//并行数据输入
output send,cs,ks;
//send为串行输出,cs为通知cpu接收数据位,ks为发送准备位output[7:0] dat_out;//并行数据输出
wire clear,clk_enable,read_enable,clear3,send_enable,clear4,t1; wire[7: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)
); //接收数据module
txd u2 (
、dat_in (dat_in),
、ks (ks),
、send (send),
、reset (reset),
、clk_enable4 (clk_enable4),
、clk (clk),
、send_enable (send_enable),
、clear4 (clear4),
、counters( counters)
);//发送数据module
clk_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 ),
、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位并行数据变为串行数据,同时在数据头部加起始位,在数据位尾部加奇偶校验位与停止位。数据发送服务如表3、1