毕业论文基于FPGA的UART模块设计_第1页
毕业论文基于FPGA的UART模块设计_第2页
毕业论文基于FPGA的UART模块设计_第3页
毕业论文基于FPGA的UART模块设计_第4页
毕业论文基于FPGA的UART模块设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、本本 科科 毕毕 业业 设设 计计(论论文文)题目 基于 FPGA 的 UART 模块设计 I基于 FPGA 的 UART 模块设计摘 要通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)是一种广泛应用于短距离、低速、低成本通信的串行传输接口。UART允许在串行链路上进行全双工通信。常见的串行接口芯片能够实现比较全面的串行通信功能。而在实际应用中,我们往往并不需要如此完整的功能,从而会造成资源的浪费和成本的提高。由于常用UART芯片比较复杂且移植性差,本文提出一种采用可编程器件FPGA实现UART功能的方法。采用TOP-DOWN设

2、计方法,对系统划分模块以及各个模块的信号连接,然后进行模块设计,并用VHDL语言编写代码来实现各模块功能,从而简化了电路、减小了体积、提高了系统的可靠性。使用Quartus自带的仿真器对各模块进行功能仿真和时序仿真,实现了发送、接收等功能,验证了结果,表明设计正确,功能良好,符合设计要求。 关键词关键词: :FPGA VHDL UART 有限状态机IIThe Design of Universal Asynchronous Receiver Transmitter Based on FPGAAbstractUART (Universal Asynchronous Receiver Transm

3、itter) is a widely used for short-range, low-speed, low-cost serial communication transmission interface. UART allow full-duplex communication on serial links. Common serial interface chips can realize comprehensive serial communication function. In practice, we often did not need such a complete fe

4、ature, which will result in waste of resources and higher costs. As the UART chips used more complex and its transplantation is poor, this paper, presents a method that a implementation of UART based on programmable devices FPGA. TOP-DOWN design method is used, the system is divided into modules and

5、 signal connections of each module, the module function is designed in VHDL language. In this way, the design can simplifies the circuit, reduces the volume, improves the reliability of the system . Using Quartus simulator for each module function simulation and temporal simulation,this designing ha

6、s realized send, receive, and other functions. Verifing the results, suggests that the design comply with the design requirements.Key Words:FPGA; VHDL; UART; FSMIII目 录第一章 绪论.11.1 课题背景与现实意义.11.2 课题研究的现状及相关技术的介绍.11.2.1 UART 芯片的性能指标 .11.2.2 FPGA 的发展历程和结构介绍 .21.2.3 FPGA 的设计方法及软件平台 .31.2.4 VHDL 语言简介.41.3

7、 本文的研究内容.51.4 本文的内容结构.61.5 小节 .6第二章 UART 理论基础.72.1 UART 原理 .72.2 串行通信基础知识.82.2.1 串行通信工作方式.92.2.2 串行异步通信.92.2.3 串行同步通信.112.3 小节 .11第三章 UART 的设计实现.123.1 UART 的设计分析.123.1.1 UART 设计概述.123.1.2 UART 设计整体结构 .123.2 UART 模块设计.133.2.1 顶层模块设计.133.2.2 波特率发生模块设计 .133.2.3 接收模块设计.143.2.4 发送模块设计.163.3 小节 .17IV第四章 U

8、ART 设计的仿真与验证.184.1 顶层模块仿真.184.2 波特率发生模块仿真.194.3 接收模块仿真.194.4 发送模块仿真.204.5 FPGA 开发版下载验证.214.6 小节 .22结语.23致谢.25参考文献 .26附录 部分程序代码.271第一章 绪 论1.11.1 课题背景与现实意义课题背景与现实意义通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)是一种广泛应用于短距离、低速、低成本通信的串行传输接口,是计算机中最普遍的一部分。异步串行通信接口具有传输线少、成本低、可靠性高、实现简单等优点,广泛应用于微机和

9、外设的数据交换,如和鼠标、键盘、调制解调器、打印机之间以及微机与微机之间的串行数据传输l。同时在当今的嵌入式微处理器芯片的设计中,UART接口已成为标准配置。通用异步收发器主要实现功能是接收外设传送的串行数据转换为并行数据同时校验该数据,然后将并行数据提供给处理器处理,或者将处理器发送来的并行数据转换成串行数据同时根据串行通信协议附加上起始位、奇偶校验位以及停止位,然后从串行数据输出端发送出去23。用UART来实现传输数据的串/并转换或者并/串转换。目前大部分处理器芯片中都集成了UART功能,但是在FPGA芯片中一般没有集成UART,这增加了FPGA芯片与其它处理器间数据交换的复杂性。为提高F

10、PGA设计的灵活性,我们可以用硬件描述语言编写一个具有UART功能的模块,然后把这个模块配置到FPGA芯片中。由于FPGA的功能日益强大,开发周期短,现场可编程等一系列优点也越来越明显,将需要的UART功能集成到FPGA内部,利用VHDL语言将UART的核心功能集成,去掉一些不必要的管脚,这样既可简化电路又能提高系统可靠性以及稳定性并可以方便地对芯片进行升级或内嵌到各种不同的FPGA芯片中,方便快捷,使整个设计更加紧凑、稳定、可靠。因此利用FPGA自身的优点来设计设备间串行通信接口,具有较高的实用价值和重大意义4。1.21.2 课题研究的现状及相关技术的课题研究的现状及相关技术的介绍介绍1.2

