《eda课程设计》word版.docx_第1页
《eda课程设计》word版.docx_第2页
《eda课程设计》word版.docx_第3页
《eda课程设计》word版.docx_第4页
《eda课程设计》word版.docx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录第一章 设计原理11.1 UART基本特点11.2 UART结构组成1第二章 UART设计内容32.1波特率发生器32.2发送模块设计32.3接收模块设计4第三章 运行输出结果63.1分频器仿真及分析63.2发送模块仿真及分析63.3接收模块仿真及分析63.3数码显示模块7第四章 总结8参考文献9附录10第一章 设计原理UART协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际工业生产中有时并不使用UART的全部功能。只需将其核心功能集成即可。波特率发生器、接收器和发送器是UART的三个核心功能模块,利用Verilog-HDL语言对这三个功能模块进行描述并加以整合UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。随着FPGA/CPLD的飞速发展与其在现代电子设计中的广泛应用,FPGA/CPLD功能强大、开发过程投资小、周期短、可反复编程、保密性好等特点也越来越明显。因此可以充分利用其资源,在芯片上集成UART功能模块,从而简化了电路、缩小了体积、提高了可靠性,而且设计时的灵活性更大,周期更短。1.1 UART基本特点基本的UART通信只需要两条信号线(RXD、TXD)就可以完成数据的相互通信,接收与发送是全双工形式。TXD是UART发送端,为输出;RXD是UART接收端,为输入。UART的基本特点是:(1)在信号线上共有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。(2)起始位(Start Bit):发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑0状态,提示接受器数据传输即将开始。(3)数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),低位(LSB)在前,高位(MSB)在后。(4)校验位(parity Bit):可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。在使用中,该位常常取消。(5)停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态。(6)位时间:即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止位有0.5位、1位、1.5位格式,一般为1位。(7)帧:从起始位开始到停止位结束的时间间隔称之为一帧。(8)波特率:UART的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率9600=9600bps(位/秒)。表1 UART的数据帧格式STARTD0D1D2D3D4D5D6D7PSTOP起始位数 据 位校验位停止位1.2 UART结构组成本设计以FPGA为基础来实现异步通信,而UART模块就为本设计关键所在,如图1所示,该模块主要有串行发送器、接收器以及波特率发生器三个模块组成。波特率发生器模块:在异步通信中,发送方和接受方必须保持相同的波特率才能实现正确的数据传送。在本设计中,由于RS-232C传输必定是工作在某种波特率下,为了便于和RS-232C总线进行同步,需要产生符合RS-232C传输波特率的时钟。图1 UART模块图波特率发生器实际上就是一个分频器。可以根据给定的系统时钟频率(晶振时钟)和要求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数。波特率分频因子可以根据不同的应用需要更改。由于串行数据帧和接收时钟是异步的,由逻辑1转为逻辑0可以被视为一个数据帧的起始位。然而,为了避免毛刺影响,能够得到正确的起始位信号,必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都是属于逻辑0才可认定接收到的是起始位。由于内部采样时钟bclk周期(由波特率发生器产生)是发送或接收波特率时钟频率的16倍,所以起始位需要至少8个连续bclk周期的逻辑0被接收到,才认为起始位接收到,接着数据位和奇偶校验位将每隔16个bclk周期被采样一次(即每一个波特率时钟被采样一次)。发送器只要每隔16个bclk周期输出1个数据即可,次序遵循第1位是起始位,最后一位是停止位。在本设计中没有校验位,但只要改变Generic参数FrameLen,也可以加入校验位,停止位是固定的1.5位格式。第二章 UART设计内容2.1波特率发生器波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,其单位是波特(Baud)。波特率与比特率的关系是比特率=波特率X单个调制状态对应的二进制位数。模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。2.2发送模块设计串行发送数据时每秒钟发送的比特个数称之为波特率,常用串行口波特率有9600、19200、115200等多种。UART的数据帧的形式分组发送数据,以8位数据位、1位起始位和1.5位停止位的帧格式为例,每一个数据帧由10位数据构成,首先是一个低电平起始位来标志帧开始,随后由低至高发送8位数据,最后是1.5位高电平的停止位。在逻辑结构上,每秒9600次的发送节拍由波特率发生器产生,它是一个参数化、分频比的整数分频器。这里使用边沿逻辑,对于分频时钟的占空比并没有要求,所以直接用模n计算器进行分频。9600Hz的时钟信号驱动10bit的一位计数器,将数据总线上载入的8bit数据加上起始位和停止位后由低到高依次移除。发送模块设计流程图如图2所示。发送过程:当要发送数据出去时,先把要发送的CPU内部数据存储到数据I/O缓存器,传送到数据寄存器,然后进行串并转换。UART模块内部会重置波特率发生器控制逻辑控制移位寄存器进入RS-232C串行发送的协议模式,并且使移位寄存器工作在波特率模式下,于是移位寄存器便在波特率时钟的驱动下依次将数据寄存器的数据一位一位发送到RS-232C的发送端TXD,这样就产生了RS-232C的数据发送时序。图2 发送模块流程图2.3接收模块设计UART是异步传输接口,没有时钟信号同步。所以接收端需要进行过采样来保证数据的接收,RS232标准规定的过采样率是以发送波特率的16倍时钟对数据进行检测。UART接收逻辑通过检测TXD上起始位的下降沿作为帧同步标准,这样就相当于把每个位分成了16份,为了避免干扰取16份中位于中部的6、7、8三个采样进行判别,以它们中两个或两个以上相同的值作为采样结果。接收模块设计流程图如图3所示。接收过程:当UART模块检测到有新数据(RS-232C总线传输线的起始位)就会触发接收流程。首先UART模块内部会重置波特率发生器和移位寄存器,控制逻辑使移位寄存器的工作模式为波特率模式,以准备数据接收,其次移位寄存器在波特率时钟的驱动下工作,不断的读取RS-232C串行总线上的输入数据,一位一位的接收,并且将数据保存到内部的数据寄存器内。然后在进行串并转换,在通过CPU内部数据总线传送到数据I/O缓存器,最后被CPU内部采用。图3 接收模块流程图第三章 运行输出结果3.1分频器仿真及分析假设数据的波特率为p,则所需时钟的频率为16*p。以波特率p为9600为例,系统时钟为1MHz,则分频系数为1000000/(16*9600) = 6.5。对程序进行仿真,加入输入输出信号,设置系统时钟信号clk的周期为20ns。仿真图如图4所示。图4 分频器仿真图3.2发送模块仿真及分析UART发送模块的功能:接收到发送指令后,把数据按UART协议输出,先输出一个低电平的起始位,然后从低到高输出8个数据位,接着是可选的奇偶校验位,最后是高电平的停止位。用Quartus II软件建立工程机顶层文件,编译输入各个参数数据,并进行波形仿真。如图5所示。图5 发送模块仿真图对图,当发送命令wrsig的上升沿有效时,启动发送数据。串行数据的波形与发送数据dataout相一致,UART的发送模块得到正确验证。3.3接收模块仿真及分析UART接收模块的功能:时时检测线路,当线路产生下降沿时,即认为线路有数据传输,启动接收数据进程进行接收,按从低位到高位接收数据。用Quartus II软件建立工程机顶层文件,编译输入各个参数数据,并进行波形仿真。如图6所示。图6 接收模块仿真图对图分析看出,UART接收模块接收到的数据与UART发送模块发送的数据相一至,每接收到一个数据都有一个读取数据指示rdisg,UART接收模块得到正确验证。3.3数码显示模块本课题中设计的所有模块均采用VHDL硬件描述语言进行描述,在Altera公司的MAXPLUS II开发环境下进行程序的编译、逻辑综合和仿真以及管脚分配,在Mars-EP1C3-S Altera Cyclone FPGA开发板(增强版)上进行验证。 将开发板接上电源,输入端跟电脑主机接口相连。在电脑上打开串口调试软件,将串口改成COM1,会显示串口成功打开,点一下图上的LED灯,这时会有一个串行数据从电脑接口发出,发送到开发板上,经过开发板上的芯片处理,我们会发现与电脑图上相同位置的开发板上的LED灯会亮。一切与预期结果一样,测试成功。测试图如图7所示。图7 测试结果图第四章 总结本文设计的模块工作在应用比较普遍的方式 ,实现全双工的通信。还可以通过设置波特率发生器的寄存器设置工作的波特率,以适应各种不同的场合。本文介绍了用软件方式构建UART的一种方法,本设计完全采用Verilog-HDL语言进行描述。实现了UART设置的系统时钟输入,复位输入 ,数据接收,数据发送,波特率发生器 。这次EDA课程设计历时一个多星期,在这段日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。知识是无穷无尽的,知识的获取需要一颗上进的心,老师将我们领进了门,下面的路就应该我们自己出去去走,即使充满荆棘,也要努力奋斗向前冲。总的来说,这次设计的结果还是比较成功的,在设计中遇到了很多问题,最后在华老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。参考文献1郑亚民,董晓舟.VHDL与VerilogHDL比较学习及建模指导.北京:国防工业出版社,2008.62夏宇闻 ,Verilog数字系统设计教程(第2版)M ,北京航空航天大学出版社,2008 3基聂涛,许世宏 现代电子技术2006年第二期总第217期4程耀林.FPGA的系统设计方法解析J.现代电子技术,20055吴继华,王诚.设计与验证Verilog HDLM.北京:人民邮电出版社,2006附录分频器程序:module clkdiv(clk, clkout); input clk; /系统时钟 output clkout; /采样时钟输出 reg clkout; reg 15:0 cnt; always (posedge clk) /分频进程begin if(cnt = 16d12) beginclkout = 1b1;cnt = cnt + 16d1; end else if(cnt = 16d26) beginclkout = 1b0;cnt = 16d0; end else begincnt = cnt + 16d1; endendendmodule发送模块程序:module uarttx(clk, datain, wrsig, idle, tx);input clk; /UART时钟input 7:0 datain; /需要发送的数据input wrsig; /发送命令,上升沿有效output idle; /线路状态指示,高为线路忙,低为线路空闲output tx; /发送数据信号reg idle, tx;reg send;reg wrsigbuf, wrsigrise;reg presult;reg7:0 cnt; /计数器parameter paritymode = 1b0;/检测发送命令是否有效always (posedge clk)beginwrsigbuf = wrsig;wrsigrise = (wrsigbuf) & wrsig;endalways (posedge clk)beginif (wrsigrise & (idle) /当发送命令有效且线路为空闲时,启动新的数据发送进程beginsend = 1b1;endelse if(cnt = 8d176) /一帧资料发送结束beginsend = 1b0;endendalways (posedge clk)beginif(send = 1b1)begincase(cnt) /产生起始位8d0:begintx = 1b0;idle = 1b1;cnt = cnt + 8d1;end8d16:begintx = datain0; /发送数据0位presult = datain0paritymode;idle = 1b1;cnt = cnt + 8d1;end8d32:begintx = datain1; /发送数据1位presult = datain1presult;idle = 1b1;cnt = cnt + 8d1;end8d48:begintx = datain2; /发送数据2位presult = datain2presult;idle = 1b1;cnt = cnt + 8d1;end8d64:begintx = datain3; /发送数据3位presult = datain3presult;idle = 1b1;cnt = cnt + 8d1;end8d80:begintx = datain4; /发送数据4位presult = datain4presult;idle = 1b1;cnt = cnt + 8d1;end8d96:begintx = datain5; /发送数据5位presult = datain5presult;idle = 1b1;cnt = cnt + 8d1;end8d112:begintx = datain6; /发送数据6位presult = datain6presult;idle = 1b1;cnt = cnt + 8d1;end8d128:begintx = datain7; /发送数据7位presult = datain7presult;idle = 1b1;cnt = cnt + 8d1;end8d144:begintx = presult; /发送奇偶校验位presult = datain0paritymode;idle = 1b1;cnt = cnt + 8d1;end8d160:begintx = 1b1; /发送停止位 idle = 1b1;cnt = cnt + 8d1;end8d176:begintx = 1b1; idle = 1b0; /一帧资料发送结束cnt = cnt + 8d1;enddefault:begincnt = cnt + 8d1;endendcaseendelsebegintx = 1b1;cnt = 8d0;idle = 1b0;endendendmodule接收模块程序:module uartrx(clk, rx, dataout, rdsig, dataerror, frameerror);input clk; /采样时钟input rx; /UART数据输入output dataout; /接收数据输出output rdsig;output dataerror; /资料出错指示output frameerror; /帧出错指示reg7:0 dataout;reg rdsig, dataerror;reg frameerror;reg 7:0 cnt;reg rxbuf, rxfall, receive;parameter paritymode = 1b0;reg presult, idle;always (posedge clk) /检测线路的下降沿beginrxbuf = rx;rxfall = rxbuf & (rx);endalways (posedge clk)beginif (rxfall & (idle) /检测到线路的下降沿并且原先线路为空闲,启动接收数据进程beginreceive = 1b1;endelse if(cnt = 8d175) /接收数据完成beginreceive = 1b0;endendalways (posedge clk)beginif(receive = 1b1)begincase (cnt)8d0:beginidle = 1b1;cnt = cnt + 8d1;rdsig = 1b0;end8d24: /接收第0位数据beginidle = 1b1;dataout0 = rx;presult = paritymoderx;cnt = cnt + 8d1;rdsig = 1b0;end8d40: /接收第1位数据beginidle = 1b1;dataout1 = rx;presult = presultrx;cnt = cnt + 8d1;rdsig = 1b0;end8d56: /接收第2位数据beginidle = 1b1;dataout2 = rx;presult = presultrx;cnt = cnt + 8d1;rdsig = 1b0;end8d72: /接收第3位数据beginidle = 1b1;dataout3 = rx;presult = presultrx;cnt = cnt + 8d1;rdsig = 1b0;end8d88: /接收第4位数据beginidle = 1b1;dataout4 = rx;presult = presultrx;cnt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论