基于FPGA的UART设计与实现
- 格式:pdf
- 大小:563.38 KB
- 文档页数:5
通用异步接收发送器UART (Universal Asyn2chronousReceiver and Transmitter )能够在串行方式下发送和接收数据,数据传送方式只需要一对线路就能实现远距离数据通信。
其以资源简单、传输距离远、易于实现等特点成为各种处理器的标准集成外设之一。
在实际的应用设计中,经常要用到UART 的多个主要功能,常用的标准通信波特率有9600bps 、15200bps 等。
本文使用Verilog HDL 语言将UART 器件的核心功能描述成一个异步串行数字收发模块,并且在Modelsim 上实现了其功能仿真。
1UART 原理及设计简介UART 的全称是通用异步收发器(Universal Asynchronous Receiver /Transmitter ),是实现设备之间低速数据通信的标准协议。
“异步”指不需要额外的时钟线进行数据的同步传输,是一种串行总线接口,只需占用2根线就可以完成数据的收发(1根接收数据,1根发送数据)。
UART 一帧由起始位、数据位、校验位和停止位组成。
数据逐位传输,示意图如图1所示。
异步通信要求发送的每一帧数据都必须按照图1给定的UART 格式进行格式化。
一帧数据由4部分组成,首先是起始位“0”;接着是发送的数据(这里采用8位);然后是可选的检验位来判断接收数据有无错误(这里选用奇检验);最后是停止位“1”(停止位可以为1位、1.5位和2位)。
若线路上没有传输的数据,则线路始终保持为“1”,即空闲。
接收端不断检测线路状态,非接收状态下如果检测到线路由“1”变为“0”(“0”至少保持8个内部时钟周期),则认为有发送数据需接收,接收器进入接收阶段。
UART 模块总结构如图2所示。
首先,发送时按照UART 帧格式,由发送写信号启动发送波特率发生器,先发送一位起始位,然后由发送波特率发生器时钟启动发送移位寄存器,将发送数据存入发送移位寄存器,并将发送一位寄存器中的数据发送,同时由发送波特率发生器时钟启动发送数据计数器,当计数器计数到第10位时,产生奇偶校验位,此时发送奇偶校验位,计数到第11位时,发送停止位,同时产生发送完成指示信号。
四川师范大学本科毕业设计基于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 industry's 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;FSM目录摘要: (I)Abstract: (II)1 绪论 (1)1.1 课题背景 (1)1.2 课题研究现状 (2)1.3 课题研究内容与主要工作 (3)1.4 课题内容结构 (3)2 UART理论基础 (4)2.1 接口技术简介 (4)2.2 UART基本结构 (4)2.3 UART数据帧格式 (5)2.4 涉及到的理论计算 (6)3 设计工具 (7)3.1 课题硬件平台——FPGA (7)3.2 设计工具QuartusII简介与使用 (7)3.3 VHDL语言简介 (7)4 UART实现方案 (8)4.1 系统总体结构 (8)4.2 顶层模块设计 (8)4.3 波特率发生模块设计 (9)4.4 接收模块 (10)4.5 发送模块设计 (12)5 UART设计的仿真与验证 (15)5.1波特率发生模块仿真 (15)5.2 接收模块仿真 (15)5.3 发送模块仿真 (16)6 总结 (17)参考文献 (18)致谢 (19)附录 (20)基于FPGA的UART设计1 绪论在计算机的数据通信中,外设一般不能与计算机直接相连,它们之间的信息交换主要存在以下问题:(1)速度不匹配。
基于FPGA实现多路UARTSPI通信系统第一部分设计概述 /Design Introduction本次的设计为多路UART/SPI通信系统,可以实现一对多的通信。
系统可以运行在UART模式,也可以运行在SPI模式。
我选择这一课题的原因主要是目前我所在的实验室需要写基于UART的快速通信。
这一课题既可以帮助我巩固之前学习的知识,又可以为我后面的项目做准备。
在完成课题的过程中,主要用到了FPGA状态机、总线等方面的知识。
这一课题可以应用在需要高速异步串行或同步串行通信的应用场合,如实时控制、监测等。
当系统运行在UART模式下,可以实现一个发送端最多向四个接收端发送信息,且有效信息中包含地址码,接收端可以根据发送端发送的地址码判断该信息是否是发送给自己的,实现信号线复用。
UART 通信简单,仅需要一根信号线,但是其缺点是只能实现单向通信,接收端无法给发送端反向发送数据。
但是这一缺点也可以通过采用两个UART系统来弥补。
当系统运行在SPI模式下,可以实现一个主机与多个从机之间的通信,且在通信过程中,系统是全双工的。
主机通过选择性拉低某一个或者某几个从机的片选信号,实现对于从机的选择。
第二部分系统组成及功能说明 /System Construction & Function Description计划功能程序实现UART和SPI的通信,并可以通过按键的方式在两种模式之间切换。
在UART模式下,发送端给接收端发送一串数据,接收端判断是否和已知数据相符。
如果相符则点亮LED,如果不符则不点亮。
在SPI模式下,主机给从机、从机给主机同时发送数据,若接收到的数据和已知数据相符,则点亮LED,如果不符,则不点亮。
同时,UART和SPI均有寻址功能。
UART的寻址方式是在数据位前面加两位地址位,实现对最多四个接收端的区分;SPI的寻址方式是通过拉低需要选定的从机的SS信号,实现对最多四个接收端的区分。
目前所有的功能均已实现。
编号基于FPGA的UART模块设计与实现Design and Realization of UART based onFPGA学生姓名周大勇专业控制科学与工程学号S*********指导教师杨晓慧学院电子信息工程学院二〇一三年六月摘要UART因其可靠性高,传输距离远,线路简单,同时UART作为RS232协议的控制接口,从而成为比较广泛的串行数据通信电路,而现在大部分集成电路通信用的UART芯片,存在成本高,电路复杂,移植性较差等缺点,本文提出了一种将UART的功能集成在FPGA芯片中,可使整个系统更为灵活、紧凑,减小整个电路的体积,提高系统的可靠性和稳定性。
本模块功能全部基于verilogHDL硬件描述语言。
关键词:FPGA, UART ,verilogHDL ,RS232ABSTRACTUART, because of its high reliability, long transmission distance and the simple line, moreover mainly used in communication between device with RS232 interface. Thus it is becoming more extensive serial data communication circuit. But now most of the integrated UART chips used in communications, have faults of high cost and poor portability. The circuit of the chip is complex. This paper presents a method that UART function will be integrated in FPGA chip, It can makesystem more compact, flexible, reliable and stable. All functions of module are based on verilogHDL hardware description language.Keywords:FPGA, UART, verilogHDL, RS232目录摘要 (I)ABSTRACT .................................................................................................................................. I I 目录...................................................................................................................................... I II 第一章绪论. (1)第二章UART 简介 (2)第三章UART功能设计 (3)3.1 波特率发生模块 (3)3.2 波特率接收模块 (5)3.3 UART发送模块 (8)第四章顶层电路及实验数据 (11)第五章结论 (12)致谢 (13)参考文献 (14)第一章绪论通用异步收发器(universal asynchronous receiver transmitter, UART)尽管自20世纪70年代就已出现,但因其简单可靠,目前仍是一种使用广泛的串行通信接口。
基于FPGA的UART设计与实现0 引言通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)可以和各种标准串行接口,如RS 232 和RS 485 等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。
一般UART 由专用芯片如8250,16450 来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART 的基本功能,使用专用芯片会造成资源浪费和成本提高。
一般而言UART 和外界通信只需要两条信号线RXD 和TXD,其中RXD 是UART 的接收端,TXD 是UART 的发送端,接收与发送是全双工形式。
由于可编程逻辑器件技术的快速发展,FPGA 的功能日益强大,其开发周期短、可重复编程的优点也越来越明显,在FPGA 芯片上集成UART 功能模块并和其他模块组合可以很方便地实现一个能与其他设备进行串行通信的片上系统。
1 UART 功能设计1.1 UART 的工作原理异步通信时,UART 发送/接收数据的传输格式如图1 所示,一个字符单位由开始位、数据位、停止位组成。
异步通信的一帧传输经历以下步骤:(1)无传输。
发送方连续发送信号,处于信息“1”状态。
(2)起始传输。
发送方在任何时刻将传号变成空号,即“1”跳变到“O”,并持续1 位时间表明发送方开始传输数据。
而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。
(3)奇偶传输。
数据传输之后是可供选择的奇偶位发送或接收。
(4)停止传输。
最后是发送或接收的停止位,其状态恒为“1”。
发送或接收一个完整的字节信息,首先是一个作为起始位的逻辑“0”位,接着是8 个数据位,然后是停止位逻辑“1”位,数据线空闲时为高或“1”状态。
起始位和停止位的作用是使接收器能把局部时钟与每个新开始接收的字符再同步。
异步通信没有可参照的时钟信号,发送器可以随时发送。
基于FPGA/CPLD设计与实现UART(VHDL)1 引言由于微电子学和计算机科学的迅速发展,给EDA(电子设计自动化)行业带来了巨大的变化。
特别是进入20世纪90年代后,电子系统已经从电路板级系统集成发展成为包括ASIC、FPGA/CPLD和嵌入系统的多种模式。
可以说EDA 产业已经成为电子信息类产品的支柱产业。
EDA之所以能蓬勃发展的关键因素之一就是采用了硬件描述语言(HDL)描述电路系统。
就FPGA和CPLD开发而言,比较流行的HDL主要有Verilog HDL、VHDL、ABEL-HDL和 AHDL 等,其中VHDL 和Verilog HDL因适合标准化的发展方向而最终成为IEEE标准。
下面的设计就是用VHDL来完成实现的。
2 UART设计实例通常设计数字电路大都采用自顶向下将系统按功能逐层分割的层次化设计方法,这比传统自下向上的EDA设计方法有更明显的优势(当时的主要设计文件是电路图)。
因为由自顶向下的设计过程可以看出,从总体行为设计开始到最终逻辑综合,形成网络表为止。
每一步都要进行仿真检查,这样有利于尽早发现系统设计中存在的问题,从而可以大大缩短系统硬件的设计周期。
下面以UART的设计为例具体说明:(本设计只对本设计的总模块做各种基于MAX+PLUS II环境下的各种分析,对于各分模块只是作些必要的说明。
) UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是一种应用广泛的短距离串行传输接口。
UART允许在串行链路上进行全双工的通信。
串行外设用到的RS232-C异步串行接口,一般采用专用的集成电路即UART实现。
如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。
或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。
基于FPGA的UART的设计与实现作者:张晓胡颖毅黄子硕魏鹏来源:《数字技术与应用》2020年第02期摘要:UART接口在机载航空仪表中得到了广泛应用,本文介绍了一种基于FPGA设计实现的UART的双工通信协议,使用VHDL语言进行描述,其波特率可以根据设计需要进行调整,控制逻辑方便。
通过相关仿真和试验,验证了UART收发功能均满足要求。
关键词:FPGA;UART;VHDL中图分类号:TN915.04 文献标识码:A 文章编号:1007-9416(2020)02-0099-020 引言UART是通用异步收发器(Universal Asynchronous Receiver/Transmitter),是一种异步收发传输器,是设备间进行异步通信的关键模块。
UART包括RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。
UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,不需同时发送时钟,仅用两根信号线就可以完成信号通信,因此也成为异步串行通信[1]。
UART字符格式为1个起始位,5~8个数据位,1个地址位或奇偶位(可选),1个停止位。
某型航空仪表主要通过RS422总线接口与机上其他设备进行数据交互,显示飞机的指示空速、马赫数、气压高度和升降速度等飞行数据。
同时为了便于该航空仪表内部的检测和维护,设计了维护检测接口,将系统内部各部件的自检信息、传感器信息以及解算后得到的各个参数按照RS422总线要求输出。
由于UART在某型仪表中的重要性,是其最主要的通信接口,本文主要讲述了此航空仪表中基于FPGA编写UART双工通信协议,实现对RS422接口芯片的控制,进行串口通讯。
1 UART双工通信的实现1.1 UART协议的设计原理UART模块由波特率发生器、UART接收器模块和UART发送器模块三个部分构成,FPGA实现UART的模块框图如图1所示。
UART串口接收模块设计实验目标:实现FPGA接收其他设备通过UART协议发送过来的数据知识点:1、U RAT通信协议工业环境下数据接收实现。
2、I n system sources and probes editor ISSP)调试工具的使用。
UART发送端发送一个字节数据时序图:采集中间时刻时的数据即可,如下图所示但是在工业应用中,往往有非常强的电磁干扰,只采样一次就作为该数据的电平判定,是不保险的,有可能恰好采集到被干扰的信号而导致结果出错,因此需要使用多次采样求概率的方式进行。
以下为改进型的单bit数据接收方式示意图:BI + 1 - 1丨丨「i |丨11 口「「「i「11 丨im i [1 2 3 4 5 6 7 8 9 10 11 12 1314 1516在这张图中,将每一位数据又平均分成了16小段,对于Bit_x这一位数据,考虑到数据在刚刚发生变化和即将发生变化的这一时期,数据极有可能不稳定的(用红色标出的两段),在这两个时间段采集数据,很有可能得到错误的结果,因此这两段时间的电平无效,采集时直接忽略。
而中间这一时间段(用绿色标出),数据本身是比较稳定的,一般都代表了正确的结果。
但是也不排除该段数据受强 电磁干扰而出现错误的电平脉冲, 因此对这一段电平,进行多次采样,并求高低 电平发生的概率,6次采集结果中,取出现次数多的电平作为采样结果。
例如, 采样6次的结果分别为1/1/1/1/0/1/,贝U 取电平结果为1,若为0/0/1/0/0/0,,贝U 取 电平结果为0,当6次采样结果中1和0各占一半(各3次),则可判断当前通 信线路环境非常恶劣,数据不具有可靠性。
串口发送模块包含两个主要组件:1、 起始位检测进程(低电平,下降沿)2、 波特率产生模块3、 数据接收模块串口接收模块整体结构图:Data_Byte[7:0] Rx_Done=Rst n波特率时钟计算:---------------- ►Baud_Set[2:0] ----- -------- ►ClkModelsim 仿真图:• 在testbench 文件中我们为设计输入了假定的信号, 在仿真图中我们可以看到 data_byte_r 在Rx_done 标志位产生的时候成功的将仿真数据 data_byte_t 接收到其中。
99收稿日期:2020-01-15作者简介:张晓(1989—),女,山东泰安人,研究生,工程师,研究方向:电子电路设计,航空仪表设计。
0 引言UART是通用异步收发器(Universal Asynchronous Re-ceiver/Transmitter),是一种异步收发传输器,是设备间进行异步通信的关键模块。
UART包括RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。
UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,不需同时发送时钟,仅用两根信号线就可以完成信号通信,因此也成为异步串行通信[1]。
UART字符格式为1个起始位,5~8个数据位,1个地址位或奇偶位(可选),1个停止位。
某型航空仪表主要通过RS422总线接口与机上其他设备进行数据交互,显示飞机的指示空速、马赫数、气压高度和升降速度等飞行数据。
同时为了便于该航空仪表内部的检测和维护,设计了维护检测接口,将系统内部各部件的自检信息、传感器信息以及解算后得到的各个参数按照RS422总线要求输出。
由于UART在某型仪表中的重要性,是其最主要的通信接口,本文主要讲述了此航空仪表中基于FPGA编写UART双工通信协议,实现对RS422接口芯片的控制,进行串口通讯。
1 UART双工通信的实现1.1 UART协议的设计原理UART模块由波特率发生器、UART接收器模块和UART发送器模块三个部分构成,FPGA实现UART的模块框图如图1所示。
波特率发生器模块主要用于产生接收器和发送器的时钟频率信号。
接收器模块的作用是接收从串行数据输入异步数据,进行串/并转换。
接收模块带奇偶校验错、帧出错信号,当接收完一帧数据或发送完一帧数据后提供指示信号[2]。
接收器包含移位寄存器和接收缓冲寄存器,移位寄存器将数据按位采集到寄存器里,接收缓冲寄存器用来缓存接收数据,同时产生中断信号给其他模块等。
基于FPGA的UART设计与实现
0引言
通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)可以和各种标准串行接口,如RS232和RS485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。
一般UART由专用芯片如8250,16450来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。
一般而言UART和外界通信只需要两条信号线RXD和TXD,其中RXD是UART的接收端,TXD是UART的发送端,接收与发送是全双工形式。
由于可编程逻辑器件技术的快速发展,FPGA的功能日益强大,其开发周期短、可重复编程的优点也越来越明显,在FPGA 芯片上集成UART功能模块并和其他模块组合可以很方便地实现一个能与其他设备进行串行通信的片上系统。
1UART功能设计
1.1UART的工作原理
异步通信时,UART发送/接收数据的传输格式如图1所示,一个字符单位由开始位、数据位、停止位组成。
异步通信的一帧传输经历以下步骤:
(1)无传输。
发送方连续发送信号,处于信息“1”状态。
(2)起始传输。
发送方在任何时刻将传号变成空号,即“1”跳变到“O”,并持续1位时间表明发送方开始传输数据。
而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。
(3)奇偶传输。
数据传输之后是可供选择的奇偶位发送或接收。
(4)停止传输。
最后是发送或接收的停止位,其状态恒为“1”。
发送或接收一个完整的字节信息,首先是一个作为起始位的逻辑“0”位,接着是8个数据位,然后是停止位逻辑“1”位,数据线空闲时为高或“1”状态。
起始位和停止位的作用是使接收器能把局部时钟与每个新开始接收的字符再同步。
异步通信没有可参照的时钟信号,发送器可以随时发送数据,任何时刻串行数据到来时,接收器必须准确地发现起始位下降沿的出现时间,从而正确采样数据。
设计时可参考由专用芯片实现的UART的功能并进行一定精简,如可以用FPGA的片内RAM替代UART的FIFO,不用单独在UART模块中实现。
设计的基本原则是保留最主要的功能,基于FPGA的UART系统由波特率时钟发生器、接收器和发送器3个子模块组成,如图2所示。
1.2接收器设计
比较而言,UART发送器的设计相对容易,只要每隔一个发送周期并按照数据帧格式输出数据即可,本文将对接收器的设计和实现做详细说明,发送器的设计方法基本相同。
接收器的工作过程如下,在接收数据寄存器被读出一帧数据或系统开始工作以后,接收进程被启动。
接收进程启动之后,检测起始位,检测到有效起始位后,以约定波特率的时钟开始接收数据,根据数据位数的约定,计数器统计接收位数。
一帧数据接收完毕之后,如果使用了奇偶校验,则检测校验位,如无误则接收停止位。
停止位接收完毕后,将接收数据转存到数据寄存器中。
为确保接收器可靠工作,在接收端开始接收数据位之前,处于搜索状态,这时接收端以16倍波特率的速率读取线路状态,检测线路上出现低电平的时刻。
因为异步传输的特点是以起始位为基准同步的。
然而,通信线上的噪音也极有可能使传号“1”跳变到空号“0”。
所以接收器以16倍的波特率对这种跳变进行检测,直至在连续8个接收时钟以后采样值仍然是低电平,才认为是一个真正的起始位,而不是噪音引起的,其中若有一次采样得到的为高电平则认为起始信号无效,返回初始状态重新等待起始信号的到来。
找到起始位以后,就开始接收数据,最可靠的接收应该是接收时钟的出现时刻正好对着数据位的中央。
由于在起始位检测时,已使时钟对准了位中央,用16倍波特率的时钟作为接收时钟,就是为了确保在位宽的中心时间对接收的位序列进行可靠采样,当采样计数器计数结束后所有数据位都已经输入完成。
最后对停止位的高电平进行检测,若正确检测到高电平,说明本帧的各位正确接收完毕,将数据转存到数据寄存器中,否则出错。
采用有限状态机模型可以更清晰明确地描述接收器的功能,便于代码实现。
接收器的状态转换图如图3所示,为突出主要过程,图中省略了奇偶校验的情况。
接收器状态机由5个工
作状态组成,分别是空闲状态、起始位确认、采样数据位、停止位确认和数据正确,触发状态转换的事件和在各个状态执行的动作见图中的文字说明。
在状态机模型的基础上,使用VHDL来描述接收器功能,其主要代码如下:
实现用16倍波特率时钟确定起始位的具体方法是设计两个输入数据位寄存器rxd1和rxd2,使用语句“rxd1<=rxd;rxd2<=rxd1;”接收数据并进行判断。
当检测到rxdl=O并且rxd2=1时可以确定下降沿发生,连续7个时钟rxd2=0即确定检测到起始位,之后为了确保在数据位中央接收数据,同样用16倍波特率时钟对数据位进行采样。
接收数据的方法是设计一个寄存器rxd_buf(7downto0),用语句“rxd_buf(7)<=rxd2;rxd_buf(6DOWNTO
0)<=rxd_buf(7DOWNTO1);”实现移位寄存器右移操作,执行8次后接收到一个完整数据。
1.3波特率发生器设计
波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。
在系统中
用一个计数器来完成这个功能,分频系数N决定了波特率的数值。
该计数器一般工作在一个频率较高的系统时钟下,当计数到N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。
如系统时钟频率是40MHz,要求波特率是9600,则16倍波特率时钟的周期约等于260个系统时钟周期,则计数器取260/2=130时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。
使用VHDL来描述波特率发生器的完整代码如下:
2数据传输测试
随着逻辑设计复杂性的不断增加,仅依赖于软件方式的仿真测试来了解系统的硬件功能有很多的局限性,应用QuartusⅡ集成开发环境中提供的SignalTapⅡ嵌入式逻辑分析仪,可以将测试信息随设计文件下载于目标芯片中,用以捕获目标芯片内部系统信号节点处的信息或总线上的数据流,而又不影响原硬件系统的正常工作。
测试信息通过器件的JTAG端口传出,并送入计算机进行显示和分析,这是一种高效的硬件测试手段,并很好地结合了传统的系统测试方法。
本设计在Altera Cyclone系列的EPlC6Q240C8芯片上进行了验证,使用QuarltusⅡ软件将编译好的.pof格式文件以AS模式下载到配置芯片EPCS1中。
在计算机端运行串口调试助手软件,将数据从计算机送出,并利用FPGA上的UART模块进行接收,将发送数据与SignalTapⅡ获取的波形进行对比,经多次测试表明收发数据完全相同。
以其中一次的测试为例进行说明,从PC上输入ASCII码的“6”,设定波特率发生器时钟作为SignalTapⅡ的采样时钟,采样波形如图4所示,其中“recstart”表示开始接收数据帧标志;“divl6”表示16倍波特率时钟;“cnt_rxd”表示数据位采样计数器,一次完整的采样计数从Oh~9h共10次采样(1个起始位,8个数据位,1个停止位);“rxd”表示串口的接收端;“rxd_buf”表示移位寄存器,当数据停止位确认后,移位寄存器输出收到的数据“36h”,表明了该UART工作稳定可靠。
应特别注意的是当利用SignalTapⅡ进行测试工作结束后,在生成最终产品前,应将SignalTapⅡ从芯片中除去,以免占用额外的资源,然后再重新编译下载。
全程编译后报告消耗逻辑单元142个,只占芯片总资源的2%,没有占用芯片的存储单元和PLL单元,对于一个中大规模的FPGA芯片而言这是非常少的资源消耗。
3结语
基于FPGA设计和实现UART,可以用片上很少的逻辑单元实现UART的基本功能。
与传统设计相比,能有效减少系统的PCB面积,降低系统的功耗,提高设计的稳定性和可靠性,并可方便地进行系统升级和移植。
本设计具有较大的灵活性,通过调整波特率发生器的分频参数,就可以使其工作在不同的频率。
采用16倍波特率的采样时钟,可以实时有效探测数据的起始位,并可对数据位进行“对准”中央采样,保证了所采样数据的正确性。
该模块可以作为一个完整的IP核移植进各种FPGA中,在实际应用时可嵌入到其他系统中,很容易实现和远端上位机的异步通信。