11、.1 UART 芯片的性能指标自第一个大规模集成电路芯片发明以后,在上世纪70年代UART就得到了广泛的应用,经过几十年的发展,UART芯片的管脚名称、管脚功能以及整体的操作模式几乎没有太大的改变。现在的一些基于CMOS工艺的UART芯片诸如NSl6650的原型可以追溯到早期的一些经典接口器件像Intel8250 5。这些年来因一些高速Modem以及一些软件(例如Laplink)要求更高速的数据传输速率, UART内部的基本构架已经得到了扩展。衡量UART的性能指标主要有:主机接口性能、数据缓冲寄存器的深度、波特率等等。在主机接口方面,被称为VLIO(可变延迟I/O)的新型接口现在得到了采用,

12、此外新一代1.8V UART设计成可以与总线无缝连接。现代工艺的进一步发展推动了新一代具有灵活性主机接口的高性能UART的出现,这些UART工作在低电压低功耗下,能够提供较高的数据传输速率来满足蓝牙EDR等新连接标准的要求。UART2传输数据所需的CPU开销直接受UART内部的FIFO深度影响,FIFO的深度越深,每次中断时就可以传输更多数据,这大大提高了数据的吞吐量6,从而减少CPU的开销,提高了系统的运行效率。因此对UART性能方面的提高主要是对数据缓冲寄存器方面进一步的优化。接下来UART芯片的发展将会以智能化通信协调处理器的形式出现,这类设备已经在一些PC机的插件上应用了4。1.2.2

13、 FPGA 的发展历程和结构介绍当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断地进行更新换代。随着微电子设计技术与工艺的发展,数字集成电路从电子管、晶体管,中小规模集成电路、超大规模集成电路(VLSIC)逐步发展到专用集成电路(ASIC)。但是ASIC因其设计周期长、不可移植性、灵活性差等缺陷制约着它的应用范围。现场可编程逻辑器件的出现使ASIC的设计周期大大缩短,在设计初期就能设计出合适的ASIC芯片,并且立即投入实际应用之中。其中应用最广泛的当属现场可编程门阵列FPGA(Field Programmable Gate Array)和复杂可编程逻辑器件CPLD(

14、Complex Programmable Logic Device)。FPGA与CPLD都是可编程逻辑器件,它们是在PAL(可编程阵列逻辑)以及随后出现的PLA(可编程逻辑阵列)等逻辑器件的基础上发展起来的。PAL、PLA的区别就是与门和或门的结构不同。到了80年代初期在PLD的输出端口附加上了新的输出逻辑宏单元,这时候就发展成为GAL(通用阵列逻辑),随后出现的一些尖端的技术把GAL器件都集成到了一个硅片上,就得到了CPLD(复杂可编程逻辑器件)。一直到了上世纪80年代中期,出现了FPGA(现场可编程门阵列)器件7。FPGA与传统的那些可编程逻辑器件相比 8,它最大的优点就是设计灵活、可移植

15、性以及可以对外接或内置的RAM或EPROM反复无限次得编程,可以实时地改变器件内部的逻辑功能,实现现场可编程。这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。FPGA器件从结构上而言,其核心部分是逻辑单元阵列LCA(Logic Cell Array),LCA是由内部逻辑块矩阵及周围的输入/输出模块IOB(Input/Output Block)组成,而其内部连线可编程内部互连资源PI(Programmable Interconnection)则占据逻辑块的行列之间,以及逻辑块与FO块之间的通道。LCA的可编程逻辑块CLB(Configurable Logic Block)和IOB的功

16、能及其互连,是由存储器中的配置程序来控制的。1. 可编程逻辑块CLBFPGA器件的主体部分是由很多可编程逻辑块CLB构成的矩阵,每个CLB含有可编程的组合逻辑和寄存器,寄存器可由组合逻辑或直接由CLB的输出装入信息,寄存器的输出也可以直接驱动组合逻辑。一个CLB包括4个Slices,每个Slices包括两个查找表LUT、两个触发器和相关逻辑。查找表本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地3址线的16X1的RAM。当用户通过原理图或HDL描述了一个逻辑电路以后,CPLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RA

17、M。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出与地址对应的内容,然后输出即可。2.输入输出块I/0输入输出I/0含有一个可编程输入通道和一个可编程输出通道。可编程输入通道由驱动器、触发器及程序控制多路开关组成。它可以通过程序控制选择直接输入或通过寄存器输入。可编程输出通道由多路开光和输出缓冲器组成,它可以通过程序控制选择三态输出、常开或常闭三种状态。3.RAM块中小规模的存储模块可以简化系统的设计,提高系统的工作速度,而且可以减少数据存储的成本,使芯片内外数据信息的交换更可靠。4.可编程互连资源PI可编程互连资源包括各种长度的金属连线段和一些可编程连接开关,它们将各个CL

