基于FPGA的UART模块化设计

时间:2022-09-12 11:06:20

基于FPGA的UART模块化设计

摘要: UART因其可靠性高,传输距离远,线路简单而成为比较广泛的串行数据通信电路,而现在大部分集成电路通信用的UART芯片,存在成本高,电路复杂,移植性较差等缺点,本文提出了一种基于FPGA的嵌入式UART模块化设计方法,将UART模块集成到FPGA上,而这些模块功能全部基于verilogHDL硬件描述语言,并通过有限状态机来实现,增强了设计的灵活性,降低了成本,并可以作为一个IP核,移植到其它FPGA嵌入式系统中,可移植性增强。

Abstract: UART, because of its high reliability, long transmission distance and the simple line, is becoming more extensive serial data communication circuit. But nowmost 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 module based on FPGA. UART module integrated into the FPGA. While all functions of these modules are based on verilogHDL hardware description language, and realize through the finite state machine. This design enhanced flexibility and reduced costs, and can be used as an IP core that ported into other FPGA embedded systems, enhancingtheportability.

关键词: UART;FPGA;verilogHDL;有限状态机

Key words: UART;FPGA;verilogHDL;finite state machine

中图分类号:TP391 文献标识码:A文章编号:1006-4311(2010)19-0148-02

0引言

随着电子计算机技术,尤其是嵌入式技术的大力发展和广泛应用,UART(Universal Asynchronous Receive Transmitter)也得到了相当广泛的应用,它允许串行链路上进行全双工通信。一般使用通用的UART接口芯片,但这种芯片存在电路复杂,成本高,降低了系统的可靠性和稳定度,由于结构和功能的相对固定,因而我们不能根据自己的设计需要去进行剪裁和移植。而日益成熟的SOPC(System On Programmable Chip)技术要求将整个设计功能集成到一块或几块芯片中,本文通过对UART功能的分析,提出了在FPGA上集成UART功能模块,增强了设计的灵活性,简化了电路,并通过有限状态机来描述核心功能控制逻辑,从而提高了整个系统稳定性和可靠度。

1UART通信原理

UART是异步通信方式,最基本的UART通信只需要两条信号线(RXD,TXD)就可以完成数据的相互通信,接收和发送是全双工的,在接收端,串行的数字信号转化成并行的信号,才能进行处理数据,在发送端,并行的信号转化成串行信号才能被发送到另一个设备中使用。

UART帧格式(也就是发送数据的格式),是以一个起始位开始的,并以停止位结束。起始位后是数据位,可以是5、6、7、8位,再加一个奇偶校验位(可选),本设计没有设置奇偶校验位,最后是停止位(1位、1.5位或2位)。其帧格式如图1所示。当无数据发送或接收时,各引脚置高电平,以保证开始位来临之前为高电平。

2UART的FPGA实现

本设计中包括三个模块:波特率发生模块,接收器模块,发送器模块。

2.1 波特率发生模块波特率发生器实际上就是一个分频器,具体是通过一个计数器实现。本设计采用16倍频采样的方案,也就是采用16倍于波特率的时钟,即若系统波特率为9600,则波特率发生器的输出时钟为9600×16;因为本系统的外部晶振为50MHZ,所以分频器对晶振的分频数为326,每一计数周期周期使输出电平高、低变化,即可得到9600波特率对应的UART的时钟。图2为波特率发生器的仿真波形。

2.2 接收器模块接收模块从捕捉到数据串的第一个0开始工作,也就是验证起始位的到来,验证完后,开始接收8位数据,并进行串并转换,随后检测停止位,正确则输出。接收器状态转换如图3所示。

接收器状态机共包含四个状态:空闲状态(IDLE)、检测起始位(START)、数据采样(SHIFT)、停止位检测(STOP)。接收机复位进入IDLE状态,等待开始位到来,当RXD发生从1到0跳变,进入START状态检测到起始位,开始对采样时钟计数,当计数到8时,进入SHIFT状态。在SHIFT状态,开始数据采样,每16采样时钟采集一位串行数据,并进行串/并转换,当采样到有8位数据时,进入STOP状态。在STOP状态,检测停止位是否为1,如果为1则输出串/并转换的8位数据,如果是0,则不能输出,回到IDLE状态。由于UART的帧发送格式为,先发送低位,再发送高位,所以如果串行输入为10011000,则并行输出为00011001。

仿真结果如图4所示。

2.3 发送器模块发送器的功能实际上就是对并行数据的缓存,并进行并/串转换,然后将数据输出,功能原理和接收器相似。图5为发送器状态转换图。

发送器状态机包含的四个状态:STATE0:当UART复位进入此状态,输入使能,若检测到高电平,则进入STATE1状态。STATE1:发送起始位0。保持TX为低电平16个采样周期后,进入STATE2状态,否则保持本状态。STATE2:发送8位数据。每一位数据占用16个采样周期。发送完毕,进入STATE3状态。STATE3:检测并发送停止位。将TX置为高电平,保持16个采样周期。返回STATE0状态。

仿真结果如图6所示。

3实验结果

本设计使用Verilog语言,并在Alera的DE2-70平台上加以验证并通过串口调试助手证实数据能够正确收发。实验结果如图7。

4结束语

使用FPGA实现UART模块,使系统体积更小,降低了功耗,提高了稳定度。而对于收发的数据帧和波特率能较容易的改变,大大增加了系统设计的灵活性。另外,本设计还可以作为一个IP核,灵活的移植进其它FPGA嵌入式系统中,通用性增强。

参考文献:

[1]王伟.VerilogHDL程序设计与应用.北京 人民邮电出版社,2005.

[2]冼进.VerilogHDL 数字控制系统设计实例.北京:中国水利水电出版社,2007.

[3]杨宗国,李艳萍.基于FPGA的UART模块的设计.现代电子技术,2009,(2):19-22.

[4]杨夏,王平,张军.基于FPGA的简化UART电路设计.微计算机信息(嵌入式与SOC)2008,24:276-277、279.

[5]赵延,葛利嘉,双涛.基于FPGA的UART设计实现及其验证方法.现代电子技术,2008,17:162-164.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:浅谈煤的自燃倾向性 下一篇:自主学习研究综观