FPGA的UART完整设计说明

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章UART设计

3.1 UART的帧格式

在 UART 中,数据位是以字符为传送单位,数据的前、后要有起始位、停止位,另外可以在停止位的前面加上一个比特(bit)的校验位。其帧格式如图所示。

图3_1数据帧格式

文章通过分析UART的功能,利用有限状态机来描述UART核心控制逻辑的方法,将其核心功能集成,从而使整个设计更加稳定、可靠。基本的UART通信只需要两条信号线就可以完成数据的相互通信。UART的功能模块如图3_2所示。

图3_2UART的功能模块图

3.2 UART模块

在大规模电路的设计中,广泛采用层次化,结构化的设计方法。它将一个完整的硬件设计任务从系统级开始,划分为若干个可操作的模块,编制出相应的模型并进行仿真验证,最后在系统级上进行组合。这样在提高设计效率的同时又提高了设计质量,是目前复杂数字系统实现的主要手段,也是本文设计思想的基础。其系统模块可划分为4个部分,如波特发生器,控制器,接收器,发送器,如图3-3所示:

图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/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//////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

相关文档
最新文档