18、B之间或CLB与IOB之间互相连接起来,构成各种复杂功能的系统。141.2.3 FPGA 的设计方法及软件平台传统的数字逻辑设计手段是采用原理图输入的方式进行的,当时所做的复杂数字逻辑电路及系统的设计规模比较小相对而言也比较简单,其中用到的FPGA或ASIC设计工作往往只能采用厂家提供的专用电路图输入工具来进行。为了满足设计性能指标,工程师往往需要花费很长时间进行手工布线并且还得非常熟悉所选器件的内部结构和外部引线特点,才能达到设计要求。这种低效率的设计方法大大延长了设计周期。设计往往是从功能描述开始的。设计人员首先要考虑规划出能完成某一具体功能、满足产品系统设计要求地某一功能模块,利用某种方

19、式把功能描述出来,通过功能仿真以验证设计思路地正确性。当所设计功能满足需要时,再考虑以何种方式完成所需要的设计,并能直接使用功能定义地描述。这就是自顶而下的设计方法,简单分为功能定义、设计输入、功能仿真、逻辑综合、综合后仿真、布局布线、布局布线后仿真、下载验证等8个步骤9。本课题,逻辑设计使用的软件为Altera公司的Quartus II。Quartus II的主要特点:Quartus II是一个集成环境,可以完成整个FPGA开发过程。Quartus II集成了很多著名的FPGA设计工具,根据设计流程合理应用这些工具,会使工程师的设计工作如鱼得水。Quartus II界面风格简洁流畅,易学易用

20、。Quartus II的界面秉承了可视化编程技术。界面根据设计流程而组织,整个设计过程只需按照界面组织结构依次点击相应的按钮或相应的选项即可。强大的设计辅助功能。Quartus II秉承了Altera设计软件的强大辅助功能。在编写代码时可以使用编写向导生成文件头和模块框架,也可以使用语言模板帮助编写代码。在图形输入时可以使用辅助4项帮助设计原理图。另外,Quartus II可以方便地生成IP Core(IP核)与高效模块为用户所用,大大减少了设计者的工作量,提高了设计效率和质量。Quartus II的集成工具主要分为设计输入工具、综合工具、仿真工具、实现工具和辅助设计工具等5类、HDL Edi

21、tor可以完成设计电路的HDL语言的输入,能根据语法来彩色显示关键字;自带仿真器做仿真,特点是仿真速度快,仿真精度高;综合能力强。1.2.4 VHDL 语言简介随着电子技术的发展,集成电路的规模越来越大,复杂程度也越来越高。对于如此大规模的和复杂程度的电路设计问题,传统的门级描述方法显得过于琐碎和难以管理。而 VHDL 语言具有强大的功能,覆盖面广,描述能力强,可用于从门级、电路级直至系统级的描述、仿真和综合。下面简要介绍了VHDL 语言。VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware DescriptiON Language,诞

22、生于 1982 年。1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL的标准版本,IEEE-1076(简称 87 版)之后,各 EDA 公司相继推出了自己的 VHDL 设计环境,或宣布自己的设计工具可以和 VHDL 接口。此后 VHDL 在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993 年,IEEE 对 VHDL 进行了修订,从更高的抽象层次和系统描述能力上扩展 VHDL 的内容,公布了新版本的 VHDL,即 IEEE 标准的 1076-1993 版本(简称 93 版) 。现在,VHDL和 Verilog

23、作为 IEEE 的工业标准硬件描述语言,又得到众多 EDA 公司的支持。在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为:在新的世纪中,VHDL 与 Verilog 语言将承担起大部分的数字系统设计任务。VHDL 主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL 的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL 的程序结构特点是将一项工程设计或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分) ,即设计实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一

24、旦其内部开发完成后,其它的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是 VHDL 系统设计的基本点。概括的说,VHDL 具有以下主要优点:VHDL 支持层次化设计,可以在 VHDL 的环境下,完成从简练的设计原始描述,经过层层细化求精,最终获得可直接付诸生产的电路级或版图参数描述的全过程。VHDL 有良好的可读性。它可以被计算机接受,也容易被读者理解。用 VHDL 书写的源文件,既是程序又是文档,既是技术人员直接交换信息的文件,又可作为合同签约者之间的文件。VHDL 有良好的可移植性。作为一种已被 IEEE 承认的工业标准,VHDL 事实上已成为通用的硬件描述语言,可以在不同

25、的设计环境和系统平台中使用。5使用 VHDL 可以延长设计的生命周期。因为 VHDL 的硬件描述与工艺技术无关,不会因为工艺变化而使描述过时。与工艺技术有关的参数可通过 VHDL 提供的属性加以描述,工艺改变时,只需要修改相应程序中的属性参数即可。VHDL 支持对大规模设计的分解和已有设计的再利用。VHDL 可以描述复杂的电路系统,支持对大规模设计进行分解,由多人、多项目组来共同承担和完成。标准化的规则和风格,为设计的再利用提供了有力的支持。1.31.3 本文的研究内容本文的研究内容本课题的内容就是要用VHDL语言在FPGA上实现一个通用异步收发器,首先根据通用异步收发器的具体性能与要求将UA

