《于基fpga的串口设计-正文--本科毕业设计.doc》由会员分享,可在线阅读,更多相关《于基fpga的串口设计-正文--本科毕业设计.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录基于FPGA的串口设计目 录前 言11 引言11.1 课题来源11.2 课题研究的研究背景11.3 国内外的发展现状、发展趋势及存在的主要问题21.4 课题研究的指导思想与技术路线31.5 基于FPGA串口设计的技术要求42 UART原理介绍52.1UART结构和工作原理53 方案选择63.1 设计语言的选择63.2 电平转换方式的选择73.3 FPGA核心芯片的选择74 系统硬件设计94.1 器件芯片介绍94.2 系统硬件框图144.3 主要组成电路分析144.4 总电路图设计175 系统软件设计175.1 主程序流程图 175.2 中断子程序流程图195.3 DDS控制软件设计195.
2、4 AD7886 软件驱动设计205.5 系统源程序216 制作位移测量装置的步骤217 总结 22参考文献23致 谢24附录125附录226附录327前言前 言随着FPGA/CPLD器件在控制领域的广泛使用,开发嵌于FPGA/CPLD器件内部的通用异步收发器,以实现FPGA/CPLD开发系统与PC机之间的数据通信是很有实际意义的。FPGA/CPLD器件与单片机、ARM等器件不同,内部没有集成UART,因此要实现串行通信,必须要独立开发UART模块。本设计对于深入理解串口的工作原理和理解FPGA的工作流程具有启示意义,并通过设计的过程FPGA的应用能力和系统综合设计能力将得到加强。1 引言1.
3、1 课题来源 结合科研1.2课题研究的研究背景 当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断地进行更新换代。它由早期的电子管、晶体管、小中规模集成电路、发展到超大规模集成电路(VLSIC,几万门以上)以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FP
4、GA)和复杂可编程逻辑器件(CPLD)。 通用异步收发器(Universal Asynchronous Receiver/Transmitter), 简称为UART ) 由于具有数据通信时需要的连线少, 具有相关工业标准提供的标准的接口电平规范等优点, 在工业控制领域被广泛采用. 近年来, 随着FPGA/ CPLD 器件在控制领域的广泛使用, 开发嵌于FPGA/ CPLD 器件内部的通用异步收发器, 以实现FPGA/ CPLD 开发系统与PC 机之间的数据通信引起了FPGA / CPLD 领域研究人员的关注. 为此,本设计基于FPGA 器件设计了符合RS - 232 标准的U ART , 便于
5、实现FPGA/CPLD开发系统与PC 机之间的串口数据交换。第35页 (共37页)1.3国内外的发展现状、发展趋势及存在的主要问题 通用异步收发器(Universal Asychronous Receiver Transmitter,UART)是雷达中常用的器件类型,多用于全机监测、指令发送接收、状态传递、键盘显示操作以及控制等等。由于许多大的器件供应商不再生产此类军品级产品,因此,就必须另寻途径解决其在雷达中的应用问题。利用可编程器件实现UART功能模块,既可以满足产品类别的需求又可以在使用中根据实际情况增减配置,是我们在设计中值得考虑的一种方法。在嵌入式系统中,嵌入式CPU往往要通过各种串
6、行数据总线与“外界”进行通信。在应用中,异步的串行数据通信用得较多,而通用异步收发器在其中扮演着重要角色:完成数据的串并转换,即把并行数据按照通信波特率转化为通信协议中规定的串行数据流,也可从串行数据流中取出有用数据转变为并行数据。 FPGA是英文 Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 FPGA 采用了逻辑单元阵列LCA(Logic Cell Arr
7、ay)这样一个新概念,内部包括可配置逻辑模块CLB (Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 FPGA的基本特点主要有:1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。2)FPGA可做其它全定制或半定制ASIC电路的中试样片。3)FPGA内部有丰富的触发器和IO引脚。4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统
8、提高系统集成度、可靠性的最佳选择之一。目前FPGA的品种很多,有XILINX的XC系列,TI公司的TPC系列、ALTERA公司的FIEX系等。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一
9、片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。FPGA的设计难点:1)不同时钟域转换2)高速电路设计,信号完整性3)降低功耗1.4课题研究的指导思想与技术路线UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是一种应用广泛的短距离串行传输接口。UART允许在串行链路上进行全
10、双工的通信。串行外设用到的RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用Verilog将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文设计一利用FPGA实现的通用异步收发器UART,能实现与PC机之间的串口通信。1.5基于FPGA串口设计的技术要求 (1)设计出能完成串行数据发送和
11、接收的的串口,可实现与PC机的通讯。(2)设计波特率为9600bit/s(3)收发数据帧格式定义为:1位起始位,8位数据位和1位停止位。(4)用modelsim仿真总结2 UART原理介绍2.1 UART结构和工作原理2.1.1UART介绍UART:Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置,UART是一个并行输入成为串行输出的芯片,通常集成在主板上,多数是16550AFN芯片。因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART
12、的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。 UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验
13、。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。图1 UART数据传输结构图2.1.2 UART 帧的格式UART 帧的格式包括线路空闲状态(idle,高电平有效)、起始位(start bit,低电平有效)、58 位数据位(data bits)、校验位(parity bit,可选)和1 位停止位(stop bit)。 字符的同步由起始位和停止位来实现。UART 内部配置有寄存器,可以配置实现数据位数(58 位)可选、是否有校验位和校验的类型等设置。 图2 UART数据帖格式 2.1
14、.3 UART工作原理UART 接收器在工作时,信号检测器一直监视RxD 线上的电平,当RxD 线上出现低电平时, 通知串行接收控制器有数据需要接收,此时接收控制器启动移位寄存器、波特率发生器和数据位计数器. 在波特率时钟的驱动下移位寄存器将RxD 线上的电平值依次移入内部寄存器,当计数器的计数值达到10 时表示一帧数据接收完成,这时接收控制器产生数据接收完成中断,并从接收的数据帧中提取出数据并锁存,供后续模块使用.U ART 发送器在工作时,发送信号检测器一直监视发送请求信号是否有效, 若检测发送请求信号有效,则发送信号检测器停止接收发送请求. 发送请求信号传到串行发送控制器后, 控制器启动
15、发送移位寄存器、波特率发生器和数据位计数器, 在波特率时钟的驱动下, 发送移位寄存器先发送一位起始位( 逻辑0) , 然后将待发送的并行数据从最低位开始逐位发出,数据发送完后, 再发送一位停止位( 逻辑1)。在移位寄存器移出一位逻辑值后数据位计数器加1,当数据位计数器记满10 表示一帖数据发送完成,此时控制器停止各个辅助部件并且再次启动发送信号检测器, 开始监视下一次发送请求. 3方案选择3.1设计语言选择 本次设计用的硬件描述语言是VHDL,主要原因是以前学过该语言和它具有如下优势:(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言
16、。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 (2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 (3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。3.2电平转换方式选择RS232C 是与RS499、RS423、RS422和
17、RS485 并列的一种UART ( universal asynchronous receiver / transm itter)接口标准规范和总线标准规范. 这些规范虽然规定了不同的通信接口电气特性、传输速率、连接特性和接口的机械特性等内容, 但是都对应异步串行通信协议. 由于实际中PC 的外部接口配置为RS232C 已经成为事实标准, 所以文章以RS232C 为基础编写FPGA 串口驱动程序。而MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,所以电平转换部分就是用MAX232实现的。 3.3 FPGA核心芯片的选择 本系统用的主芯片是EP1C12Q240
18、C8,该系列的芯片采用324引脚、BGA封装的EP1C12 FPGA,它拥有12060个LE,52个M4K片上RAM(共计239616bits),2个高性能PLL以及多达249个用户自定义IO。同时,系统还可以根据用户不同的设计需求来更换其它不同系列的核心板,如: EP1C6、EP2C20、EP3C25等。所以,不管从性能上而言,还是从系统灵活性上而言,它都会成为我们的好帮手。 EP1C12核心板具有JTAG调试接口、50MHz高精度时钟源等可用资源,因此对于设计和仿真都提供了较好的条件。3.4 总体设计框图FPGARS232电平转换PC机图3 总体设置框图4 系统硬件设计4.1 器件芯片介绍
19、4.1.1 FPGA核心板EP1C12介绍EP1C12核心板为基于Altera Cyclone器件的嵌入式系统开发提供了一个很好的硬件平台,它可以为开发人员提供以下资源: 1 主芯片采用Altera Cyclone器件EP1C12F324C8 2 EPCS4I8配置芯片3 4个用户自定义按键4 4个用户自定义LED 5 1个七段码LED 6 标准AS编程接口和JTAG调试接口7 40MHz高精度时钟源8 三个高密度扩展接口 9 系统上电复位电路 10 支持+5V直接输入,板上电源管理模块系统主芯片采用324引脚、BGA封装的E1C12 FPGA,它拥有12060个LE,52个M4K片上RAM(
20、共计239616bits),2个高性能PLL以及多达249个用户自定义IO。同时,系统还可以根据用户不同的设计需求来更换其它不同系列的核心板,如: EP1C6、EP2C20、EP3C25等。图4 EP1C12核心板系统功能框图FPGA开发平台提供了丰富的资源供学生或开发人员学习使用,资源包括接口通信、控制、存储、数据转换以及人机交互显示等几大模块,接口通信模块包括SPI接口、IIC接口、VGA接口、RS232接口、USB接口、PS2键盘/鼠标接口、1Wire接口等;存储模块包括EEPROM存储器模块等;数据转换模块包括串行ADC、 DAC以及音频CODE等;人机交互显示模块包括8个按键、16个
21、LED发光二极管显示、1602字符型点阵LCD、8位动态7段码管、实时时钟、SD卡等。上述的这些资源模块既可以满足初学者入门的要求,也可以满足开发人员进行二次开发的要求。EDA/SOPC实验开发平台提供的资源有: 1、 标准配置核心板为EP1C12核心板(核心芯片为EP1C12F324C8)。可更换EP2C20F484C8等其它核心板。2、 1602字符型液晶点阵。3、 RTC,提供系统实时时钟。4、 1个256色VGA接口。 5、1个标准串行接口。6、 1个USB设备接口,利用PDIUSBD12芯片实现USB协议转换。7、 基于SPI或IIC接口的音频CODEC模块。8、 1个蜂鸣器输出模块
22、。9、 2个PS2键盘/鼠标接口。10、 串行ADC和串行DAC模块。11、 IIC接口的EEPROM存储器模块。12、 基于1-Wire接口的数字温度传感器。13、 8位动态七段码管LED显示。14、 16个用户自定义LED显示,8个用户自定义按键输出。15、 一个SD卡接口模块。16、 扩展接口,供用户高速稳定的自由扩展。 图5 FPGA系统平台功能框图JTAG调试接口 在FPGA开发过程中,JTAG是一个比不可少的接口,因为开发人员需要下载配置数据到FPGA。在Nios II开发过程中,JTAG更是起着举足轻重的作用,因为通过JTAG接口,开发人员不仅可以对Nios II系统进行在线仿真
23、调试,而且还可以下载代码或用户数据到CFI Flash中。开发板上提供如图2-6所示的10针插座,其每个插针的信号定义见表1。图6 开发板上的JTAG调试插座JP1插座信号定义 1TCK 2GND 3TDO 4Vcc(3.3V) 5TMS 6 / 7/ 8/ 9TDI 10GND 表1 JTAG插座信号定义注: /表示该插针没有任何信号。晶振核心板上提供了高精度、高稳定性50MHz的有源晶振,晶振所输出的脉冲信号直接与FPGA的时钟输入引脚相连。如果设计人员需要其它频率时钟源,可以在FPGA内部进行分频或利用FPGA内部PLL倍频等途径来得到。有源晶振的输出端与FPGA的IO接口对应关系如表2
24、所示。40M时钟信号EP1C12引脚40MHZ J3 表3 时钟信号与FPGA IO接口对应表 -4.1.2 MAX232 MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。 图7 MAX232芯片引脚介绍 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(
25、R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。 TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。主要特点1、符合所有的RS-232C技术标准 2、只需要单一 +5V电源供电 3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V- 4、功耗低,典型供电电流5mA 5、内部集成2个RS-232C驱动器 6、
26、内部集成两个RS-232C接收器 7、高集成度,片外最低只需4个电容即可工作。4.1.3 RS232 RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。 该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。RS-232C 的接口信号:RS-232C 的功能特性定义了25芯标准连
27、接器中的20根信号线,其中2条地线、4条数据线、11条控制线、3条定时信号线,剩下的5根线作备用或未定义。常用的只有10根,它们是:(1)联络控制信号线: 数据发送准备好(Data set ready-DSR)有效时(ON)状态,表明MODEM处于可以使用的状态。 数据终端准备好(Data terminal ready-DTR)有效时(ON)状态,表明数据终端可以使用。 这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。 请求发送(Request to send-RTS)用来表示D
28、TE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发送状态。 允许发送(Clear to send-CTS)用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。 这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。 接收线信号检出(Received Line detection-
29、RLSD)用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。 振铃指示(Ringing-RI)当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。 (2)数据发送与接收线: 发送数据(Transmitted data-TxD)通过TxD终端将串行数据发送到MODEM,(DTE
30、DCE)。 接收数据(Received data-RxD)通过RxD线终端接收从MODEM发来的串行数据,(DCEDTE)。 (3)地线 : GND、Sig.GND保护地和信号地,无方向。 上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TxD线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。 2个
31、数据信号:发送TXD;接收RXD。 1个信号地线:SG。 6个控制信号: DSR 数传发送准备好,Data Set Ready。 DTR 数据终端准备好,Data Terminal Ready。 RTS DTE请求DCE发送(Request To Send)。 CTS DCE允许DTE发送(Clear To Send),该信号是对RTS信号的回答。 DCD 数据载波检测(Data Carrier Detection),当本地DCE设备(Modem)收到对方的DCE设备送来的载波信号时,使DCD有效,通知DTE准备接收, 并且由DCE将接收到的载波信号解调为数字信号, 经RXD线送给DTE。 R
32、I 振铃信号(Ringing),当DCE收到对方的DCE设备送来的振铃呼叫信号时,使该信号有效,通知DTE已被呼叫。 由于RS232接口标准出现较早,难免有不足之处,主要有以下四点: (1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。 (2)传输速率较低,在异步传输时,波特率20Kbps。 (3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。 (4)传输距离有限,最大传输距离标准值为50英尺(实际15米)。RS232(DB9)接口定义图8 接口说明1 DCD 载波检测
33、2 RXD 接收数据 3 TXD 发送数据 4 DTR 数据终端准备好 5 SG 信号地 6 DSR 数据准备好 7 RTS 请求发送 8 CTS 允许发送 9 RI 振铃提示4.2 系统硬件框图FPGAAS下载方式 JTAG接口MAX232PC终端电源时钟晶振图9 系统硬件图4.3 主要组成电路分析本系统设计目标主要包括两个部分:FPGA模块、电平转换模块。4.3.1 FPGA模块 FPGA模块主要由波特率产生模块、数据发送模块、数据接收模块三部分组成。下图为FPGA的顶层原理图。图10 .顶层模块的电路图波特率产生模块: 波特率发生器实际上就是一个分频器。可以根据给定的系统时钟(晶振时钟)
34、和要求的波特率算出波特率分频因子,算出的波特率分频器的分频数。即分频数=系统时钟(16波特率),波特率分频数可以根据不同的应用需要更改。题目要求波特率为9600bit/s,由于FPGA的EP1C12核心板提供了高精度、高稳定性的40MHz时钟源。波特率发生器模块图如下所示图11 波特率发生器模块图波特率发生器的仿真结果如图:Clk:时钟信号周期Resetb:复位信号Bclk:输出波特率时钟信号周期图12 波特率发生器的仿真波形UART接收器模块: 由于串行数据帧和接收时钟是异步的,由逻辑1转为逻辑0可以被视为一个数据帧的起始位。然而,为了避免毛刺影响,能够得到正确的起始位信号,必须要求接收到的
35、起始位在波特率时钟采样的过程中至少有一半都是属于逻辑0才可认定接收到的是起始位。由于内部采样时钟bclk周期(由波特率发生器产生)是发送或接收波特率时钟频率的16倍,所以起始位需要至少8个连续bclk周期的逻辑0被接收到,才认为起始位接收到,接着数据位和奇偶校验位将每隔16个bclk周期被采样一次(即每一个波特率时钟被采样一次)。如果起始位的确是16个bclk周期长,那么接下来的数据将在每个位的中点处被采样。1、R_START状态:当UART接收器复位后,接收状态机将处于这一状态。在此状态,状态机一直在等待RXD的电平跳转,从逻辑1变为逻辑0,即起始位,这意味着新的一帧UART数据帧的开始,一
36、旦起始位被确定,状态机将转入R_CENTER状态。图6中的RXD_SYNC信号是RXD的同步信号,因为在进行逻辑1或逻辑0判断时,不希望检测的信号是不稳定的,所以不直接检测RXD信号,而是检测经过同步后的RXD_SYNC信号。 2、R_CENTER状态:对于异步串行信号,为了使每一次都检测到正确的位信号,而是在较后的数据位检测时累计误差较小,显然在每位的中点检测是最为理想的。在本状态,就是由起始位求出每位的中点,通过对bclk的个数进行计数(RCNT16),但计数值不是想当然的“1000”,要考虑经过一个状态,也即经过了一个bclk周期,所希望得到的是在采样时1/2位。另外,可能在R_STAR
37、T状态检测到的起始位不是真正的起始位,可能是一个偶然出现的干扰尖脉冲(负脉冲)。这种干扰脉冲的周期是很短的,所以可以认为保持逻辑0超过1/4个位时间的信号一定是起始位。图13 UART接收器的接收状态机注:状态机一共有5个状态:R_START(等待起始位)、R_CENTER(求中点)、R_WAIT(等待采样)、R_SAMPLE(采样)和R_STOP(停止位接收)。3、R_WAIT状态:当状态机处于这一状态,等待计满15个bclk,在第16个bclk是进入R_SAMPLE状态进行数据位的采样检测,同时也判断是否采集的数据位长度已达到数据帧的长度,如果到来,就说明停止位来临了。在本设计中默认为8,
38、即对应的UART工作在8位数据位、无校验位格式。4、R_SAMPLE状态:即数据位采样检测,完成后无条件状态机转入R_WAIT状态,等待下次数据位的到来。5、R_STOP状态:无论停止位是1还是1.5位,或是2位,状态机在R_STOP不具体检测RXD,只是输出帧接收完毕信号(REC_DONE1),停止位后状态机转回到R_START状态,等待下一个帧的起始位。图14 UART接收器的模块图UART接收器的仿真波形结果Bclkr:波特率时钟信号周期Resetr:复位信号Rxdr:电平触发信号,从逻辑1变为逻辑0R_ready:数据帧Rbuf:并行数据图15 UART接收器的仿真波形UART发送器模
39、块: 发送器只要每隔16个bclk周期输出一个数据即可,次序遵循第一位是起始位,第8位是停止位。在本设计中没有校验位,但只要改变Generic参数Frameelen,也可以加入校验位,停止位是固定的1位格式6。图4.4.3.1是发送状态机的状态图。 此状态机一共有5个状态:X_IDLE(空闲)、X_START(起始位)、X_WAIT(移位等待)、X_SHIFT(移位)和X_STOP(停止位)。1、X_IDLE状态:当UART被复位信号RESETL复位后,状态机将立刻进入这一状态。在这个状态中,UART的发送器一直在等待一个数据帧发送命令XMIT_CMD。这时由于XMIT_CMD是一个外加信号,
40、在FPGA之外,不可能对XMIT_CMD的脉冲宽带进行限制,如果XMIT_CMD有效在UART发完一个数据帧依然有效,那么就会错误地被认为,一个新的数据发送命令又到来了,UART发送器就会再次启动UART帧的发送,显然该帧的发送是错误的。在此对XMIT_CMD进行了脉冲宽度的限定,用XMIT_CMD_P代替XMIT_CMD信号,XMIT_CMD_P是一个短脉冲信号。当XMIT_CMD_P=1,状态机转入X_START,准备发送起始位。2、X_START 状态:在这个状态下,UART的发送器一个时间宽度的逻辑0信号至TXD,即起始位。紧接着状态机转入X_WAIT状态。XCNT16是bclk的计数
41、器。 3、X_WAIT 状态:同UART接收状态机中的R_WAIT状态类似。 4、X_SHIFT 状态:当状态机处于这一状态时,实现待发数器的并串转换。转换完成立即回到X_WAIT状态。 5、X_STOP :停止位发送状态,当数据帧发送完毕,状态机转入该状态,并发送16个bclk周期的逻辑1信号,即1位停止位。状态机送完停止位后回到X_IDLE状态,并等待另一个数据帧的发送命令。图16 发送状态机的状态图图17 UART发送器的模块图UART发送器的仿真波形结果如图4.4 .3.3Bclkt:波特率时钟信号周期Resett:复位信号Xmit_cmd_p:短脉冲信号Txddone:串行数据Txd
42、:数据帧 图18 UART发送器的仿真波形4.3.2 电平转换模块 电平转换是由MAX232芯片实现的。MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。该模块的作用就是实现电平转换后于PC机相连。 图19 MAX232电平转换电路4.4 总电路图设计见附录1和附录2。5 系统软件设计软件设计概述:本设计使用的软件主要是ModelSim SE 6.2b和Quartus II 9.0 两个软件,用Quartus II 9.0主要是用来程序仿真画顶层原理图和生成子模块图。ModelSim SE 6.2b主要用来波形仿真。5.1 发送数据程序流
43、程图 Y开始波特率设置(9600bit/s)复位信号为0Y准备发送(等待发送脉冲信号)发送数据起始位移位等待数据转换?换?发送停止位发送完成准备发送下一帖数据完成N 图20 数据发送模块流程图5.2 接收数据程序流程图开始波特率设置(9600bit/s)复位信号为0Y准备接收接收起始位(逻辑0超过1/4个位时间为起始位)RXD_SYNC=0RXD_SYNC=1数据位是否为8位?YN接收停止位接收完成结束准备接收下一帖数据图21数据介绍模块流程图5.5 系统源程序系统程序见附录3。6 制作步骤 本课题的制作是分这几个步骤完成的: 、查阅大量的资料,完成开题报告。在这个过程中我经常到图书馆查阅FP
44、GA以及UART的相关资料,同时我也经常上网搜索这方面的资料,知识总是在不断积累的过程中了解和掌握的。因此,一段时间下来,我对位FPGA和 UART的国内外研究状况、发展趋势、工作原理和制作方法都有了比较清晰的了解。 、确定方案。通过一段时间的学习和查阅资料确定了设计的主要流程和主要器件。、硬件设计。硬件设计主要是指画硬件电路,在这里要用到一个画图软件Protel。画硬件电路不仅可以体现一个人的基础知识掌握这样不仅看的时候好看,也以节约资源。 、软件设计。本课题的软件部分是用VHDL语言设计而成的。系统软件的设计采用了模块化的结构方式,将各个功能分成独立模块,由系统的监控程序统一管理执行。编写
45、完程序后,要编译,编译通过后生成VHDL文件。文件编译成功后将由Quartus II 9.0 生成子模块和状态转换图,再在ModelSim 里面运行程序观察波形。结束语7 总结本文对以FPGA为核心实现UART与PC机之间的串口通信的整体结构、 性能功用及各组成模块的设计方法都做了较为详细的研究。通过波特率发生器、发送器和接收器模块的设计与仿真,能较容易地实现通用异步收发器总模块,。本设计完全采用VHDL 语言进行描述。实现的UART设置了时钟输入clk ,复位输入reset ,串行数据输入rxd ,读写信号输入rd 和wr、片选输入cs、传送数据位数选择输入a1 和 a0、定时器初值输入count ,串行发送数据输入txd ,接收寄存器状态输出rdfull 、发送寄存器状态输出tdempty 以及数据总线data。并详细讨论了采用VHDL 对异步通信接口UART 的设计流程,对设计进了功能仿真、综合,以及静态时序分析和时序仿真,完成了在FAGA 上实现UART的全过程,再通过电平转换与PC机相连,就实现了与PC机的通信。 通过本次毕业设计,我完成了基于FPGA串口设计。在这次毕业设计中使我对FPGA技术有了进一步的认识,FPGA技术注重培养学生的自主创新的意识和能力,侧重使用电子系统的设