随着计算机技术的发展和广泛应用,尤其是在工业控制领域的应用越来越广泛,计算机通信显的尤为重要。串行通信虽然使设备之间的连线大为减少,但随之带来串/并转换和位计数等问题,这使串行通信技术比并行通信技术更为复杂。串/并转换可用软件实现,也可用硬件实现。用软件实现串行传送大多采用循环移位指令将一个字节由高位到低位(或低位到高位)一位一位依次传送,这种方法虽然简单但速度慢,而且大量占用CPU的时间,影响系统的性能。更为方便的实现方法是用硬件,目前微处理器串行接口常用的LSI 芯片是UART(通用异步收发器)、USART(通用同步异步收发器)和ACIA(异步通信接口适配器)等。不论是哪一种芯片,它们的一种基本功能是实现串/并转换。正是这些串行接口芯片弥补了串行通信较为复杂这一缺陷。本文应用EDA(电子设计自动化)技术,基于FPGA(现场可编程门阵列)/CPLD(复杂可编程逻辑器件)设计与实现UART。
1 总体设计
整个设计包括两部分:基于FPGA的UART的设计和基于VB6.0的上位机程序设计。UART的设计采用模块化的设计思想,可分为3个模块:FPGA数据发送模块、FPGA波特率发生器控制模块及数据接收模块。上位机程序采用VB 6.0的Mscomm控件,可分为画面设计和功能设计两部分。串口采用标准的RS-232协议,主要参数选择为:波特率9 600 bit/s,8位有效位,无奇偶校验位,1位停止位。
2 UART的结构和帧格式
UART主要包括接收器和发送器。从异步接收输入信号SIN接收到的异步信号通过接收器完成串行/并行的转换,形成异步数据帧;发送器将CPU发出的8位数据进行并行/串行转换,从SOUT发送出去。功能包括微处理器接口、TBR(发送缓冲器)、TSR(发送移位寄存器)、帧产生、并转串、RBR(接收缓冲器)、RSR(接收移位寄存器)、帧产生、串转并。UART的结构如图1所示。
3 UART的设计与实现
UART是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。串行外设使用RS-232-C异步串行接口,一般采用专用集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时不需要使用完整的UART的功能和这些辅助功能,或者使用了FPGA/CPLD,那么就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。
下面分别设计UART的3个模块(发送器、接收器和波特率产生器),并给出其仿真结果。
3.1 发送器设计
UART串行发送器模块框图如图2所示。DIN为8位数据,其余为1位。
发送器每隔16个时钟周期输出1位,顺序遵循1位起始位、8位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。引入发送字符长度和发送次序计数器no_bits_sent,实现的部分VHDL程序如下:
UART串行接收器模块框图如图4所示。DOUT为8位数据,其余为1位。接收器包含一个8位RBR和RSR。RBR的状态可以通过引脚DATA_READY米表示。当RBR中的数据有效时,DATA_READY变为高电平,向CPU表明可以取同数据。
接受器功能仿真结果图略。串行输入RXD为0010101101,每一位占16个时钟周期,一旦检测到输入RXD为0,计数器开始计数,开始接收数据,接收完毕,标志位变为高电平。仿真结果证明了接收模块的正确性。
3.3 波特率发生器的设计
UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。根据给定的晶振时钟和要求的波特率算出波特率分频数。实现的部分VHDL程序如下:
4 上位机程序设计
本文使用VB 6.0进行上位机程序的设计,实现PC与FPGA的串行通信。下面是1个上位机收发测试通信程序的设计过程,通过该程序可以与FPGA进行串行通信。波特率默认值是“9600,N,8,1”,其意为所使用的通信端口是以9 600 bit/s的速度传输,不作字符校验,每次的数据是8位,而停止位是1位。波特率(单位为bit/s)可为110、300、600、1200、2400、9 600、14 400、19 200、28 800。校验位为:E偶校验,N无校验,O奇校验,S空白。正确的数据位值有:4、5、6、7、8(默认值)。正确的停止位值有:1(默认值)、1.5、2。
将UART的程序编译、仿真后,下载到FPGA的EPlK30TC144-3芯片上。引入20 MHz的晶振频率;发送使能端和复位端分别接一个开关;状态输出标志TRE和DATA-READTY分别接一个二极管,指示状态;设置波特率为“9 800,N,8,1”。串行数据帧的格式为:起始位0,8位数据位,无校验位,1位停止位。将UART的串行发送、接收端口分别与计算机的RS-232的串行接收、发送端口连接,以便与PC机进行串行通信;并行输入DIN接入并行输出DOUT;连好线后,执行发送测试程序。
5 结束语
在实现FPGA与PC的串行通信中,将程序下载到芯片中验证设计的正确性,目前还没有更好的工具可以在下载后实时地对FPGA的工作情况和数据进行分析。通过串行通信,可以向FPGA发控制命令让其执行相应的操作,同时把需要的数据通过串口发到PC上进行相应的数据处理和分析,以此来判断FPGA是否按设计要求工作。本文以UART为重点讨论了FP-GA与上位机串行通信的实现方法。采用语言VB实现了上位机与FPGA的通信。