26、RT分为几个模块的组合,采用Top-Down的层次化设计方法和硬件描述语言(VHDL)来编写内部的逻辑功能模块,然后运用Quartus II的综合工具以及Quartus II的仿真工具中对其进行综合优化以及仿真验证,最后下载到实物开发板上进行调试。主要的研究内容有如下几点:第一步:熟悉FPGA的设计开发流程以及通用异步收发器(UART)的各个子模块的功能,掌握各个模块之间的联系与工作流程,熟悉UART通信协议(RS-232协议)。第二步:用VHDL语言编写通用异步收发器内部的各个子模块以及顶层模块的程序代码。第三步:在Quartus II集成的软件开发环境中对其进行逻辑综合、仿真验证、布局布线

27、、以及最后的硬件实现。1.41.4 本文的结构本文的结构第一章主要指出本课题的提出背景以及研究意义,以及与本研究该课题相关的技术及开发环境。第二章着重介绍了通用异步收发器的理论内容,包括UART通信时各模块的工作特性及串行通信协议。第三章主要对UART的结构设计,包括系统设计以及各个模块的设计过程进行了分析。第四章主要是对设计完成后的UART进行逻辑综合,功能模拟及时序仿真,同时分析逻辑综合和仿真结果,最后下载到FPGA实验板中进行实物验证。第五章是结束语,主要分析本课题所取得的研究成果以及有待改进的不足之处。1.51.5 小节小节本章首先介绍了此课题的研究背景和研究意义,然后阐述了与该课题相

28、关的内容:UART 芯片研究状况、FPGA 特点、VHDL 语言,最后分析了该课题的研究方法和研究内容。6第二章 UART 理论基础UART 是通用异步收发器的英文缩写,它包括了 RS232、RS499、 RS423、RS422 和 RS485 等接口标准规范和总线标准规范,即 UART 是异步串行通信口的总称。而 RS232、RS499、RS423、RS422 和RS485 等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。UART 是异步串行通信方式,通信的发送方和接收方各自有独立的时钟,传输的速率由双方约定。串行通信分为

29、两种类型:同步通信方式和异步通行方式。UART 是一种串行异步通信方式。它是各种设备之间进行通信的关键模块,允许在串行链路上进行全双工的通信。在发送端,并行的数字信号需要转化成串行信号才能通过有线或无线传输到另外一台设备;而在接收端,串行信号必须要被恢复成并行信号才能进行数据处理。UART 就是用来处理这种数据与串口之间的串并和并串转换的。本章首先介绍 UART 的基本结构,然后阐述一些有关串行通信的知识,在串行通信基础知识介绍中对同步通信也作了简要介绍。2.12.1 UARTUART 原理原理通用异步接收/发送器UART用于将并行数据转换成串行形式;串行输入时,又将串行形式转换成并行形式。图

30、2.1显示UART基本结构,它的组成包括10:图2.1 UART基本结构(1)UART内核内核模块是UART设计的核心部分,内部为控制逻辑,它接收来自微处理器或上层部件的控制信号,执行其所要求的操作,并输出状态信息和控制信号。在数据接收时,UART内核模块负责控制波特率发7生器和移位寄存器,控制移位寄存器在波特率时钟的驱动下同步接收同时保存RS-232接收端口上的串行数据。在数据发送时,UART内核模块首先根据待发送数据、奇偶校验位和停止位的设置产生完整的发送序列(包括起始位、数据位、奇偶校验位和停止位),之后控制移位寄存器将发送序列加载到移位寄存器的内部寄存器里,最后控制波特率发生器驱动移位

31、寄存器将数据串行输出。(2)信号监测器对串行输入端(RXD)的输入信号进行实时监测,一旦发现新的数据信号监测器立即发送信号通知UART内核。(3)移位寄存器移位寄存器用来存储输入或者输出的数据。发送时,微处理器将待发数据送入发送数据寄存器,然后对待发数据格式化,包括起始位、奇偶校验位和停止位。将格式化后的数据送到发送移位寄存器,然后按先前规定的波特率串行输出。接收时,串行输入设备通过UART的串行输入端口发送串行数据到UART的接收器。一旦串行输入端口电位由高电平变到低电平,接收器就认为接收到起始位,并把后续的数据位依次移入接收移位寄存器。当接收一个完整数据后,就送往内核的接收移位寄存器,并通

32、知微处理器或上层部件读取接收到的数据。(4)波特率发生器UART的发送和接收是按照相同的波特率进行收发的。波特率发生器产生的时钟频率是根据给定的的波特率算出的。(5)奇偶校验器为了使传送数据过程更可靠,在UART中设置了错误标志奇偶错误。在接收时,奇偶校验器检查接收到的每一个字符码中“l”的个数,若不符合要求,则发出奇偶校验出错信息。发送时则根据待发送数据计算出奇偶校验标志,由内核加载到发送数据中。(6)总线选择器总线选择模块选择奇偶校验器的输入是数据接收总线还是数据发送总线。(7)计数器计数器模块的功能是在可控的输入时钟驱动下进行计数,当达到计数上阈时给UART内核一个提示信号。2.22.2

