好文档 - 专业文书写作范文服务资料分享网站

FPGA的UART完整设计

天下 分享 时间: 加入收藏 我要投稿 点赞

.

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

.dat_in (dat_in), .ks (ks), .send (send), .reset (reset),

.clk_enable4 (clk_enable4), .clk (clk),

.send_enable (send_enable), .clear4 (clear4), .counters( counters)

txd u2 (

.

.

);//发送数据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

.

.

计数器 操作 0 发送低电平 1~~~8 偶校验 9 结果 10 发送数据和奇发送奇偶校验发送高电平 表3.1数据发送

其基 本 特 点是:

① 在 信 号线上共有两种状态,可分别用逻辑1和逻辑。来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。

②发送 起 始 位:该位是一个逻辑0,总是加在每一帧的头部,提示接受器数据传输即将开始,在接收数据位过程中又被分离出去,占据一个数据位的时间。 ③发送 数 据 位:在起始位之后就是数据位,一般为8位一个字节的数据,低位在前,高位在后。如字母C在ASCII表中是十进制67,二进制01000011,那么传输的将是110000100。并在数据发送过程当中,进行数据位奇偶校验。 ④ 发送校 验 位:该位一般用来判断接收的数据位有无错误,常用的校验方法是奇偶校验法。将3过程当中奇偶校验的结果输入到数据线,并占一个数据位时钟。 ⑤ 停止位 :停止位总在每一帧的末尾,为逻辑1,用于标志一个字符传送的结束,占据一个数据位的时间。

⑥ 帧:从起始位到停止位之间的一组数据称为一帧。

3.3.2UART的数据发送操作 如图3-4

图3-4数据发送操作

.

拉低电平 空闲检测 Cpu发送位检测 自检测 接cpu传入数据 拉高电平 发送等待 数据发送和奇偶校验 奇偶结果发送 .

解释:采用9600波特率发送

从cpu传入数据:是指将data_in端口的数据存入寄存器中 Cpu发送为检测:是指将ks寄存器置位,即数据发送完毕

3.3.3UART的数据发送模块程序

module rxd(dat_out,cs,read,reset,

clk_enable3,clk,read_enable,clear3,counters); //接收数据module input read_enable;

input read,reset,clk;//read为串行输入,read_control为时钟控制,reset为重启键

input[7:0] counters;

output cs,clear3,clk_enable3;//cs为通知cpu读取数据位 output[7:0] dat_out;//wire clear3; reg cs,cs1,clk_enable3;

reg[7:0] data_out;//移位寄存器

reg

parity_check_result,parity_result,clear3,clear1;/////////////////

.

FPGA的UART完整设计

.//moduleuart(read,send,cs,ks,reset,state,clk,dat_in,dat_out);inputread,clk,reset,state;//read为串行输入,clk为时钟输入50MHZ,reset为重启键input[7:0]dat_in;//并行数据输入outputsend,cs,ks;
推荐度:
点击下载文档文档为doc格式
39ocp4futj5dq8n1sig30fluh9bohz00uib
领取福利

微信扫码领取福利

微信扫码分享