欢迎来到天天文库
浏览记录
ID:37625547
大小:289.25 KB
页数:12页
时间:2019-05-26
《UART收发器设计实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、UART收发器设计实例UART(UniversalAsynchronousReceiverTransmitter,通用异步收发器)是广泛使用的异步串行数据通信协议。下面首先介绍UART硬件接口及电平转换电路,分析UART的传输时序并利用VerilogHDL语言进行建模与仿真,最后通过开发板与PC相连进行RS-232通信来测试UART收发器的正确性。UART界面介绍本节所介绍的UART即美国电子工业协会定义的RS-232C,简称RS-232。RS-232的接口一般有9针的DB9和25针的DB25,这里以9针为例,它的各个引脚的定义如表。DB9的引脚定义引脚功能缩写1资料载波检测DCD2数据
2、接收RXD3资料发送TXD4资料终端准备DTR5地GND6资料设备准备就绪DSR7发送请求RTS8清除发送CTS9地GND由于RS-232的电气特性与FPGA引脚不相同,因此它们之间不能直接相连,对于RS-232的数据线,当为逻辑“1”时,对应电平是-15V~-3V;当为逻辑“0”时,对应电平是15V~3V。因此,与FPGA相连之前必须进行电平转换,转换原理图如图所示RS-232电平转换原理图UART传输时序UART传输时序如图UART传输时序发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇
3、偶校验位和停止位(停止位为高电位),一帧资料发送结束。接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。UART的接收数据
4、时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这时计数器CNT开始计数,当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第1位数据,依此类推,进行后面6个数据的采样。如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值为168时,采样的值为“1”表示停止位,一帧数据接收完成。本节章将按上面的算法进行VerilogHDL语言建模与仿真。UART分频器假设数据的波特率为p,则所需时钟的频率为16*p。以波特率p为115200为例,系统时钟为50MHz,则分频系数为50000000/(16*115200)=27.127,
5、取整为27。分频器VerilogHDL语言代码如下:moduleclkdiv(clk,clkout);inputclk;//系统时钟outputclkout;//采样时钟输出regclkout;reg[15:0]cnt;always@(posedgeclk)//分频进程beginif(cnt==16'd12)beginclkout<=1'b1;cnt<=cnt+16'd1;endelseif(cnt==16'd26)beginclkout<=1'b0;cnt<=16'd0;endelsebegincnt<=cnt+16'd1;endendendmodule保存文件为clkdiv.v,单击
6、Files→Create/Update→CreateSymbolFilesforCurrentFile命令,为clkdiv.v生成原理图模块。新建一个原理图文件,在原理图空白处双击,在弹出的Symbol对话框中选择Project→clkidv模块,单击OK按钮退出Symbol对话框。在原理图的适当位置放置clkdiv模块,并添加输入输出模块。保存原理图为uartrxtx.bdf。编译工程文件,编译无误后单击Processing→GenerateFunctionalSimulationNetlist,产生功能仿真网表。新建波形仿真文件,加入输入输出信号,设置系统时钟信号clk的周期为20n
7、s,保存波形文件为uartrxtx.vwf,单击按钮进行分频器的波形仿真,波形仿真报告如图所示。分频器的波形仿真报告波形仿真报告说明:分频时钟输出实现了所需的27分频,分频模块得到正确验证。UART发送模块UART发送模块的功能:接收到发送指令后,把数据按UART协议输出,先输出一个低电平的起始位,然后从低到高输出8个数据位,接着是可选的奇偶校验位,最后是高电平的停止位。VerilogHDL语言代码如下:moduleuarttx(c
此文档下载收益归作者所有