关于幼儿的教育
基于FPGA的UART接口芯片的设计与实现
发布者:武恒州,钟兆根,于文龙 发布时间:2007-9-19 0:13:00 内容摘要
随着计算机在工业控制领域的应用越来越普遍,计算机通信显得尤为重要,而串行通信以其远距离、低成本的优点得到了广泛地应用。UART(Universal Asynchronous Receiver/Transmitter)是用于控制CPU与串行设备通信的芯片,本文应用Maxplus2软件,运用VHDL硬件描述语言设计与实现了基于FPGA的UART。
正文
文字大小:大 中小
1.UART的功能介绍
UART一般包括一个发送器和一个接收器。发送器将CPU传送过来的并行数据转换为输出的串行数据流,并在其中加入奇偶校验位和起停标志位;接收器将接收到的串行数据转换为并行数据,并进行奇偶校验,提取数据位供CPU读取。常见的UART主要有INS8250、PC16450和PC16550,其中16550带有16字节的FIFO。本文设计的UART不带FIFO,但实现了上述所有功能。
2.UART设计
本文的UART设计采用模块化的设计思想,共分为三个模块:数据发送模块、数据接收模块和波特率发生模块,如图1所示。串口采用标准的RS232协议,主要参数选择为:波特率9600bps,8位数据位,奇偶校验位,一位停止位。
图1 UART总体结构框图
2.1.发送器设计
发送器主要由以下三个模块组成:THR(发送保持寄存器)、帧产生器、TSR(发送移位寄存器),如图2所示。复位时,引脚LOAD为低电平,TXDONE(移位结束标志)为高电平。外部ENTX信号(发送使能)的高电平产生一个LD脉冲信号,该信号将数据载入THR,然后通过帧产生器模块对数据进行奇偶校验并加入一位起始位‘0’、校验位以及一位停止位‘1’。当外部ENTX信号为‘1’时,LOAD置为高电平,将数据载入TSR,然后LOAD置‘0’,此时数据开始移位输出,其频率为内部时钟频率的16分之一。如果THR中内容不空,当一个串行数据帧发送结束后将紧接着发送下一个数据帧。这种自动的流程使得数据帧以背靠背地形式发送,提高了数据传输的带宽。发送器每隔16个时钟周期输出一位,按照一位起始位、8位数据位、奇偶校验位、一位停止位的顺序发送。
图2 发送器结构框图
2.2.接收器设计
接收器主要由以下四个模块组成:RBR(接收缓存器),RSR(接收移位寄存器),字头检测器,奇偶校验器,如图3所示。字头检测器侦测到低电平时即认为它是起始位,这时启动一个内部计数器,当计数器记到一个数据宽度的一半时(若时钟脉冲频率为波特率的16倍,则计数器记到8)收到的仍为低电平,则确认它为起始位而不是噪声信号。在正确的接收到起始位后就开始进行移位寄存。需要注意的是这里的移位时钟不是一直存在的,这个时钟在接收到起始位的中间开始产生,到停止位的中间结束,这个功能通过设置一个内部CLKEN(时钟使能信号)来实现。将移位出来的数据奇偶校验之后送至RBR暂存等待CPU读取。 图3 接收器结构框图
2.3.波特率发生器设计
UART的接收和发送是按照相同的波特率进行收发的,波特率可以通过CPU总线接口进行设置。UART输出的每一个数据宽度都是波特率发生器输出的时钟周期的16倍,即假设当前按照9600bps进行收发,那么波特率发生器输出的时钟频率应为16×9600Hz。
这里用1.8432MHz的外部时钟,通过CPU写不同的数值到波特率保持寄存器,然后用计数器的方式既可以生成各种波特率,这个值的计算公式为:1843200/(16×9600),可得该值为12。
3.结果的验证仿真
该UART设计采用VHDL语言在Maxplus2平台下编写,编译仿真之后通过ISE下载到电路板上验证,硬件验证FPGA芯片采用EPM7128-84。通过FPGA外接的串口与计算机串口进行通信,符合串行通信要求。
4.结束语
本文介绍了UART在FPGA上的实现,并通过实际电路验证了设计的功能,使用FPGA不仅可以方便的用串口协议和PC机进行通信,而且扩展了板级系统的接口功能。应用在FPGA内部,可以很大程度的减少电路板的使用面积,并提高系统的稳定性和可编程性。