您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于VHDL的UART-IP设计与实现
作者简介:吴琼飞(1985-),男,硕士研究生,研究方向:嵌入式系统及应用.基于VHDL的UARTIP设计与实现吴琼飞朱勇廖永为(武汉科技学院计算机科学学院湖北武汉邮编:430073)摘要:UART(UniversalAsynchronousReceiver/Transmitter),通用异步接收/发送装置,具有可编程性和高度兼容性,在数字通信及控制系统等各种嵌入式领域中得到了广泛的应用。介绍了一种利用VHDL语言设计的UART核心功能的方法,具体阐述了发送、接收以及波特率发生器模块的设计,并将其集成到可编程逻辑器件CPLD上,最后通过串口调试软件验证该UARTIP核功能正确、稳定、可靠。关键词:UART;VHDL;IP核;CPLD1引言IP核即知识产权核,是一段具有特定电路功能的硬件描述语言程序,它将一些在数字电路中常用的功能块设计成可修改参数的模块。为此利用IP核复用技术[2]避免了大量重复劳动,是设计人员赢得迅速上市时间的主要策略。UART(通用异步收发器)[1]主要用于控制设备之间的串行通信,广泛应用于SoC设计中。UART性能的优劣将直接影响相应电子系统的性能和指标。常见的串行接口芯片如8250、16450、16550等,由于速度较慢,难以满足一些需要高速应用的场合。基于以上考虑,本文探讨了利用VHDL设计紧凑、可修改配置的UARTIP核,并将其集成到可编程逻辑器件CPLD上得以实现。2UART核心模块设计与实现2.1UART基本原理UART主要用来实现串行和并行数据流之间的变换,主要功能是:从CPU接收并行数据转换成串行数据输出;或者是从串口读入外部数据,将其转换为并行数据送往CPU。所谓异步收发[5]是指在UART协议中,接收、发送不使用统一参考时钟,收发双方取得同步的方法是采用固定的串行数据格式,即在数据格式设置中分别加上起始位和停止位,用来标志一个数据帧的开始和结束。其串行数据格式如图1所示,包括1位起始位,5~8位数据位,1位奇偶校验位(可选),1/1.5/2位停止位。LSBMSB起始位数据位校验位停止位图1串行数据格式UART的功能系统可划分为六个模块:波特率发生器、发送模块、接收模块、接口模块、接收和发送FIFO、Modem模块,各部分模块关系如图2所示。本文着重于波特率发生器、发送模块和接收模块的设计,并给出其仿真结果。发送模块接收模块发送/接收FIFO接口模块波特率发生器Modem模块clkTXRXRTSDTR图2UART整体框架图2.2波特率发生器UART核包含一个可编程的波特率发生器,它给发送模块和接收模块提供发送数据和接收数据的基准时钟[6],波特率发生器产生的时钟clk16,是串行数据波特率的16倍。它对系统时钟进行分频,计算公式为:clk16=系统时钟/波特率*16,针对不同波特率设定相应的数值就可以得到期望的内部波特率时钟。这里我们将外部输入的32MHz的信号分成频率为153600Hz的信号。其仿真波形如图3所示。图3波特率发生器模块仿真2.3发送模块设计串行数据发送模块[7]设计框图如图4所示。总线控制器发送器控制和状态THRTSRtxd并行数据输入图4UART发送模块框图当并行8位数据从总线写入发送模块后,发送模块将并行数据装入锁存器THR中,然后在移位寄存器TSR中将数据移位,产生完整的发送序列(包括起始位、数据位、奇偶校验位和停止位),以相应波特率从txd发送。发送模块的输入时钟clk16是串行数据波特率的16倍,模块内部将其16分频后得到波特率时钟txdclk。发送模块的状态机FSM如图5所示:X_StopX_IdleX_StartX_WaitX_ShiftXcnt16=”01111”andxmit_cmd_p=’0’Xmit_cmd_p=’1’Xcnt16=”01111”Xcnt16=”01110”andxbitcnt/=FrameLentXcnt16=”01110”andxbitcnt=FrameLent图5发送状态转换关系图分为X_Idle、X_Start、X_Wait、X_Shift和X_Stop5个状态,分别对应空闲、起始、等待、移位和停止这5个状态。下面给出发送模块的主要程序段[3,4](VHDL语言):process(bclkt,resett,xmit_cmd_p,txdbuf)begin…;casestateiswhenx_idle=--状态1,等待数据帧发送命令ifxmit_cmd_p=’1’thenstate=x_start;…;whenx_start=--状态2,发送信号至起始位ifxcnt16=”01111”thenstate=x_wait;xcnt16:=”00000”;…;whenx_wait=--状态3,等待状态ifxcnt16=”01110”thenifxbitcnt=framlentthenstate=x_stop;xbitcnt:=0;…;whenx_shift=--状态4,将待发数据进行并串转换xbitcnt:=xbitcnt+1;state=x_wait;…;whenx_stop=--状态5,停止位发送状态ifxcnt16=”01111”thenifxmit_cmd_p=’0’thenstate=x_idle;xcnt16:=”00000”;…;txd=txds;endprocess;模块的仿真波形如图6所示。图6串行数据发送模块仿真2.4接收模块设计串行数据接收模块[7]设计框图如图7所示。总线控制器RHRRSR接收器控制和状态rxd数据输出图7UART接收模块框图在clk16时钟下不断检测从rxd端输入数据的起始位,当检测到起始位后,接收模块由空闲模式转换为移位模式,并且16分频clk16产生rxdclk波特率时钟。此时rxdclk时钟的上升沿位于串行数据每一位的中间,那么接下来的数据在每一位的中点采样,能有效滤除噪声影响。然后由rxdclk控制在上升沿将数据位写入移位寄存器RSR,并且RSR右移1位,依此过程将8位数据全部写入RSR,继而停止产生rxdclk波特率时钟。判断奇偶校验、帧结构和溢出标志正确后,RSR寄存器中的数据写入RHR数据锁存器中,最后由8位数据总线输出。接收模块的状态机FSM如图8所示:r_Stopr_Startr_Centerr_Waitr_Samplercnt16=”1110”andrbitcnt/=FrameLentrcnt16=”1110”andrbitcnt=FrameLentrxd_sync=’0'rxd_sync=’1’rcnt16=”0100”andrxd_sync=’0’图8接收状态转换关系图分为r_Start、r_Center、r_Wait、r_Sample和r_Stop5个状态,分别对应起始、取中点、等待、采样和停止这5个状态。数据接收模块的主要程序段(VHDL语言)如下:...CasestateisWhenr_start=--状态1,等待起始位Ifrxd_sync=’0’thenstate=r_center,r_ready=’0’;…Whenr_center=--状态2,求出每位的中点Ifrxd_sync=’0’thenIfcount=”0100”thenstate=r_wait;count:=”0000”;…whenr_wait=--状态3,等待状态Ifcount=”1110”thenIfrcnt=framlentthenState=r_stop;Elsestate=r_sample;…whenr_sample=--状态4,数据位采样检测Rcnt:=rcnt+1;State=r_wait;…whenr_stop=--状态5,输出帧接收完毕信号r_ready=’1’;state=r_start;…功能仿真时序如图9所示:图9串行数据接收模块仿真2.5UART功能验证以上均仿真成功后,将程序通过JTAG口下载到下位机中(本文用的是CPLDEPM570),之后通过串口调试软件来验证串口的数据通讯。首先将PC与下位机通过串口相连,按以下标准设置上位机的调试软件:“波特率,115200”;“数据位,8”;“停止位,1”;其余为默认设置。设置完成后便可开始进行数据收发的测试。通过上位机测试软件输入要发送的数据,下位机便显示相应的ASICII码;下位机给上位机发送数据本文则是通过拨码开关控制。结果证明串口数据的收发正确成功。3总结本文详细介绍了一种基于VHDL的UARTIP核的设计,给出了核心模块的功能仿真,并将其集成到可编程逻辑器件CPLD中进行验证,证明该UARTIP功能正确、稳定,可重构,可移植性强,可以很好的应用到SoC集成设计中。参考文献:[1]张莉,杨永明.基于CPLD的UART设计[J],微计算机息,2002,(02)[2]何慧珠,张会新.基于FPGA的UARTIP核设计与实现[J].微计算机信息,2008,(02)[3]候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社.2000[4]林敏.VHDL数字系统设计与高层次综合.北京:电子工业出版社.2002[5]JOEC.串行通信编程指南[M].北京:北京科海培训中心,1990[6]NORHUZAIMINJ,MAIMUNH.ThedesignofhighspeedUART[C],2005:306-310[7]OSELSNERT.DigitalUARTdesigninHDL[R].QuickLogicalEurope,2001TheDesignandImplementationoftheUARTIPBasedonVHDLWuQiong-fei,ZhuYong,LiaoYong-wei(CollegeofComputerScience,WuhanUniversityofScienceandEngineering,WuhanHubei430073,China)Abstract:UART(UniversalAsynchronousReceiver/Transmitter),withahighdegreeofprogrammabilityandcompatibility,hasbeenwidelyusedindigitalcommunication,controlsystems,andotherembeddedfields.ThispaperpresentsamethodthatusesVHDLlanguagetodesignthecorefunctionalityofUART,expoundthedesignofsending,receiving,andthebaudrategeneratormoduleindetail,andintegratedintotheprogrammablelogicdeviceCPLD,thentoverifythefunctionoftheUARTIPcorethroughtheserialportdebuggingsoftware.Keywords:UART;VHDL;IPcore;CPLD
本文标题:基于VHDL的UART-IP设计与实现
链接地址:https://www.777doc.com/doc-4695150 .html