33、 串行通信基础知识串行通信基础知识串行通信传送的一组组的字符信息通常称为信息帧,为了正确得到发送和接收这些数据帧,就要求数据通信中实现同步通信,同步就是通信双方协调发送和接收之间的动作。通信双方必须对数据传输方式、同步控制方式、差错处理、应答方式和数据格式等问题做出一组规定并共同遵守来实现同步,8这种规定即为通信协议。串行通信分为异步通信和同步通信两种,相应的串行通信协议中则分有异步通信协议和同步通信协议。2.2.1 串行通信工作方式串行通信是把传输的数据一位一位地顺序传送的一种通信方式。在传送一个字节数据时,每次将数据依次发送至单根传输线上;或者反过来,从单根传输线上依次地接收数据,然后组合

34、成一个字节数据。因其需要的数据线少、传送距离长、可靠性高而广泛用于外设与计算机之间的通信,如终端、打印机、磁盘等。但由于传送数据格式繁琐、速度慢、效率低、实时性差,而无法应用于高速实时数据通信。串行通信的有如下三种11:1.单工方式单工方式只允许数据按一个固定的方向传送。采用这种方式时,就已经确定了通信方式中的一方为接收端,并且这种方式是不可改变的。2.半双工方式这种方式下的通信双方A和B都具有接收和发送能力。但通信线只有一条,因此在特定的时刻双方只能有一个发送而另一个接收或一方接收,另一方发送。决不允许A和B同时接收或同时发送。3.双工方式全双工具有两条独立的通信线,一条专门用作发送,另一条

35、为接收。这就克服了单工或半双工带来的A和B双方不能同时既发送又接收的缺点。因此,为保证实现全双工通信任务,A和B双方的串行接口必须具备一套完全独立的发送器和接收器。2.2.2 串行异步通信串行异步通信是计算机通信中最常用的数据信息传输方式。接收和发送双方不使用共同的参考时钟,但要求发送的每一位数据都必须经过事前格式化。发送时以字符为单位在其前后分别加“起始位”和“停止位”,用以指示每一数据的开始和结束来进行传输,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。由于要给每一位数据位加起始位、停止位,故传送效率不及同步通信高,但对接收与发送时钟的同步要求降低了。1 串行异步通

36、信的数据格式收发双方取得同步的方法是在字符格式中设置起始位和停止位,在一个有效字符正式发送前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位到停止位构成一帧,故这种通信方式又称为起止式异步通信方式。在一帧信息传送之前,传输线逻辑上处于1状态,在传送字符信息的时候。先发送起始位逻辑O,紧随其后发送5到8位的数据信息位,从低位到高位顺序排列,就是说先传低位后传高位,在字符的最高位之后是一个可选择的奇偶校验位,可以选择奇校验、9偶校验或无校验。在奇偶校验位之后是标志着一帧字符结束的停止位。这位必须是逻辑1,位数可以选择1位、1.5位或者2位。在传送数据的时候,数据帧

37、与帧之间如果有间隙的话,就在停止位之后附加空闲位(用逻辑l来表示),当没有空闲位的时候,传送数据的效率是最高的。异步串行通信的数据格式如图2.2所示12。图2.2串行异步通信的数据帧格式2 发送和接收时钟在UART通信协议中,发送模块和接收模块不使用共同的时钟信号,所以称作异步发送和接收器,也就是在串行通信时发送/接受数据的两个UART接口不会共用一个时钟信号 13。两者的时钟频率在一定的误差范围内近似相等,为提高定位采样的分辨能力和抗干扰能力接收器采用比波特率更高频率的时钟进行采样。这个频率的倍数即为波特率因子,一般取16、32和64。3 起/止位起/止位作为联络信号,用于异步通信双方的同步

38、。当起始位出现时(信号电平由高变低),告诉接收方新的一帧已经到达,后面接着是数据位。起始位用来表示一个数据帧传送的开始,停止位表示一个数据帧传送的结束,这就为通信双方提供了何时开始收发、何时结束的标志。有了起/止位,传输数据时收发双方对时钟同步的要求就不需太高。发送器和接收器可以使用不同的时钟,即使收发双方的时钟频率存在一定的偏差,但字符间的停止位和空闲位为此提供了缓冲,这样就不会因连续误差的累积导致错位,保证了数据传输的可靠进行。4 奇偶校验奇偶校验是最简单也最常用的校验方法。它的基本原理是在传输的有效数据中附加一个检验位,利用这个校验位,使得数据信息位(包括有效数据位和检验位)中1的个数为

39、偶数或者奇数。如果整个信息位1的个数为偶数的话称为偶检验,为奇数的话则称为为奇检验。在接收端用专门的电路来检查1的个数与事先的规定是否符合,若奇偶性发生了变化,则说明传输出现了错误。这种方法只能检查传输数据帧的一位错误,两位数据位以上的错误就无法检查出来。由于传输过程中最容易产生一位数据位的错误,加上奇偶校验的实现方法最简单,所以实际应用也最广泛。2.2.3 串行同步通信同步通信的基本特征是发送与接收时钟始终保持严格的同步,传送的信息流中每个二进制位都需10要时钟同步。要让接收设备能正确接收发送的数据位,就要进行同步。在串行同步通信中,接收双方的同步方法可以分为内同步和外同步,内同步法就是接收

