通用异步收发器UART设计文档格式.docx

上传人:b****3 文档编号:6272966 上传时间:2023-05-06 格式:DOCX 页数:20 大小:329.49KB
下载 相关 举报
通用异步收发器UART设计文档格式.docx_第1页
第1页 / 共20页
通用异步收发器UART设计文档格式.docx_第2页
第2页 / 共20页
通用异步收发器UART设计文档格式.docx_第3页
第3页 / 共20页
通用异步收发器UART设计文档格式.docx_第4页
第4页 / 共20页
通用异步收发器UART设计文档格式.docx_第5页
第5页 / 共20页
通用异步收发器UART设计文档格式.docx_第6页
第6页 / 共20页
通用异步收发器UART设计文档格式.docx_第7页
第7页 / 共20页
通用异步收发器UART设计文档格式.docx_第8页
第8页 / 共20页
通用异步收发器UART设计文档格式.docx_第9页
第9页 / 共20页
通用异步收发器UART设计文档格式.docx_第10页
第10页 / 共20页
通用异步收发器UART设计文档格式.docx_第11页
第11页 / 共20页
通用异步收发器UART设计文档格式.docx_第12页
第12页 / 共20页
通用异步收发器UART设计文档格式.docx_第13页
第13页 / 共20页
通用异步收发器UART设计文档格式.docx_第14页
第14页 / 共20页
通用异步收发器UART设计文档格式.docx_第15页
第15页 / 共20页
通用异步收发器UART设计文档格式.docx_第16页
第16页 / 共20页
通用异步收发器UART设计文档格式.docx_第17页
第17页 / 共20页
通用异步收发器UART设计文档格式.docx_第18页
第18页 / 共20页
通用异步收发器UART设计文档格式.docx_第19页
第19页 / 共20页
通用异步收发器UART设计文档格式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

通用异步收发器UART设计文档格式.docx

《通用异步收发器UART设计文档格式.docx》由会员分享,可在线阅读,更多相关《通用异步收发器UART设计文档格式.docx(20页珍藏版)》请在冰点文库上搜索。

通用异步收发器UART设计文档格式.docx

r_stop:

无论停止位是1位还是1.5位,或是2位,状态机载r_stop状态下不具体检测RXD,只是输出帧接收完毕信号(rec_done<

=1)停止位后状态机转回到r_start状态,等待下一帧的起始位。

发送器

发送器状态转化图如下:

x_Idle:

空闲状态。

当UART被reset复位后,进入这一状态,在此状态中,UART的发送器一直在等待一个数据帧发送命令xmit_cmd。

Xmit_cmd_p信号是对xmit_cmd的处理,xmit_cmd_p是一个短脉冲信号。

当xmit_cmd_p=1时,进入x_start,准备发送起始位。

x_start:

起始位。

在此状态下,UART的发送器一个时间宽度的逻辑0信号至TXD,即起始位,紧接着状态机进入x_wait状态,xcnt16时bclk的计数器。

x_wait:

移位等待。

接收x_wait类似。

x_shift:

移位状态。

实现待发数据的并串转换。

x_stop:

停止位。

数据帧发送完毕,转入该状态,并发送16个bclk周期的逻辑1信号,即1位停止位,发送完停止位后回到x_Idle状态,并等待另外一个数据帧的发送命令。

总模块

其实相当于UART的外部线路接口,就是成品的引脚图,它的接口一部份连接着其它模块,另一部份连接外部通信设备,其程序就是一些接口间数据的传送和接收。

以下是对UART总模块中涉及的外部接口的简要说明。

时钟信号clk(输入):

UART的系统时钟。

复位信号rest(输入)):

UART系统总复位。

16倍时钟bclk(输出):

16倍于波特率时钟。

UART发送txd(输出):

UART异步串行发送端。

发送缓冲xbuf(输入):

带发送数据输入。

发送命令xmit_cmd(输入):

启动发送器发送一个UART帧。

发送完成xmit_done(输出):

UART帧发送完成,等待新的发送命令。

UART接收rxd(输入):

UART异步串行接收端。

接收缓冲rbuf(输出):

接收数据缓冲,在下一个帧数据接收完毕时,数据缓冲rbuf会被更新,需要在此之前取走数据。

接收准备rec_ready(输出):

接收协调信号,接收完毕后的下一帧接收准备好信号,在rec_ready有效时,rbuf已被更新。

二、实验原程序:

整体分四个模块,一个顶层模块,三个子模块

顶层模块:

uart

A.:

uart

//uart.v

moduleuart(clk,bclk,reset,rxd,txd,xmit_cmd,xmit_done,rec_ready,xbuf,rbuf);

inputclk;

inputreset;

inputrxd;

inputxmit_cmd;

input[7:

0]xbuf;

outputbclk;

outputtxd;

outputxmit_done;

outputrec_ready;

output[7:

0]rbuf;

wirebclk16;

baudbaud(.clk(clk),.reset(reset),.bclk(bclk),.bclk16(bclk16));

u_recu_rec(.bclk16(bclk16),.reset(reset),.rxd(rxd),.rec_ready(rec_ready),.rbuf(rbuf));

u_xmitu_xmit(.bclk(bclk),.reset(reset),.txd(txd),.xmit_cmd(xmit_cmd),.xbuf(xbuf),.xmit_done(xmit_done));

endmodule

B.//波特率发生子模块:

baud

//baud.v

