欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于Verilog_HDL的UART串行通讯模块设计及仿真.pdf

    • 资源ID:70335780       资源大小:996.04KB        全文页数:5页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于Verilog_HDL的UART串行通讯模块设计及仿真.pdf

    计算机与现代化2008年第8期J ISUANJ I YU XI ANDA IHUA总第156期文章编号:100622475(2008)0820011205收稿日期:2007206220基金项目:山西省留学人员科研资助项目(2004226)作者简介:扈华(19812),男,内蒙古巴彦淖尔人,太原理工大学计算机与软件学院硕士研究生,研究方向:计算机监控系统;白凤娥(19662),女,山西临县人,教授,研究方向:计算机监控系统,嵌入式系统。基于Verilog2HDL的UART串行通讯模块设计及仿真扈 华,白凤娥(太原理工大学计算机与软件学院,山西 太原030024)摘要:UART协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际工业生产中有时并不使用UART的全部功能,只需将其核心功能集成即可。波特率发生器、接收器和发送器是UART的三个核心功能模块,利用Verilog2HDL语言对这三个功能模块进行描述并加以整合,通过Modelsim仿真,其结果完全符合UART协议的要求。关键词:UART;串行通讯;Verilog2HDL;Modelsim;仿真中图分类号:TP311 文献标识码:ADesign and Simulation of UART Serial Commun ication M odule Based on Verilog2HDLHU Hua,BA I Feng2e(Computer and Software College,Taiyuan University of Technology,Taiyuan 030024,China)Abstract:The protocol of the UART,a full2duplex data trans mission protocol,iswidely used in data communication and controlsystems.In the industry,it dose not use all the functionsof theUART but the core.There are three kernel functionalmodules inUARTwhich consists of baud rate generator,receiver and transmitter.By using the Verilog2HDL to describe the three kernelfunctionalmodules of the UART,making them as a whole and si mulating them with the Modelsim,the results of the simulationare completely consistentwith the UART protocol.Key words:UART;serial communication;Verilog2HDL;Modelsim;simulation0 引 言UART(UniversalAsynchronous Receiver Transmit2ter)协议是一种串行数据传输协议。UART允许在串行链路上进行全双工通信,在数据通信及控制系统中得到了广泛运用。8250、NS16450等芯片都是常见的UART器件,这类芯片具有多种功能,还有许多辅助模块(如FIFO),但在实际应用中有时只需要使用UART的部分功能,因而会造成一定的资源浪费1。使用Verilog2HDL将所需要的UART的核心功能集成到FPGA/CPLD内部,就可以实现紧凑、稳定且可靠的UART数据传输。基本的UART通信只需要两条信号线(RxD,TxD)就可以完成数据的全双工通信任务。TxD是UART发送端,为输出;RxD是UART接收端,为输入2。UART的基本特点是:在信号线上共有两种状态,分别用逻辑1(高电平)和逻辑0(低电平)来区分。例如,在发送器空闲时,数据线保持在逻辑高电平状态,发送器是通过发送起始位来开始一个数据帧的传送,起始位使数据线处于逻辑0状态,提示接收器数据传输即将开始。接着发送数据位,数据位一般为8位一个字节的数据(也有5位、6位或7位的情况),低位(LSB)在前,高位(MSB)在后。然后发送校验位,校验位一般用来判断传输的数据位有无错误,一般是奇偶校验。在使用中,该位常取消。停止位在最后,用以标识数据传送的结束,它对应于逻辑1状态。UART的帧格式包括起始位(start bit,低电平)、58位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。这种格式是由起始位和停止位来实现字符的同步3,如图1所示。12计 算 机 与 现 代 化2008年第8期图1UART的帧格式1UART的实现比较复杂的数字电子系统的设计往往采用自顶向下(Top2Down)的方法,即首先把设计任务划分成几个模块,然后分模块进行设计4。本文所介绍的UART串行通讯模块由3个子模块组成:波特率发生器、接收模块和发送模块,如图2所示。所以对UART通讯模块的实现就是对组成UART的三个子模块(即:波特率发生器、接收模块及发送模块)的实现。波特率发生器专门产生一个本地时钟信号来控制UART的接收与发送;UART接收模块的用途是接收RxD端的串行信号,并将其转化为并行数据;UART发送模块的用途是将准备输出的并行数据按照基本UART帧格式转为串行数据从TxD端串行输出。图2UART的三个子模块1.1波特率发生器模块的实现1.波特率发生器模块的实现原理。波特率发生器实际上就是分频器,可以根据给定的系统时钟频率(晶振时钟)和要求的波特率算出波特率分频因子,把算出的波特率分频因子作为分频器的分频系数。假设系统的时钟频率为10MHz,而要求的波特率为9600bps,因此要设计分频模块,把10MHz的时钟脉冲变为9600Hz的时钟脉冲。故设要求的波特率因子为M,则M=10MHz9600Hz=10422.波特率发生器模块实现的流程。波特率发生器模块实现的流程如图3所示。3.波特率发生器模块实现的源代码。Module CNT(CLK,D I V_CLK,reset);input CLK,reset;/输入信号:时钟信号CLK与复位信号resetreg 10:0H;/计数器H,用来记录输入时钟信号的跳变数reg num;/寄存器num,用来存放将要输出的电平信号outputD I V_CLK;/输出信号always (posedge CLK or posedge reset)beginif(reset)/复位信号到来,进行模块初始化beginH =0;图3 波特率发生器模块实现的流程图num =0;endelseif(H=1041)/当计数器计数值为1041时,计数器清0,准备进行新一次的计数H =0;elsebeginif(H 521)/当计数器的值小于521时,输出为低电平num =0;else/当计数器的值大于521时,输出为高电平num =1;H =H+1;endendassign D I V_CLK=num;endmodule4.波特率发生器模块实现的仿真结果。波特率发生器模块实现的仿真结果如图4所示。图4 波特率发生器模块实现的仿真图2008年第8期扈华等:基于Verilog2HDL的UART串行通讯模块设计及仿真131.2接收模块的实现1.接收模块的实现原理。UART通讯模块是从RxD端接收数据的,RxD端由逻辑1跳变为逻辑0可视为一个数据帧的开始,所以接收模块首先要判断起始位。当UART接收模块复位后,接收模块一直在等待RxD的电平跳转。当RxD电平从逻辑1变为逻辑0,即起始位到来,意味着新的UART数据帧的开始,一旦检测到起始位,就从起始位的下一位开始对UART通讯所要求的波特率时钟D I V _CLK的上升沿计数,每计一次数就对RxD进行一次采样,把每次采样获得的逻辑电平值按先后顺序存入寄存器Q中,当计数为8时,也就是确保接收了所有的数据位,8位串行数据也被转换为8位并行数据。2.接收模块实现的流程。接收模块实现的流程如图5所示。图5 接收模块实现的流程图3.接收模块实现的源代码。module UART(I N,CLK_10MHz,Q,reset);input CLK_10MHz,I N,reset;/输入信号:时钟信号CLK_10MHz,输入的串行信号I N,复位信号resetoutput 7:0 Q;/输出的并行信号reg 7:0 P;/寄存器P,存放接收到的串行数据值reg 3:0 i;/计数器i,用来记录接收到的数据位的数目reg a;/寄存器a,用来判断是否开始接收数据reg k;/寄存器k,用来判断模块是否完成数据接收CNT CNT(CLK_10MHz,CLK_9600Hz,reset);/分频器进行分频always (posedge CLK_9600Hz or posedge reset)beginif(reset)/如果复位信号到来,则进行模块初始化begini =0;k =1;a =1;endif(I N=0&a=1)/如果数据起始位到来,则准备接收数据a =0;if(a=0)/如果接收控制寄存器a表明可以接收数据,则开始接收数据beginif(i 8&k=1)/如果接收到的数据位小于8位,则继续进行接收beginP i =I N;i =i+1;/接收一位数据,则计数器加1endelse/如果接收到的数据位大于8位,则停止接收数据k =0;endendassign Q=P;endmodule4.接收模块实现的仿真结果。接收模块实现的仿真结果如图6所示。图6 接收模块实现的仿真图接收时的输入信号为I N,其输入的位序列为00110110001,此序列中已包含了起始位0、校验位0和停止位1。接收到的数据位存放到寄存器7:0 Q中,可以看到,图6中Q为接收到的数据位,此数据由高位到低位依次为00110110,正是UART帧中的数据位部分。1.3发送模块的实现1.发送模块的实现原理。发送模块实现的功能是将要发送的8位并行数据变为串行数据,同时在数据头部加起始位,在数据位尾部加奇偶校验位和停止位。即,当UART发送模14计 算 机 与 现 代 化2008年第8期块被复位信号复位以后,发送模块将立刻进入准备发送状态,在该状态下读8位并行数据到寄存器7:0 I NSend中,之后输出逻辑0作为起始位,从起始位的下一位开始对UART串行通讯所要求的波特率时钟D I V_CLK的上升沿计数,每计一次数从寄存器7:0 I NSend中按照由低位到高位的顺序取出一位数据送到TxD端,当计数为8时,也就是确保发送了所有的数据位,同时也将8位并行数据转换为8位串行数据。根据8位数据位中逻辑1的个数确定校验位,然后输出校验位,最后输出逻辑1作为停止位。2.发送模块实现的流程。发送模块实现的流程如图7所示。图7 发送模块实现的流程图3.发送模块实现的源代码。module UART(CLK_10MHz,I NSend,QSend,resetSend);input 7:0 I NSend;/输入的并行信号input resetSend;/复位信号outputQSend;/输出的串行信号reg ack;/寄存器ack,用来判断发送模块是否已经复位reg start Bit;/寄存器startBit,用来判断数据起始位是否已经发送reg 3:0 iSend;/计数器iSend,用来记录已经发送的数据位的数目reg tt;/寄存器tt,用来存放待发送的数据位reg check;/寄存器check,用来存放将要发送的数据校验位CNT CNT(CLK_10MHz,CLK_9600Hz,resetSend);/分频器进行分频always (posedge CLK_9600Hz or posedge resetSend)beginif(resetSend)/如果复位信号到来,则进行模块初始化beginack =1;startBit =0;endelsebeginif(ack=1)/如果模块初始化完毕,则准备发送数据beginif(startBit=0)/如果没有发送起始位,则发送起始位begintt =0;startBit =1;iSend =0;check =0;endelsebeginif(startBit=1&iSend 8)/如果起始位已经发送,则开始发送数据位beginif(I NSend iSend=1)/校验位的计算check =checkI NSend iSend;tt =I NSend iSend;iSend =iSend+1;/发送一位数据,则计数器加1endelseif(iSend=8)/如果数据位发送完毕,则发送校验位begintt =check;iSend =iSend+1;endelsett =1;/发送停止位endendendendassign QSend=tt;endmodule4.发送模块实现的仿真结果。发送模块实现的仿真结果如图8所示。准备发送的数据由高位到低位依次为00110110,QSend为数据发送端,可以看到发送的串行位序列为00110110001,符合UART帧格式的要求。1.4 UART各子模块的整合1.各子模块的整合原理。2008年第8期扈华等:基于Verilog2HDL的UART串行通讯模块设计及仿真15图8 发送模块实现的仿真图在各模块功能实现的基础上,把它们有机地整合在一起,使波特率发生器能够按照UART通讯的要求正常工作,接收模块和发送模块能够根据各自的复位信号使整合模块具有发送或接收功能。2.各子模块的整合流程。各子模块的整合流程如图9所示。图9 各子模块的整合流程图3.各子模块的整合结果。各子模块的整合仿真结果如图10所示。图10 各子模块的整合仿真图仿真是以接收和发送“6”为例的。图10中I N信号为接收时的输入信号,接收完成后数据存放到寄存器7:0 Q中,可以看到Q中存放的8位数据是00110110,正是“6”的ASCII码。I NSend寄存器中存放的是发送时待发送的数据,数据的值为00110110,即“6”的ASCII码,QSend为发送输出信号,可以看到发送出去的串行数据依次为00110110001,其中已经包含了起始位0、校验位0和停止位1。2 主要问题及措施问题1:在仿真过程中经常遇到一些寄存器没有被初始化,导致仿真结果不正确,这是因为if语句嵌套太复杂或循环语句使用不恰当使得寄存器初始化语句未能执行。措施:尽量减少if语句的嵌套层数,这样可以减少阅读程序的复杂度和程序调试的复杂度,能够更容易发现错误以便及时寻找到解决方案。问题2:在程序中使用initial过程块进行寄存器的初始化,会使源程序在下载到目标板的整合过程时不能通过。措施:可以外接一个输入信号进行各寄存器的初始化,这样做既可以使源程序顺利下载到目标板中,又可以从通讯模块的外部对通讯模块进行控制。问题3:在程序中如果在两个always过程块中对同一个变量进行赋值,程序将不能下载到目标板中,因为当两个always过程块中的敏感事件列表中的事件同时满足时,就会引发在两个always语句中对相同变量同时赋值而导致冲突。措施:合并always语句块,即把引发同一变量改变的过程敏感事件用or连接起来放在一个always语句块中。3 结束语Verilog2HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模,该语言最大的特点是简洁、灵活、高效,其风格类似C语言,容易学习和掌握,且对数字逻辑具有较强的描述性,使得笔者在对UART进行设计和仿真时能够较容易地实现。用Verilog2HDL设计及仿真UART的三个核心模块,方便、高效,其结果易于实用化。参考文献:1季雄,段吉海,胡媛媛,等.基于Verilog HDL的UART设计J.微计算机信息,2006,22(17):2302232.2 聂涛,许世宏.基于FPGA的UART设计J.现代电子技术,2006,29(2):1272129.3 姜宁,范多旺.基于FPGA/CPLD的通用异步通信接口UART的设计J.信息技术与信息化,2006(1):86288.4 王长宏,陈朝阳,邹雪城,等.Verilog HDL设计实例及其仿真与综合J.计算机应用,2001,27(12):19222.

    注意事项

    本文(基于Verilog_HDL的UART串行通讯模块设计及仿真.pdf)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开