40、端从接收到的数据信息波形本身提取同步的方法;而外同步法是在发送数据之前向接收器发送一串时钟脉冲,接收端按这个时钟频率调整自己的时序,使接收时钟频率锁定在接收到的时钟频率上,并作为同步时钟来接收数据。2.32.3 小节小节本章着重介绍了 UART 的理论基础包括:UART 芯片的基本结构并对每块作了详细介绍,串行通信基础知识如串行通信工作方式、串行异步通信和串行同步通信。本章是理解下章的理论前提。11第三章 UART 的设计实现UART(Universal Asynchronous Receiver Transmitter)是计算机串行通信系统中广泛使用的接口,发送端将计算机处理完的数据进行并串

41、转换送给外围设备,接收端将外设传送来的数据进行串并转换送给计算机处理。下面就如何设计UART模块进行重点分析。3.13.1 UARTUART 的设计分析的设计分析3.1.1 UART 设计概述UART通用异步收发器,是微机系统与外界串行设备进行数据通信的芯片。作为RS-232C数据终端设备接口,UART主要提供以下主要功能:将微机系统内部传送来的并行数据转换为串行数据流输出;将微机系统外设发送来的串行数据转换为并行数据,供微机系统内部器件处理。在输出串行数据流中加入奇偶校验位,启停标记;并对从外部接收的数据流进行奇偶校验,删除启停标记。本论文所设计的UART具有通用UART的基本功能,同时支持

42、通用的异步串行通信协议。其基本功能如下: 具有可编程串行接口特性(如字符数据位数、奇偶校验模式、通信速率); 具有全双工的数据发送器/接收器; 能够对线路状态以及错误开始位的检测; 支持标准RS-232接口; 接收通道发生奇偶校验; 最大传输速率为系统时钟1/16;本UART使用16次采样,即在每一个采样时钟脉冲的上升沿采样接收数据线,将第8个脉冲采样到的数据送至接收模块的移位寄存器,计到第16个脉冲的时候代表一位数据位接收完毕,脉冲计数值清零,开始下一位数据位的采样;发送时,采样时钟每计数到16次,输出一比特数据,同时计数值清零,开始下一位数据的传送。3.1.2 UART 设计整体结构在了解

43、 UART 的相关知识并结合 FPGA 的设计特点后,依据 FPGA 的 TOP-DOWN 设计方法将 UART 的FPGA 设计分为 4 个子模块设计:顶层模块设计、波特率发生模块设计、接收模块设计、发送模块设计。123.23.2 UARTUART 模块模块设计设计3.2.1 顶层模块设计异步收发器的顶层模块由波特率发生器、UART 接收器和 UART 发送器构成。UART 发送器的用途是将准备输出的并行数据按照基本 UART 帧格式转为 TXD 信号串行输出。UART 接收器接收 RXD 串行信号,并将其转化为并行数据。波特率发生器就是专门产生一个远高于波特率的本地时钟信号对输入 RXD

44、不断采样,使接收器与发送器保持同步。将波特率发生器,发送器和接收器简单的组装起来,就能较容易地实现通用异步收发器总模块。顶层模块 RTL 级图和顶层模块接口信号分别如图 3.1、图 3.2 所示:图 3.1 顶层模块的 RTL 图图 3.2 顶层模块接口信号3.2.2 波特率发生模块设计波特率是单位时间内传送的二进制数据的位数,以位/秒(b/s)表示,也称为数据位率。 收/发时钟频率与波特率之间关系:收/发时钟频率=N波特率N 可以取 8,16,32 和 64 等,为了兼顾速度和稳定性一般取为 16。N 在硬件设计时已经设定好,软件不能改变。波特率发生器由两个 8 位的数据寄存器组合成 16

45、位的分频寄存器,可以实现系统频率的 12(16)分频,达到预定的波特率设置。波特率发生器的功能是产生和 RS-232 通信所采用的波特率同步的时钟,实现波特率时钟的基本思路就是设计一个计数器,该计数器工作在速度很高的系统时钟下, 当计数到某数值时将输出置为高电平,再计数一定数值后将输出置为低电平,如此反复就能得到所需的波特率时钟。由于内部采样时钟 bclk 周期(由波特率发生器产生)是发送或接收波特率时钟频率的 16 倍,例如 FPGA 的系统时钟为 40MHz,通信13波特率为 9600bps,则波特率时钟的每个周期约相当于 260 个系统时钟的周期。假如要得到占空比为 50%的波特率时钟,

46、只要使计数器在计数到 26050%=130 时将输出置为高电平, 之后在计数到 260 时输出低电平并重新计数, 就能得到和 9600 波特率同步的时钟。波特率发生器接口信号如图 3.3 所示。3.2.3 接收模块设计接收模块是发送模块功能的逆序执行。它接收来自外部的串行数据,根据配置去除数据的起始位、停止位和奇偶校验位,若出现数据的奇偶校验有差错则立即产生错误信息。如果没有错误,则将剩余的 8 位有用数据送入 RBR(Receive Buffer Register)接收缓冲寄存器,再由 RBR 送给 CPU。串行数据帧和接收时钟是异步的,发送来的数据由逻辑 1 变为逻辑 0 可以视为一个数据

