




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川师范大学本科毕业设计基于FPGA的UART设计学生姓名院系名称专业名称班 级学 号指导教师完成时间基于FPGA的UART设计电子信息工程专业摘要:UART(通用异步收发器)是一种应用广泛,协议简单,易于调试的串行传输接口。FPGA是能高密度,低消耗完成所需要的逻辑功能的一种在线可编程器件,是现在业内提高系统集成度最佳技术之一,其可反复配置,且使用灵活。VHDL是描述电路功能或行为的一种硬件语言。本文首先阐述了运用FPGA实现UART接口的意义。接着介绍了UART的波特率发生器,发送功能和接收三大核心功能的理论知识。FPGA的工作原理,配置模式以及VHDL语言实现状态机的相关理论基础。给出了运用VHDL语言将UART三大功能嵌入在FPGA上的模块化设计方法。设计包括四大模块:顶层模块,波特率发生器,UART接收器,UART发生器。在FPGA片上集成UART主要功能,减少了电路板体积,同时电路也增加了可移植和反复配置功能,有效提高了电路的集成度和灵活性。最后运用Quartus ii 9.1实现了其功能仿真。关键词:FPGA UART VHDL 有限状态机The Design of Universal Asynchronous Receiver Transmitter Based on FPGAAbstract:UART (Universal Asynchronous Receiver Transmitter) is a widely used, simple protocol, easy to debug serial transmission interface. FPGA is capable of high-density, low-cost needed to complete a line of programmable logic devices, is now one of the industrys best technologies to improve system integration, which can be repeated to configure and use and flexible. VHDL description of the circuit function or behavior is a hardware language. This paper first describes the use of FPGA to realize the significance of the UART interface. Then introduced the theory of knowledge UART baud rate generator, sending and receiving three core functions. FPGA works, configuration mode and the VHDL-based state machine theory. Gives the UART using VHDL language to three functions embedded in the FPGA design. Design includes four modules: the top-level module, baud rate generator, UART receivers, UART generator. Integrated on-chip UART FPGA basic functions, reducing board space, the circuit also increases the portability and repeated configuration capabilities, improve the integration and flexibility of the circuit. Finally, the use of Quartus ii 9.1 implements its functional simulation.Key Words:FPGA ;UART ;VHDL;FSMII目 录摘要:IAbstract:II1 绪论11.1 课题背景11.2 课题研究现状21.3 课题研究内容与主要工作31.4 课题内容结构32 UART理论基础42.1 接口技术简介42.2 UART基本结构42.3 UART数据帧格式52.4 涉及到的理论计算63 设计工具73.1 课题硬件平台FPGA73.2 设计工具QuartusII简介与使用73.3 VHDL语言简介74 UART实现方案84.1 系统总体结构84.2 顶层模块设计84.3 波特率发生模块设计94.4 接收模块104.5 发送模块设计125 UART设计的仿真与验证155.1波特率发生模块仿真155.2 接收模块仿真155.3 发送模块仿真166 总结17参考文献18致谢19附录20I基于FPGA的UART设计1 绪论在计算机的数据通信中,外设一般不能与计算机直接相连,它们之间的信息交换主要存在以下问题:(1)速度不匹配。外设的工作速度和计算机的工作速度不一样,而且外设之间的工作速度差异也比较大。(2)数据格式不匹配。不同的外设在进行信息存储和处理时的数据格式可能不同,例如最基本的数据格式可分为并行数据和串行数据。(3)信息类型不匹配。不同的外设可能采用不同类型的型号,有些是模拟信号,有些是数字信号,因此采用的处理方式也不同。为了解决外设和计算机之间的信息交换问题,即需要设计一个信息交换的中间环节接口。对于台式电脑、个人笔记本,最常用的接口就是USB接口、串口、并口、PS2接口、网口。在我们电子设计中的PC终端软件的通信,应用最多的就是串口、其次是USB接口、再就是网口。1.1 课题背景电子产品中,很多低速的数据采集,一些点阵系统的配置,GPRS模块的调试等,都用串口来实现跟PC的通信。甚至一些单片机的配置都用串口实现通信。串口最高可以达到128000bps的速率,在低速场合下,完全能够实现与PC的通信,来满足我们各种要求,以实现对数据的实时处理。目前的串行通信常用UART实现数据的串/并转换或并/串转换。 UART(通用异步收发器)是一种串行通信协议,主要用于短距离,低速率,低成本的数据的计算机和外设之间的交流。是电脑硬件的一部分,具体实物表现为一块并行输入成为串行输出的模块化芯片。8250、8251、NS16450等芯片都是常见的UART器件。UART主要功能实现通信中的数据串并转换,且能奇偶检验。将计算机内部传送过来的并行数据转换为串行数据流加入奇偶校验位后输出。或者将计算机外部来的串行数据奇偶校验后转换为字节,供计算机内部使用并行数据的器件使用。它的异步模式使芯片适应性强,对时钟精度要求低(成本低)。随着FPGA的广泛应用,经常需要FPGA与其他数字系统进行串行通信,专用的UART集成电路如8250,8251等是比较复杂的,因为专用的UART集成电路既要考虑异步的收发功能,又要兼容RS232接口设计,在实际应用中,往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。如果设计上用到FPGA /CPLD器件,可以将所需要的UART功能集成到FPGA内部,实现FPGA与其他数字系统的直接通信,从而简化了整个系统电路,提高了可靠性、稳定性和灵活性。1.2 课题研究现状 1.2.1 UART芯片发展与现状UART产生于上个世纪70年代,是第一块大规模集成电路。1981年的推出的IBM PC机主板上采用了8250 UART与外设进行数据通信。直到上个世纪末,UART一直是PC中最主要的串行通信接口。在嵌入式领域,由于UART具有操作简单、工作可靠、抗干扰强、传输距离远(组成485网络可以传输1,200米以上),设计人员普遍认为UART是从CPU或微控制器向系统的其他部分传输数据的最佳方式,因此它们被大量地应用在工业、通信和家电控制等嵌入式领域。然而UART的速度、灵活性(软件可配置)和体积越来越不能满足开发者需要,随着高速串行总线USB的出现,现在越来越多的笔记本电脑上已经取消了UART串口。截止到目前,全球范围内有超过40种UART器件可以选择,大多数UART器件是以计算机总线转换UART为应用基础的,与20多年的前的UART相比,现在芯片的管脚,寄存器及大体操作几乎没有改变。1.2.2 FPGA芯片发展与现状FPGA由早期的PLD(可编程逻辑器件)、PLA(可编程逻辑阵列)、PAL(可编程阵列逻辑)逐渐发展为如今Altera的CPLD(复杂可编程逻辑器件)和Xilinx的FPGA(现场可编程逻辑门阵列)。PLD(可编程逻辑器件)是70年代发展起来的新型逻辑器件。PLD是为弥补当时的ASIC(专业集成电路)可靠性低、成本高、功耗大且设计周期长等不足而发展起来的。PLA(可编程逻辑阵列)基本结构是基于“与或阵列”,其“与阵列”和“或阵列”均可编程。由于PLA器件的资源利用率低,现已很少使用。PAL(可编程阵列逻辑)基本结构也是基于“与或阵列”,它的“与阵列”是可编程的,而“或阵列”是固定的。FPGA(现场可编程逻辑门阵列)是近几年集成电路中发展最快的产品。从一开始少量生产以配合其他芯片功能发展到作为核心芯片大量生产。其综合了PLD的现场可编程特性,调试时间短和ASIC的低成本,大规模复杂集合能力的特点应运而生。采用了不同于PLD架构的设计方式(主要是SRAM Base及An-ti fuse)。FPGA芯片由查找表、触发器和布线资源组成。FPGA的逻辑单元由查找表和触发器构成。Altera(QuartussII)和Xilinx(ise)是目前最大的可编程集成电路供货商。1985美国Xilinx公司首次推出FPGA产品XC2064,Xilinx公司FPGA主要有XC4000、Virtex、Spartam,以及最新的Virtex系列。Altera公司FPGA主要有FLEX、Cyclone(低端)、Arria(中端)、Stratix(高端)系列。目前市场上常用FPGA产品是Xilinx公司的Spartan和Virtex系列及Altera公司的ACEX和APEX系列。随着电子技术日益成熟,可编程逻辑器件的高速发展,基于FPGA的嵌入式系统技术正在成熟。FPGA芯片将继续向高密度、高容量、低压低功耗的方向迈进。1.3 课题研究内容与主要工作随着 EDA 技术的发展,使用硬件描述语言来设计 PLD/FPGA 已经成为一种趋势。本课题中,将UART分为几个模块的组合,利用硬件描述语言VHDL描述其逻辑功能,并采用自顶向下的设计方法进行设计。核心部分用有限状态机(FSM),使逻辑设计更为直观简单。使用Quartus II 工具,对逻辑设计逐层进行仿真验证。课题主要工作1.熟悉FPGA设计开发流程以及UART各个模块的功能,掌握各个模块的工作流程,熟悉UART通信协议。2.用VHDL语言编程UART各个模块的逻辑行为,以及顶层模块的功能。3.在Quartus II软件上对其进行进行逻辑综合,仿真验证。1.4 课题内容结构第一章绪论介绍课题背景、研究意义,以及与本课题相关的技术当前现状,明确研究内容以及主要工作。第二章介绍了UART的理论内容,明确UART各模块的工作特性。第三章介绍本次设计实现平台和工具。具体为硬件平台FPGA,软件平台Quartusii以及硬件描述语言VHDL.第四章根据理论依据对UART结构设计,包括整体系统框架介绍和各部分模块说明以及相关流程图。第五章对设计完成后的UART进行逻辑综合,功能及时序仿真,并分析总结逻辑综合和仿真结果。第六章对课题的总结以及有待改进之处。第七章致谢。2 UART理论基础2.1 接口技术简介接口是CPU与外界的连接部件,是CPU与外界交换信息的中转站。一个接口的基本功能是在系统总线和I/O设备之间传输信号,提供缓冲作用,以满足接口两边的时序要求。如图1, 图1 接口功能主要的计算机接口技术有两种:并行接口和串行接口。串行通信是把要传输数据中的各个二进制码置于同一条传输线上,从低位到高位、逐位地、顺序地进行传送。所用传输线少,一个方向只需一条传输线,成本低。串行通信分为两种类型:同步通信和异步通信。串行异步是计算机通信最常用的数据信息传输方式,接收和发送双方不使用共同的参考时钟,以字符为单位进行传输,字符之间的传输间隔任意,而每个字符的前后都要用一些位数来作为分隔位。2.2 UART基本结构UART主要由UART内核、信号检测器、移位寄存器、波特率发生器和计数器组成,如图2所示。 图2 UART功能模块从异步接收输入信号RXD接收到的异步信号通过接收器完成串行并行的转换,形成异步数据帧;发送器将CPU发出的8位数据进行并行串行转换,从TXD发送出去。2.3 UART数据帧格式基本的UART通信只需要两条信号线(RXD,TXD)就可以完成数据的相互通信,接收与发送是全双工形式,其中TXD是UART发送端,RXD是UART接收端。UART基本特点是:在信号线上有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应保持在逻辑高电平状态。发送器是通过发送起始比特而开始一个字符传送,起始比特使数据线处于逻辑0状态,提示接收器数据传输即将开始。数据位一般为8位一个字节的数(也有6位7位的情况),低位(LSB)在前,高位(MSB)在后。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。停止位在最后,用以标志UART一个字符传送的结束,它对应于逻辑1状态,UART数据帧格式如图3所示。 图3 UART数据帧格式一帧异步通信传输经历的步骤为:无传输:发送器处于空闲状态,数据线保持“1”状态。起始传输:发送器发出一个 “0”表示传输字符开始。而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。数据传输:传输8位数据D0-D7。低位到高位传输。奇偶传输:在使用中,校验位常常取消。停止传输:一个字符数据的结束标志。可以是1位、1.5位、2位的高电平“1”。2.4 涉及到的理论计算2.4.1 位时间即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止位有0.5位、1位、1.5位格式,一般为1位。每一个数据位的宽度等于传送波特率的倒数。2.4.2 帧从起始位开始到停止位结束的时间间隔称之为一帧。2.4.3 波特率UART的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率9600=9600bps(位/秒)。发送模块和接收模块不使用共同的时钟信号,也就是在串行通信中发送数据的同时不会把时钟信号从一个UART接口送到另一个UART接口。发送数据时每位持续时间是固定的,由发送器本地时钟(bclk)控制,每秒发送的数据位个数,即为“波特率”。2.4.4 波特率因子为了使接收方能够进行同步检测,接收器采用比波特率更高频率的时钟来提高定位采样的分辨能力和抗干扰能力。而这个频率的倍数就称作波特率因子。一般是16、32和64.3 设计工具3.1 课题硬件平台FPGAFPGA设计方法有“自顶向下”和“自下而上”,一般FPGA设计常选择前者。所谓“自顶向下”的设计方法,就是把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接使用EDA元件库为止。具体步骤为:按照“自顶向下”的设计方法进行系统划分,用硬件描述语言,将设计产品的功能描述出来,将设计输入编译成标准文件;利用综合器对源代码进行综合优化处理得到EDA工业标准文件;把设计好的逻辑安放到PLD/FPGA内 (布局布线);用仿真软件验证电路的时序;无误后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片FPGA中。3.2 设计工具QuartusII简介与使用Quartus II是Altera公司推出的CPLD/FPGA集成化开发软件,可以完成设计输入、逻辑综合、布局与布线、仿真、时序分析、硬件配置完整的PLD设计流程。Quartus提供了多种设计输入方式、快速的编译和直接易懂的器件编程。具有友好的用户界面, 快速的综合速度和更优化的综合和适配功能。Quartus II自带宏功能模块库,大大减轻了用户的工作量,加快设计速度。Quartus II 内置仿真器可以在工程中仿真任何设计。可进行功能仿真、时序仿真来检验设计的逻辑功能和计算设计的内部定时是否符合设计。仿真器可以仿真整个设计,或仿真设计的任何部分。支持可编程系统(SOPC)和大规模FPGA设计开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。该软件支持Altera公司的Stratix 、Stratix GX、Stratix、MAX3000A、MAX 7000B、MAX 7000AE、MAX 、FLEX6000、FLEX10K系列、Cyclone、Cyclone 、APEX 、APEX20K和ACEX1K系列。3.3 VHDL语言简介目前常用硬件描述语言是VHDL和VerilogHDL。较于在C语言基础上发展起来的语言格式自由的VerilogHDL而言,VHDL语言更为严谨,在大学里运用较多。IEEE和美国国防部于1987年正式确认VHDL为标准硬件描述语言。VHDL功能强大,简单的语言程序即可实现复杂的硬件电路。其次,VHDL即可支持标准定义的数据类型,也支持用户定义的数据类型,丰富的数据类型增强了描述自由度。不仅如此,VHDL语言的描述,模拟,综合和布线均符合标准,可移植能力强,不同的工作平台可以用同一个硬件电路的VHDL语言描述,设计方案亦在设计人员之间共享,大大减少设计工作量和开发周期,受到了设计人员广泛推崇。甚至在使用VHDL语言描述硬件电路时,设计人员可以先进行设计电路,而不用考虑选择设计的器件,因其可适用于不同的器件结构。4 UART实现方案4.1 系统总体结构由图4可以看出,基于FPGA的UART设计采用模块化的思想,分为三个子模块:波特率发生器,接收模块,发送模块。如下图 图4 系统结构图采用VHDL硬件描述语言按照“由上至下”的思想对各个模块先分别设计然后连接起来形成总体架构。串口采用标准的RS-232协议,主要参数选择为:波特率9 600 bits,8位有效位,无奇偶校验位,1位停止位。4.2 顶层模块设计按照系统功能划分,UART由波特率发生模块、接收模块和发送模块构成。发送模块的用途是将准备输出的并行数据按照基本UART帧格式转为TXD信号串行输出。接收模块接收RXD串行信号,并将其转化为并行数据。波特率发生器就是专门产生一个远远高于波特率的本地时钟信号对输入RXD不断采样,使接收器与发送器保持同步。图5 UART总模块图串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要8个CLK16时钟周期,才是正常的起始位,然后在每隔16个CLK16时钟周期采样接收数据,移位输入接收移位寄存器rsr,最后输出数据dout。还要输出一个数据接收标志信号标志数据接收完。4.3 波特率发生模块设计图6 波特率发生模块波特率发生器实际上就是一个分频器(计数器)。功能是产生RS232通信所采用波特率同步时钟,按照RS232串行通信的时序要求进行数据接收或发送。如左图所示,系统时钟从输入端口clk输入(FPGA提供30MHZ系统时钟),RS232芯片通信波特率范围0-20000bps,本次设计中采用9600bps进行数据的传送。取波特率因子N=16,即收发频率是数据传输速率的16倍。那么波特率发生器输出频率为9600*16HZ=153600HZ。波特率产生过程:提供的时钟为30MHz,以图6输入端口clk输入,通过总线写入不同的数值到波特率保持寄存器,然后用计数器的方式生成所需要的各种波特率,数值的计算原则:30MHZ/(16*所期望的波特率),这里希望输出9600Hz的波特率,那么这个值就是30MHZ/(16*9600)=195(11000011B)。由此输出端口bclk可输出频率153600HZ来控制数据的收发采样。4.4 接收模块4.4.1接收模块及其功能接收模块的作用是把收到的串行数据转换成并行数据进行输出,并判断收到的数据是否有错。接收模块的引脚如图7所示,图7 接收模块引脚图接收模块信号:resetr(输入):复位信号;bclkr(输入):输入时钟;rxdr(输入):串行数据输入信号;rbuf7.0(输出):并行数据输出总线;r_ready(输出):数据接收完毕信号。串行接收模块框图如图8,程序在检测到起始位后(rxdr由1跳变到0),计数连续8个接收时钟采样仍然是低电平后,开始接收串行数据,当采样计数器计数结束后,所以数据已移位输入RSR。最后对高电平进行检测,检测到正确的停止位后说明本帧数据接收完毕。将数据转存在数据寄存器RBR中,串/并转换后,输出8位并行数据rbuf7.0。其中,RBR的状态可通过引脚r_ready来表示。r_ready输出高电平1表示数据接收有效。 图8 UART串行接收模块工作框图对于接收器工作频率有必要强调一下:串行数据一位一位由低位到高位D0D7传输,传输速率为9600bps。而接收器工作频率远远高于数据的传输速率。本设计中的接收器工作频率由波特率发生器产生,频率是9600bps的16倍,由输入端bclk输入,在接收器工作时,接收端一直以16倍波特率的速率读取线路状态,检测线路上出现低电平的时刻。一旦检测到有1跳变到0,接着判断跳变是否由噪音引起或者确实是串行数据到来。找到起始位以后,就开始接收数据,用16倍波特率的时钟作为接收时钟,就是为了确保在位宽的中心时间对接收的位序列进行可靠采样,当采样计数器计数结束后所有数据位都已经输入完成。4.4.2 UART接收器的接收状态机接收状态机一共有5个状态:R_START(等待起始位)、R_CENTER(求中点)、R_WAIT(等待采样)、R_SAMPLE(采样)、R_STOP(停止位接收)。UART接收模块状态转换图如图9所示: 图9 接收模块状态转换图1:R_START状态:当UART接收器复位(rsetr=1)后,接收状态机将处于这一个状态。在此状态,状态机一直在等待串行数据的到来,即RXD的电平从逻辑1变为逻辑0,意味着新的一帧UART数据帧的开始,一旦起始位被确定,状态机将转入R_CENTER状态(图9中的RXD_SYNC信号是RXD的同步信号)。2:R_CENTER状态:在本状态,由起始位求出每位的中点,通过对bclk的个数进行计数(RCNT16),但计数值不是想当然的“1000”,要考虑经过一个状态,也即经过了一个bclk周期,所希望得到的是在采样时1/2位。另外,可能在R_START状态检测到的起始位不是真正的起始位,可能是一个偶然出现的干扰尖脉冲(负脉冲)。这种干扰脉冲的周期是很短的,所以可以认为保持逻辑0超过1/4个位时间的信号一定是起始位。3:R_WAIT状态:当状态机处于这一状态,等待计满15个bclk,在第16个bclk是进入R_SAMPLE状态进行数据位的采样检测,同时也判断是否采集的数据位长度已达到数据帧的长度(FRAMELEN),如果到来,就说明停止位来临了。FRAMELEN在设计时是可更改的(使用了Generic),在本设计中默认为8,即对应的UART工作在8位数据位、无校验位格式。4:R_SAMPLE状态:即数据位采样检测,完成后无条件状态机转入R_WAIT状态,等待下次数据位的到来。5:R_STOP状态:无论停止位是1还是1.5位,或是2位,状态机在R_STOP不具体检测RXD,只是输出帧接收完毕信号(REC_DONE=1),停止位后状态机转回到R_START状态,等待下一个帧的起始位。状态机的VHDL代码见附录1程序清单。4.5 发送模块设计4.5.1 发送模块及其功能发送模块主要实现对并行数据的缓存、并串转换,并把串行数据按照既定数据帧格式进行输出。每隔一个固定发送周期发送符合数据帧格式要求的数据帧,发送时输出起始位低电平,依次将数据位输出,最后将起始位重新置为高。空闲时是高电平,收到一个发送指令后,将数据装载进来,开始位拉低,然后移出数据,停止位高电平意味着一帧传输结束。发送模块的引脚如图10所示, 图10 发送模块引脚图发送模块信号:resett(输入):复位端口,低电平有效;xmit_cmd_p输入):写控制信号,低电平时允许数据输入;txdbuf7.0(输入):8位并行数据输入信号;bclkt(输入):外部时钟信号;对CPU16倍频采样;txd_done(输出):并/串转换后数据输出提示信号,高电平有效; txd(输出):串行数据输出。UART发送模块框图如图11所示,CPU复位时,引脚txd_done为高电平。当FPGA外部引脚txdbuf7.0输入8位并行数据时,装载8位数据在发送保持寄存器THR中。装载完毕后,引脚txd_done变为低电平。当检测到txd_done变为低电平时,自动时能串行数据发送。 图11 UART串行发送器模块框图发送数据时,先发送一位起始位(1),同时THR中数据并行载入到TSR中。接着8位数据由低位到高位依次从TSR中串行移出。最后产生一位停止位(0)标志一帧数据传输完毕。同接收器一样,串行数据已内部频率的 1/16传输。当数据传输完毕或没有数据传输txd输出高电平。4.5.2 UART接收器的发送状态机发送状态机一共有5个状态X_IDLE(空闲)X_START(起始位)X_WAIT(移位等待)X_SHIFT(移位)X_STOP(停止位)。UART发送器状态转换图如图12所示:图12 发送模块状态转换图1:X_IDLE状态:当UART被复位信号复位后,状态机将立刻进入这一状态。在这个状态下,UART的发送器一直在等待一个数据帧发送命令XMIT_CMD。(由于无法对外加信号XMIT_CMD脉冲宽度进行限制读取。用短脉冲XMIT_CMD_P信号对XMIT_CMD处理,当XMIT_CMD_P=1,状态机转入X_START,准备发送起始位。)2:X_START状态:在这个状态下,UART的发送器发送一个位时间宽度的逻辑0信号至TXD,即起始位。紧接着状态机转入X_WAIT状态。XCNT16是bclk的计数器 3:X_WAIT状态:同UART接收状态机中的R_WAIT状态类似。 4:X_SHIFT状态:当状态机处于这一状态时,实现待发数据的并串转换。转换完成立即回到X_WAIT状态。5:X_STOP状态:停止位发送状态,当数据帧发送完毕,状态机转入该状态,并发送16个bclk周期的逻辑1信号,即1位停止位。状态机送完停止位后回到X_IDLE状态,并等待另一个数据帧的发送命令。状态机的VHDL代码见附录1程序清单。5 UART设计的仿真与验证5.1波特率发生模块仿真为方便波特率发生器模块仿真,便于观察仿真波形,将系统时钟周期设置为20ns,分频系数设置为10。图13.波特率发生器的功能仿真图从图13可以看到波特率发生器每经过10个时钟周期输出一个完整的波特率时钟周期,对模块中的类属参数设置可以实现任意要求的分频。分频以后的时钟周期是200ns,可见波特率发生器的工作完全满足设计的要求,仿真结果正确。5.2 接收模块仿真为了验证 UART接收模块的正确性,对接收过程进行了波形仿真。波特率产生器设置为16个系统时钟产生一个完整的波特率时钟。图14是UART模块接收过程的仿真波形图。图14 接收功能仿真图串行数据从接收模块的输入端口rxdr进入,从低位到高位按顺序接收,然后经过接收移位寄存器的串并转换,最终将并行数据同时送到接收缓冲寄存器,同时输出线路状态信息。rxdr信号从高电平转到低电平的时候,就认为是一个数据帧的开始,接收状态机马上进入开始状态。移位了8位有效数据长度后,就把它转换成并行数据装载到接收缓冲寄存器里,同时发出数据接收准备好信号,等待CPU读取。在图14中,rxdr上的数据序列为0101000111,第一位为起始位,最后一位是停止位,那么接收到的数据为10100011,r_buf是数据接收总线,接收时数据低位在前,可以看到最终得到的数据正是11000101.即图上r_buf输出的197.在接收完成后r_ready输出一个脉宽的高电平作为提示。经验证,数据接收过程完全正确。5.3 发送模块仿真PC机发送并行数据,FPGA对其采样,采样时钟bclkt以PC机频率16倍进行采样,并行数据从输入端口txd进入,装载到发送缓冲器,经移位寄存器完成串并装换后由低位到高位顺序发送串行数据。图15 发送功能仿真图如图15所示,待发送的数据为01001101,由xmit_cmd_p信号触发后,从低位顺序发送,txd端输出0101100101,其中第一位是起始位,中间8位是待发数据,最后一位是发送结束后输出提示信号txd_done高电平。由图示txdbuf输出77,二进制编码为01001101.经验证,数据发送过程完全正确。6 总结UART是广泛使用的串行数据通信电路,因其要求的传输线少,可靠性高,传输距离远,所以系统间互联常采用异步串行通信接口方式。本文用VHDL语言,结合有限状态机的设计方法实现了UART的功能,将其核心功能集成到FPGA上,使整体设计紧凑、小巧,实现的UART功能稳定、可靠;同时,利用有限状态机的方法具有结构模式直观简单,设计流程短,程序层次分明,易综合,可靠性高等优点,必将在EDA技术中发挥重要作用。本设计具有较大的灵活性,通过调整波特率发生器的分频参数,就可以使其工作在不同的频率。采用16倍波特率的采样时钟,可以实时有效探测数据的起始位,并可对数据位进行“对准”中央采样,保证了所采样数据的正确性。该模块可以作为一个完整的IP核移植进各种FPGA中,在实际应用时可嵌入到其他系统中,很容易实现和远端上位机的异步通信。参考文献1潘松,黄继业.EDA技术实用教程M.北京:科学出版社,2002.10第一版.2赵俊超等.集成电路设计VHDL教程M .北京:北京希望电子出版社,2002.8第一版.3. 林思夏,马海波,姜薇,微计算机信息,2009年第25卷,第8-2期,基于FPGA的UART 扩展总线设计和应用,中国矿业大学,徐州,文献编码B4. 刘贤明;赵侃;谢恺;一种基于FPGA的UART IP核设计J;四川兵工学报;2011年03期5. 苏继强;沈云付;基于模型检查的VHDL到FSM的转换J;计算机工程与设计;2008年22 期6. 广西 张琼厦;串口通信的基本概念(上)N;电子报;2009年7. Digital Circuit Experiment System Based on FPGAA;2010 International Conference on E-Health Networking, Digital Ecosystems and Technologies Proceedings(Volume 2)C;2010年8. Hardware Chip Simulation TechniqueA;2009 ETP/IITA World Congress in Applied Computing, Computer Science, and Computer Engineering (ACC 2009) ProceedingsC;2009年9. Optimization design on some of the data processing in bank-campus multi-function card systemA;Proceedings of 2010 Chinese Control and Decision ConferenceC;2010年10.周修理,杨方,陈萍;常见的串行通讯接口标准J;电测与仪表;2001年04期11. The design of intelligent marking system for electronic circuit experiment reportsA;教育部中南地区高等学校电子电气基础课教学研究会第二十届学术年会会议论文集(上册)C;2010年致谢在毕业设计实施过程中,我的指导老师廖磊老师给予了我很大的帮助和细致的指导,使得我能够如期的完成毕业设计。首先,在我最初确定毕业设计题目之后,廖老师就针对题目的具体内涵给我做了非常细致的讲解,并引导我对设计题目进行了初步的分解和认识,使得我对整个设计有深入的了解,能够将整个大项目分解成具体的小部分,然后各个击破;其次,在之后查找相关资料和材料收集的构成中,廖老师也给我提供了很多帮助,使得我在收集资料的过程中能够具有针对性,不至于茫然的不知所措;再次,在整个设计进行过程中,我在很多环节都遇到了自己无法攻破的难题,廖老师都提供了无私的帮助和耐心的指导;最后,在论文的最终定稿过程中,廖老师又花费了大量的时间对我的论文进行细致的审阅,并提出了一些宝贵的建议,使得我的论文能尽可能的完美。廖老师的渊博的学识和对学生认真负责的态度使得我受益匪浅,在此,对廖老师表达深深的感谢和诚挚的敬意。在平时的学习生活中,我的同班同学,尤其是我的室友们也给予我很多的帮助。在学习中遇到困难时,大家相互交流,共同探讨,相互鼓励,使得我在解决学业中遇到的问题的同时也体会到了大家庭的温暖。这种共同学习,一起进步的经历丰富了我的大学生活,在这种过程中,我想我学会了如何与人协作共同解决问题,我相信这种经历对我将来的发展也会起到很大的作用。在此,我想对所有给帮助过我的同学,一一表示衷心的感谢。当然,在本次毕业设计的完成过程了,还得到了其他老师和同学的帮助和指导,例如像是在此一并表示感谢。最后感谢我的父母,感谢他们对我学业和生活的支持、理解和宽容,他们一直是我最坚强的后盾,他们的鼓励和支持一直是我最大的动力!谨以此文献给所有支持和关心我的人!附录部分程序代码发送模块状态机部分代码architecture Behavioral of transfer istype states is (x_idle,x_start,x_wait,x_shift,x_stop); -定义各子状态signal state:states:=x_idle;signal tcnt:integer:=0;beginprocess(bclkt,resett,xmit_cmd_p,txdbuf) -主控时序、组合进程variable xcnt16:std_logic_vector(4 downto 0):=00000; -定义中间变量variable xbitcnt:integer:=0;variable txds:std_logic;begin if resett=1 then state=x_idle; txd_done -状态1,等待数据帧发送命令 if xmit_cmd_p=1 then state=x_start;txd_done=0; else state -状态2,发送信号至起始位 if xcnt16=01111 then state=x_wait; xcnt16:=00000; else xcnt16:=xcnt16+1; txds:=0; state -状态3,等待状态 if xcnt16=01110 then if xbitcnt=framlent then state=x_stop;xbitcnt:=0;xcnt16:=00000; else state=x_shift; end if; else xcnt16:=xcnt16+1; statetxds:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岗位津贴协议书
- 2025玉米销售合同范本
- 食品药品安全常识题库及答案解析
- 2025年心血管内科学术知识测验试卷答案及解析
- 枣庄道路从业资格证考试及答案解析
- 小麦深加工绿色供应链整合创新创业项目商业计划书
- 2025年小儿外科手术技巧检测答案及解析
- 大豆电商平台创新创业项目商业计划书
- 智能化养殖设备操作培训服务创新创业项目商业计划书
- 水生植物景观设计创新创业项目商业计划书
- 道路运输管理机构人员编制理论研究
- 垃圾发电厂考试题库含答案全套
- 发育生物学实验教案
- 仁爱版九年级英语上册unit2topic1复习课市公开课一等奖省课获奖课件
- 北京市国内旅游合同书
- 公司品牌建设五年规划
- 第二单元 三国两晋南北朝的民族交融与隋唐统一多民族封建国家的发展 知识清单 高中历史统编版(2019)必修中外历史纲要上册
- 居室环境的清洁与消毒
- GB/T 39766-2021人类生物样本库管理规范
- GB/T 2900.50-2008电工术语发电、输电及配电通用术语
- GB/T 2518-2008连续热镀锌钢板及钢带
评论
0/150
提交评论