APP下载

基于FPGA的UART设计与实现

2012-12-27董秀洁

中原工学院学报 2012年2期
关键词:波特率寄存器时钟

董秀洁,付 凯

(中原工学院,郑州450007)

基于FPGA的UART设计与实现

董秀洁,付 凯

(中原工学院,郑州450007)

提出了一种基于FPGA的UART的实现方法.利用有限状态机和硬件描述语言VHDL实现了通用异步收发器UART IP核的设计,给出了用VHDL实现UART的数学模型,并进行了仿真分析.结果表明,各项通信指标均满足要求,并可提高系统的可靠性和稳定性.

有限状态机;硬件描述语言;通用异步收发器;FPGA

通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)是一种能够支持近距离和远距离传输的异步串行接口.由于异步串行通信接口具有传输线少、成本低、可靠性高、实现简单等优点,广泛地应用于PC和外设数据间的交换[1].在当今流行的嵌入式微处理器芯片的设计中,异步串行通信接口已成为不可缺少的一部分.本文采用硬件描述语言VHDL,设计了一个具有UART功能的模块,将UART的功能集成到FPGA芯片内部,解决了传统芯片的缺点,提高了FPGA系统的集成度,使FPGA系统有强大的现场可编程能力,也使系统更加稳定而可靠[2-3].

1 URAT工作原理

UART的一帧数据由起始位、数据位、奇偶校验位和停止位组成[4].UART的数据帧格式如图1所示.

图1 UART的数据帧格式

收发双方通信时,首先在数据帧中设置起始位和停止位,在一个有效数据信息正式发送前,发送器先发送一个起始位,然后开始发送有效字符位,在有效字符位发送结束时再发送一个停止位.这样,由起始位到停止位构成一帧.这种通信方式又称为起止式异步通信方式.

每一帧的信息在传送之前,传输线处于逻辑高电平状态.在传送一个字符信息的时候,首先发送起始位逻辑,一般为低电平;紧随其后发送的是5到8位的信息位,先传送低位后传送高位;发送完字符的最高位之后,是可选择的奇偶校验位(有奇校验、偶校验或无校验可供选择);奇偶校验位后是标志着一帧字符结束的停止位,为高电平.在传送数据时,数据的帧与帧之间如果有间隙,就要在停止位之后附加空闲位(用逻辑l来表示),当然空闲位也可没有,这时的传送数据效率是最高的.图1中,起始位:l位,为逻辑0;数据位:5~8位,为逻辑1或者0;奇偶校验位:1位,为逻辑l或者0;停止位:l位、1.5位或2位,为逻辑1;空闲位:不限.

在数据接收过程中,接收器要首先检验起始位.在检验起始位后,触发接收过程,UART控制器会重置波特率发生器和移位寄存器,以准备接收数据.其后,串行总线的输入数据将不断被移位寄存器读取,并且保存在其UART的寄存器内.接收完成之后,UART控制器会在输出结果之前对已经接收的数据进行奇偶校验.最后,UART控制器准备下一次的数据接收,并重置控制器内的信号检测器.

数据发送的过程由加载和发送组成.加载就是UART控制器按照串行发送的顺序将起始位、数据位、奇偶校验位和停止位加载到移位寄存器内,这个过程的时钟为系统时钟,其对于串行发送的数据的传输速度来说非常快.加载之后,UART控制器会再次重置波特率发生器,并且将移位寄存器设置在波特率模式下,于是移位寄存器便在波特率时钟的驱动下将加载的数据发送出去.

2 UART设计

2.1 UART系统组成

UART系统主要由波特率发生模块、接收模块和发送模块3部分组成,如图2所示.

图2 UART整体结构图

(1)波特率发生模块.波特率发生模块可根据电路的晶振频率以及需要的接收时钟、发送时钟频率计算出分频数[5].针对发送和接收对时钟的不同要求,给发送模块和接收模块提供不同的时钟频率.当UART在发送数据时,只需要按照一定的速率将数据串行地发送就可以了,因此,在实际设计中,UART通信时需要的时钟频率应采用16倍于波特率的接收时钟频率[6].该模块可以看作一个可控分频器,提供了300、2 400、9 600、115 200四种常用的波特率.

(2)串口接收模块.接收模块是整个UART的设计的重点,其主要功能是检测数据帧的起始位,然后对接收的数据进行串行到并行的转换,并将接收好的数据储存在寄存器内等待PC机处理.接收器的接受时钟与每个接收字符同步是接收功能实现的关键,但是串行数据帧与数据接收时钟是异步的,所以必须有效地控制采集通信线路上的电平信号的时机,以保证异步通信的双方准确无误地交换信息.接收模块流程图如图3所示.