47、帧的开始。接收器先要捕捉起始位,确定 RXD_REC 输入由 1 到 0,逻辑 0 要 8 个 bclk 时钟周期,才是正常的起始位,然后在每隔 16 个 bclk 时钟周期采样接收数据,移位输入接收移位寄存器 rec_buf,最后输出数据。还要输出一个数据接收标志信号 rec_ok 标志数据接收完。UART 接收器接口信号如图 3.4 所示。图 3.4 接收模块接口信号由于串行数据帧和接收时钟是异步的,由逻辑 1 转为逻辑 0 可以被视为一个数据帧的起始位。然而,为了避免信号干扰,得到正确的起始位信号,必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都是属于逻辑 0 才可认定接收到的

48、是起始位。由于内部采样时钟 bclk 周期(由波特率发生器产生)是发送或接收波特率时钟频率的 16 倍,所以起始位需要至少 8 个连续 bclk 周期的逻辑 0 被接收到,才认为起始位接收到,接着数据位和奇偶校验位将每隔 16 个 bclk 周期被采样一次(即每一个波特率时钟被采样一次)。如果起始位的确是 16 个 bclk 周期长,那么接下来的数据将在每个位的中点处被采样。UART 接收器的状态机一共有 5 个状态:1. 等待起始位状态 REC_START当 UART 接收器复位后,接收状态机将处于这一状态下。此时,接受状态机一直在等待 RXD 的电平从逻辑 1 变为逻辑 0 的跳转,一旦确

49、定了产生电平跳变,状态机将转入 REC_CENTER 状态。在REC_CENTER 状态中检测是否为起始位,确定即意味着新的一 UART 数据帧的开始。RXD_SYNC 信号是图 3.3 波特率模块接口信号14RXD 的同步信号,因为在进行逻辑 1 或逻辑 0 判断时,不希望检测的信号是不稳定的,所以不直接检测 RXD 信号,而是检测经过同步后的 RXD_SYNC 信号。2. 确定起始位并求中点状态 REC_CENTER 对于异步串行信号,为了使每次都能正确检测数据位信号,且在后面的数据位检测时累计误差较小,显然在每位的中点检测是最为理想的。本状态就是通过对 bclk 的个数进行计数(REC_

50、CNT16)由起始位求出每位的中点,但计数值要考虑得当,正确选择。要考虑经过一个状态,也即经过了一个 bclk周期,所希望得到的是在采样时 1/2 位(8 个 bclk 周期) 。另外,在 REC_START 状态检测到的起始位可能不是真正的起始位,可能是一个偶然出现的干扰尖脉冲(负脉冲)。但这种干扰脉冲的周期是很短的,所以可以认为检测到的逻辑 0 保持时间超过 1/2 个位时间(8 个 bclk 周期)的信号一定是起始位。3. 等待采样状态 REC_WAIT当状态机处于这一状态,等待计满 15 个 bclk,在第 16 个 bclk 是进入 REC_SAMPLE 状态进行数据位的采样检测,同

51、时也判断数据位长度是否已达到数据帧的长度(FrameLen),如果计数已满,就说明停止位来临了。FrameLeng 是可更改的(使用了 Generic)。在本设计中默认为 8,即对应的 UART 工作在 8 位数据位,奇偶校验任选。4. 采样数据状态 REC_SAMPLE即数据位采样检测,同时对已接受的数据求奇偶校验,完成后无条件状态机转入 REC_WAIT 状态,等待下次数据位的到来。5. 停止位和奇偶校验接收状态 REC_STOP无论停止位是 1 位还是 1.5 位,或是 2 位,状态机在 REC_STOP 不具体检测 RXD,在无奇偶校验时只是输出帧接收完毕信号(rec_ok=1),停止

52、位后状态机转回到 REC_START 状态,等待下一个帧的起始位。在有奇偶校验时判断接收到的校验位与求出的校验值是否相同。若相同则表明接受的数据正确,rec_ok 出1,error 输出0 ;不相同表明接受的数据有错误,rec_ok 输出0,error 输出1 。状态转移如图 3.4 所示,状态机部分实现代码见附录:接收模块状态机部分代码。上述状态定义如下:type states is (rec_start,rec_center,rec_wait,rec_sample,rec_stop); -定义各子状态signal state:states:=rec_start;15图 3.4 接收模块状态

53、机3.2.4 发送模块设计发送模块的核心是状态机。它可以读入来自 THR(Transmit Hold Register)发送保持寄存器的数据,并根据配置寄存器里面的信息加入起始位、1,1.5 或 2 位停止位和奇偶校验位,然后把打包的数据通过移位寄存器把数据以标准的串口协议发送给串口接收设备。数据的发送是由微处理器控制,微处理器给出 tansfer_cmd 信号,发送器根据此信号将并行数据txdbuf(framleng-1: 0)通过移位操作发送串行数据至串行数据输出端 txd。在数据发送过程中用输出信号 send_over 作为标志信号,当数据移位串行发送完毕时,send_over 信号为