modulebaud(clk,reset,bclk,bclk16);

//波特率时钟,给发送模块

outputbclk16;

//16倍波特率时钟,给接收模块

regbclk;

regbclk16;

reg[7:

0]div_16baud;

reg[3:

0]div_baud;

//parameterXTAL=12000000;

//(83ns)

//parameterBAUD=9600;

parameterdiv_clk=36;

//时钟的分频系数=XTAL/(BAUD*16*2)

always@(negedgeclkornegedgereset)

begin

if(!

reset)

div_16baud<

=8'

d0;

bclk16<

=1'

b0;

bclk<

div_baud<

=4'

d1;

end

else

if(div_16baud==div_clk)

=div_baud+4'

=~bclk16;

if(div_baud==4'

d15)

=~bclk;

=div_16baud+8'

C.//接收子模块:

u_rec

//u_rec.v

moduleu_rec(bclk16,reset,rxd,rec_ready,rbuf);

inputbclk16;

regrxd_sync;

//接收端同步信号

regShift;

//右移使能信号

//接收数据缓冲器

0]rec_shftreg;

//接收数据移位寄存器

0]samplecnt;

//采样间隔判断计数器

regcenter;

//采样间隔判断计数器使能信号

reg[4:

0]datacnt;

//数据位长度判断计数器

regdatawait;

//数据位长度判断计数器使能信号

0]state;

//当前状态位

regrec_ready;

//数据接收完毕信号(等待接受信号)3

parameterFramelen=4'

d8;

//数据位长度

//状态机状态编码,使用独热码

parameterr_Start=5'

b00001;

parameterr_Center=5'

b00010;

parameterr_Wait=5'

b00100;

parameterr_Sample=5'

b01000;

parameterr_Stop=5'

b10000;

//同步信号

always@(posedgebclk16ornegedgereset)

if(!

rxd_sync<

=rxd;

//右移寄存器

rec_shftreg<

rbuf<

if(Shift)

rec_shftreg[6:

0]<

=rec_shftreg[7:

1];

rec_shftreg[7]<

=rxd_sync;

elserbuf<

=rec_shftreg;

samplecnt<

if(center)

=samplecnt+4'

//*********状态机*********

state<

=r_Start;

Shift<

center<

datawait<

datacnt<

case(state)

r_Start:

rxd_sync)

=r_Center;

rec_ready<

r_Center:

if(samplecnt==2'

h3)

=r_Wait;

b1;

r_Wait:

if(samplecnt==4'

d13)

if(datacnt==Framelen)

=r_Stop;

=r_Sample;

=datacnt+4'

r_Sample:

r_Stop:

=3'

default:

endcase

D.//发送子模块:

u_xmit

//u_xmit.v

moduleu_xmit(bclk,reset,txd,xmit_cmd,xbuf,xmit_done);

inputbclk;

regxmit_cmd_p;

//发送命令脉冲

regflag;

//发送命令判断标志位

regtxd;

0]xmit_shftreg;

reg[2:

regxmit_done;

//发送完毕信号

regstart;

//起始位标志

parameterFramelen=3'

d7;

//数据位长度

parameterx_Idle=5'

parameterx_Start=5'

parameterx_Wait=5'

parameterx_Shift=5'

parameterx_Stop=5'

//发送命令脉冲发生器

always@(posedgebclkornegedgereset)

xmit_cmd_p<

flag<

elseif(xmit_cmd&

&

(!

flag))

elseif(!

xmit_cmd)

elsexmit_cmd_p<

xmit_shftreg<

txd<

elseif(Shift)

=xmit_shftreg[0];

xmit_shftreg[6:

=xmit_shftreg[7:

xmit_shftreg[7]<

elseif(start)

=xbuf;

if(datawait)

=datacnt+3'

=x_Idle;

start<

if(xmit_cmd_p)

=x_Start;

xmit_done<

x_Start:

=x_Wait;

x_Wait:

=x_Stop;

=x_Shift;

x_Shift:

x_Stop:

end

三、实验UART的部件图:

✧Ⅰ、系统RTL级电路

✧Ⅱ、波特率发生器模块RTL级电路

✧Ⅲ、接收模块RTL级电路

✧Ⅳ、接收模块状态机图

✧Ⅴ、发送部分状态机图

四、仿真波形:

五、锁定管脚:

六、下载:

七、验证实验:

结果良好,只是速度感觉不是瞬时传送完毕的。

八、体会:

经过这次实习,感觉收集和整理资料是最麻烦的,它基本上占了整个实习阶段的三分之二左右的时间。

因为在这个过程中,不仅要对资料进行必要检索,还要进行学习。

收集完之后,还要对这些资料做最后的整理,使这些资料变成自己想要的东西。

而就算你已经学会了这些知识,要应用到实验箱上来也不是一件容易的事。

通过这次实习,基本了解到传统的数字电子系统或IC设计中,手工设计的比例占了很大的部分,而手工设计有很多的缺点:

复杂电路的设计、调试十分的困难;

由于无法进行硬件系统功能仿真,如果某一过程出现错误,查找和修改十分不便;

设计过程中产生大量的文档,不便于管理;

对于IC设计而言,设计实现过程与具体生产工艺相关,因此可移植性差;

只有在设计出样机或芯片才能进行实测。

而EDA技术对数字系统进行行为与功能描述到具体的内部线路结构,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,可以大大的降低设计成本、缩短设计周期。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2