图3 接收模块流程图

其中,parityerr是奇偶校验是否有错的标志,framingerr表示一帧的数据格式是否有错,rxrdy表示数据接收完毕.

(3)串口发送模块.发送模块的主要功能为从CPU接收需要发送的并行数据,将并行数据转换为串行数据,并且按照规定数据格式及波特率,在发送模块时钟mclkx16下,从端口data_in输入.发送模块包括发送缓冲寄存器(THR)和发送移位寄存器(TSR),这是2个8位的寄存器.发送模块流程图如图4所示.

2.2 系统顶层设计

利用有限状态机和VHDL语言设计UART IP核文件,编译综合后的顶层设计如图5所示.

图4 发送模块流程图

3 仿真结果与分析

3.1 发送模块仿真与分析

图6所示为发送模块仿真图.

从图6可以清晰地看出,当reset复位信号处于低电平的时候,CPU发送的数据为“00110011”.当发送标志txrdy处于工作状态时,由起始位开始发送,然后信息数据位由低位到高位逐位发送,最后发送的是奇偶校验位和停止位.tx的输出波形为:起始位“0”,数据位“1”“1”“0”“0”“1”“1”“0”“0”,奇偶校验位(设置为奇校验)“1”,停止位“1”.

3.2 接收模块仿真与分析

图7所示为接收模块仿真图.

从图7可以看出,测试的串行数据为“01010011”,系统复位之后,判断为起始位0之后逐位由低到高接收,接收到的数据即rx的输出波形是:起始位“0”,数据位“1”“1”“0”“0”“1”“0”“1”“0”,奇偶校验位“1”,停止位“1”.rxrdy表示数据接收完毕.

3.3 硬件测试

采用QuartusⅡ开发软件对系统设计进行综合、硬件优化、适配、编程,并下载至Altera公司的CycloneⅡEP2C35484C8 FPGA芯片,然后进行硬件测试.结果显示,该设计实现了通用异步收发器(UART)的功能,满足其各项通信指标要求,且工作可靠.

4 结 语

本文介绍了一种利用FPGA实现UART功能的方法,运用VHDL语言设计通用异步收发器的IP核电路,通过QuartusII软件进行时序仿真和硬件测试,各项通信指标均满足要求.

[1]潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2006.

[2]姜雪松,刘东升.硬件描述语言VHDL教程[M].西安:西安交通大学出版社,2004.

[3]周金福.VHDL与EDA技术入门速成[M].北京:人民邮电出版社,2009.

[4]牛涛,吴斌,焦风川.基于FPGA的 UART电路设计[J].电子测量技术,2006,29(3):73-74.

[5]贾子申,李淑清,王冠攀.基于FPGA的 UART控制器设计[J].电子测量技术,2008,31(3):82-83.

[6]何慧珠,秦丽,张会新.基于FPGA的 UART IP核设计与实现[J].微计算信息,2008,24(1):223-224.

Design and Implementation of UART Based on FPGA

DONG Xiu-jie,FU Kai
(Zhongyuan Univerisity of Technology,Zhengzhou 450007,China)

This paper uses finite state machine and the hardware description language(VHDL)to achieve Universal Asynchronous Receiver Transmitter UART IP core design,proposes an FPGA-based implementation of the UART,specific description of the sending and receiving modules of the design method.The mathematical model of UART by VHDL,each module flowchart,simulation results are given.The results show that the UART functionality in the FPGA chip,makes the whole system more flexible,compact,reducing the board area,improve system reliability and stability.

finite state machine;VHDL;UART;FPGA

TN402

A

10.3969/j.issn.1671-6906.2012.02.015

1671-6906(2012)02-0066-04

2011-09-15

董秀洁(1957-),女,山东潍坊人,教授.

猜你喜欢

波特率寄存器时钟
UART 波特率检测电路的FPGA 设计算法与实现
别样的“时钟”
古代的时钟
CAN 总线波特率自适应程序设计
Lite寄存器模型的设计与实现
二进制翻译中动静结合的寄存器分配优化方法
浅谈西门子S7—400与S7—200的通讯实现方法
移位寄存器及算术运算应用
波特率自适应的CAN驱动在嵌入式Linux下的实现①
有趣的时钟