54、1,通知 CPU 在下个时钟装入新数据。UART 发送器的接口信号如图 3.5 所示。图 3.5 发送模块器的接口信号发送器只要每隔 l6 个 bclk 周期输出 1 个数据即可,次序遵循第 1 位是起始位,第 8 位是停止位。在本设计中可选择是否产生校验位,改变 Generic 参数 FrameLent,可以改变数据长度,停止位是固定的 1 位格式。在发送时已计算出此数据的奇偶校验值。发送状态机一共有 5 个状态如图 3.6 所示:图 3.6 发送模块状态机161. 空闲状态 TRA_IDLE当 UART 被复位后,状态机将立刻进入这一状态。UART 的发送器一直在等待数据帧发送命令TRAN

55、SFER_CMD。TRA_CMD 信号是对 TRANSFER_CMD 的处理,TRA_CMD 是一个短脉冲信号。当 TRA_CMD=1 ,状态机转入 TRA_START,准备发送起始位。2. 发送起始位状态 TRA_START在这个状态下,UART 的发送器发送一个 bclk 周期时间宽度的逻辑 0 信号至 TXD。紧接着状态机转入 TRA_WAIT 状态。TRA_CNT 是 bclk 的计数器。3. 等待移位状态 TRA_WAIT当状态机处于这一状态,先等待计满 15 个 bclk 完成一个完整的起始位发送,在第 16 个 bclk 是进入 TRA_SHIFT 状态进行数据移位发送,同时也判

56、断数据位长度是否已达到数据帧的长度(FrameLeng),如果计数已满,就说明数据发送完毕,进入 TRA_STOP 状态。4. 移位状态 TRA_SHIFT当状态机处于这一状态时,实现待发数据的并串转换并发送。TRA_WAIT 转换完成立即回到TRA_WAIT 状态。5. 校验、停止位状态 TRA_STOP当数据帧发送完毕,状态机转入该状态。此状态下先判断是否要发送奇偶校验位,若需要则先发送校验位后发送停止位,不需要直接发送 16 个 bclk 周期的逻辑 1 信号,即 1 位停止位。状态机送完停止位后判断 TRANSFER_CMD 信号,为 1 回到 TRA_IDLE 状态.并等待另一个数据

57、帧的发送命令。状态机部分实现代码见附录:发送模块状态及部分代码。发送模块状态定义如下:type states is (tra_idle,tra_start,tra_wait,tra_shift,tra_stop); -定义个子状态signal state:states:=tra_idle;3.33.3 小节小节本章讲述了UART的设计细节,首先分析了该设计实现功能要求,然后将UART结构的进行模块划分,详细介绍了每个模块实现的功能及设计思路。其中包含有状态机的模块,给出了状态转换图。本章的完成为下一章的功能仿真奠定了基础。17第四章 UART 设计的仿真与验证4.14.1 顶层模块仿真顶层模块

58、仿真为方便仿真对顶层模块程序作了少许改动,在接受数据缓冲寄存器和发送数据缓冲寄存器增加了一锁存器。接收模块接受到数据后,受 receive_ok 高电平控制将数据取反送给发送数据缓冲寄存器。在 transfer_cmd 控制下,将数据发送出去。观看图 4.1 修改后的顶层模块 RTL 级图可帮助理解。图 4.1 修改后的顶层模块 RTL 级图图 4.2 为仿真时序图,查图可知,输入数据为“10010011”在 receive_ok 信号变高后,取反后送给 transfer_buf 即图中所示的“01101100” 。发送模块受 transfer_cmd 信号控制,发送数据给计算机。观图可知,发

59、送出的数据正是“01101100” 。由此可知,此设计仿真功能完全真确。注:由于此图较长,为方便研究此设计性能故将原图截为了两段。图 4.2 顶层模块仿真图4.5 节的 FPGA 开发版下载验证正是在此修改的基础上,下载仿真的。在 4.5 节中有详细的验证方法介绍,可与本小节结合起来理解仿真和验证方法。184.24.2 波特率发生模块仿真波特率发生模块仿真为方便波特率发生器模块仿真,便于观察仿真的波形,把系统时钟周期设置为20ns,分频系数设置为10。图4.3波特率发生器的功能仿真图从图4.3可以看到波特率发生器每经过lO个时钟周期输出一个完整的波特率时钟周期,对模块中的类属参数设置可以实现任

60、意要求的分频。分频以后的时钟周期是200ns,可见波特率发生器的工作完全满足设计的要求,仿真结果正确。4.34.3 接收模块仿真接收模块仿真串行数据从接收模块的输入端口rxd_rec进入,从低位到高位按顺序接收,然后经过接收移位寄存器(RSR)的串并转换,最终把并行数据同时送到接收缓冲寄存器(RBR),同时输出一些线路状态信息。rxd_rec信号从高电平转到低电平的时候,就认为是一个数据帧的开始,接收状态机马上进入开始状态。在移位了规定的有效数据位长度以后,就把它转换成并行数据装载到接收缓冲寄存器里面,同时发出数据接收准备好信号,等待CPU进行读取。我们来看图4.4第一张子图(1)。首先rxd

温馨提示

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

评论

0/150

提交评论