基于基于FPGA通用异步收发器通用异步收发器UART设计设计
摘要摘要
通用异步收发器(UART)是一种能同时支持近距离和远距离传输的异步串行接口,具有传输速率较高、传输距离长、抗干扰性能好、电路结构简单以及节省布线资源等优点。然
而,随着社会的发展,信息传输容量越来越大,传统的 UART 成为信息传输中的瓶颈。因此,提升 UART 的传输速率具有重大的意义。FPGA 芯片拥有数量众多的 LE(逻辑单
元),再加上数量众多的布线资源,使它具有非常强的灵活性。因此,使用 FPGA 实现的 UART 在传输速率使用灵活性以及性价比方面具有很大的优势。
本文对 UART 芯片采用 FPGA 自顶向下的方法进行设计,所设计的 UART 模块主要包括三大模块,分别是 UART 接收模块,UART 发送模块和 OLED 显示模块。其中, UART 模块
按照传统的 UART 协议进行设计,其波特率为9600 baud/s,且波特率可调。另外,为了验证 UART 的正确性,利用串口调试助手,双方之间按照 UART 通信协议进行通信,并利用
OLED 进行发送接收数据及波特率显示。在具体的设计过程中,将结合 FPGA 的最新技术并利用 Quartus II 11.0,Modelsim 等 EDA 软件对各个模块进行综合优化、功能仿真及下载
实现。验证结果表明, UART 模块和串口调试助手之间能正常进行通信,OLED 模块可正常显示发送和接收数据以及波特率。
关键词关键词 UART;;FPGA;;OLED;自顶向下;;自顶向下;RS232
第一章第一章 绪绪 论论
1.1 本课题的应用背景及研究的意义本课题的应用背景及研究的意义
UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是一种能同时支持近距离和远距离传输的异步串行接口,是计算机中最普遍通用的一部分,被广泛应用于
微机和外设的数据交换,例如和鼠标、调制解调器、打印机之间以及微机与微机之间的串行数据传输[1]。因为异步串行通信接口具有传输线少、成本低、 可靠性高、实现简单等优
点。因此,在 PC 和外设之间的串行通信中得到了广泛的应用[2-3]。与此同时,异步串行通信接口广泛应用在当今的嵌入式微处理芯片的设计中,另外,UART 总线标准广泛应用在
工控领域及家用电器领域。
现场可编程门阵列(Field-Programmable Gate Array,FPGA)诞生于上个世纪 90 年代,经过几十年的飞快发展,显然已成为近几年来电子通信行业的一个热门名词,有取代专用
集成电路的趋势[4-6]。一般的 FPGA 芯片是基于 4-LUT 的 SRAM 结 构,带有丰富的 D 触发器和布线资源,除此之外,具有功能丰富、操作灵活的 Quartus II 软件等,这些特点促使
了 FPGA 的飞速发展,使其具有先天的灵活性以及高的性能与价格比[6]。FPGA 可广泛应用于协议易于改变的通信领域、集成电路制造及验证领域、仪器领域甚至是家用电器等领
域,促进了这些领域的快速发展。
目前市场上国外的中高端 FPGA 芯片,不仅拥有传统 FPGA 芯片的查找表+触发器+布线资源结构,还加入了一定数量的锁相环路(PLL/DLL)、数字信号处理器 (DSP)核、ARM
核等等,甚至还加入了高速串行总线收发器模块,这些额外的模 块为 FPGA 在高性能通信系统中的应用提供了现实的、廉价的解决方案,也为高性能、小体积、低功耗的航空航天设
备,个人便携数字多媒体设备提供了可能。
虽然目前市场上主流嵌入式 CPU 片上都包含 1 或 2 个 UART 控制器,但是对于低端嵌入式控制器,尤其是 8 位甚至是 4 位机,鉴于成本的考虑,往往不带有 UART 控制器,而且有
时候嵌入式 CPU 本身的 UART 也不够用,而市场上往往又没有这样的 UART 芯片,让 IC 公司定制的话,成本往往很高。
因此,一种比较流行的方法是用硬件描述语言(HDL)对 UART 控制器电路进行建模、编译、综合、前后仿真、布局布线后,最后在 FPGA 芯片上实现。优点有 很多:1) 便于日后
对控制器的少许电路进行修改,而不必像定制芯片那样进行很大幅度的包括布局、版图等等的修改;2) 设计过程中的很多关键而复杂繁琐的步骤, 由 EDA 工具(如 Altera 的
Quartus Ⅱ,Xilinx 的 ISE 等等),为设计人员节省很多时间而又提升了设计准确度;3) 相对于定制芯片来说,大幅度节约制造成本。
1.2 本课题研究现状本课题研究现状
1.2.1 UART 芯片研究现状芯片研究现状
一般情况下,UART 芯片主要集成在主板上,比较常见的 UART 有 National Semiconductor Inc 生产的 INS 8250 系列(8250、16450 等)和 Zilog Inc 生产的 Z80SIO[7]。由于数据
在计算机的内部采用的是并行传输方式,因此不能直接将并行数据发送到Modem。在进行数据传输之前必须经过UART的转换才能进行异步传输。 就目前的发展来看,随着集成电路
的飞速发展,UART 产品已标准化,并且已经集成到了更大的电路中,但一些寄存器定义、接口等仍与 INS 8250 兼容[7]。
但是,有些速度比较慢的 UART 芯片,它很难实现一些应用所需求的高速的数据传输[8],虽然有些比较先进的 UART 芯片,例如 16550、16750 等,能达到高速通信的要求,但难
免会存在一些问题,比如电路比较复杂、引脚较多、和其他器件的接口太复杂、成本比较高等,进而降低了系统的可靠性以及稳定性。随着 FPGA 技 术的发展,设计者常常使用
FPGA 来实现 UART 接口,这样不仅电路简单,而且具有可移植性,能增加系统的稳定性和可靠性。
1.2.2 FPGA 器件研究现状器件研究现状
在 80 年代,Xilinx 公司提出了一种半定制器件,即 FPGA(Field Programmable Gate Array),它以 PAL、GAL、EPLD、CPLD 等可编程通用器件为基础,并经历了一系列的发
展,是一种半定制的通用可编程器件[9-12]。它的到来,一方面优化了 ASIC 电路中的不足,另一方面也解决了之前的可编程通用器件的逻辑门数目比较少的问 题[13]。设计者可以根
据项目目标需求,通过对 FPGA 器件进行编程设计以及进行相应配置来完成所需实现的逻辑功能。
在很久以前,FPGA 只是用作 ASIC 设计,或者是被认为是 ASIC 设计的验证平台。但是,目前,随着 FPGA 技术的不断发展和创新,越来越多的设计者看到了基于 FPGA 设计的众
多优点,因此越来越喜欢使用它来设计产品。基于 FPGA 的可编程设计在通信、航天和医疗电子等领域得到了广泛的应用[14]。随着 FPGA 芯片飞速的发展,它会具有越来越丰富的
资源[15-17],可以用它来实现越来越多的电路功能。 与此同时,它又具有其他器件所没有的特点。为此,FPGA 在数字系统设计中的地位越来越重要。使用 FPGA 来实现电路设
计,不仅电路会比较简单,所占用的逻辑资源也会减少[18],能满足设计需求。
世界上目前制造 FPGA 芯片并且提供 EDA 软件(综合、仿真、IDE)以及技术性服务的厂商主要有:Altera、Xilinx、Latice、Mentor Graphics、Synopsys 等等,其中以 Altera、
Xinlinx 的全系列 FPGA 以及 CPLD 芯片配套的集成开发环境(IDE)以及 Mentor Graphics 的 Modelsim 很受工程师的欢迎。
1.3 本课题主要研究内容本课题主要研究内容
本课题研究的是基于 FPGA 的通用异步收发器设计,主要包含 UART 模块和PC串口调试助手部分。UART 模块分 UART 发送模块和 UART 接收模块。UART 模块选择 Altera 公司的
Cyclone IV EP4CE6E22C8 芯片,并采用 Altera 公司的 Quartus II 11.0 IDE 进行综合设计,采用软件自带仿真工具进行仿真,硬件描述语言采用 Verilog HDL。另外,为了 UART 模
块逻辑的正确性,采用PC串口调试助手对其进行设计验证。根据 FPGA 的逻辑功能, UART 模块与串口调试助手之间进行互相发送数据,并在 OLED 屏幕显示收发数据及波特率,
从而完成对 UART 的校验。
第二章第二章 基于基于 FPGA 的的 UART 总体设计总体设计
2.1 UART 相关知识相关知识
2.1.1 异步串行通信基本概念异步串行通信基本概念
串行通信的通信方式是将传输的数据按照顺序一位一位地进行传送[8]。它具有传送距离长、可靠性高、需要的数据线少等特点,因此外设和计算机之间的通信广泛用串行通信[8]。串
行通信的数据传输方式包括单工方式,半双工方式和全双工方式。
(1) 单工方式 单工方式最大的特点是只允许按一个固定的方向进行数据传送。这种通信方式的前提是已经规定了一端为发送方,另一端为接收方,并且传输方向不可以改变。比如常
见的遥控、遥测等采用的单工通信方式。
(2) 半双工方式 这种通信方式下 A 和 B 都具有发送和接收的功能,但是只有一条通信线。因此,在特定的时间只能一方发送,另一方接收。或者一方为接收端, 另一方为发送端。在
此种通信方式下不允许双方同时发送或者同时接收。例如日常生活中常用的对讲机。
(3) 全双工方式 全双工通信方式具有 2 条独立的通信线路[19],一条为 txd 用来发送,一条为 rxd 用来接收。因此解决了单工或半双工带来的双方不能同时发送和接收的缺点。但是,
为了保证全双工通信,双方的串行接口必须具备一套完全独立 的发送器和接收器。
在串口通信中,异步通信方式是以字符为单位进行传送的,传送的字符之间的间隔是没有规律的,这样可能使接收设备不能正确接收数据,因为每接收完一个字符之后都不能确切的
判断下一个将被接收的字符将从何时开始[7]。因此就需要在每个字符的开始和结束处各加一个比特位[20],用来表示一个字符的开始以及结束。这些额外的位叫做起始位和停止位,
为了判断传输的正确性,通常会加上一个奇偶校验位。
2.1.2 UART 通信基础通信基础
UART 是一种在通信领域、计算机领域、工控领域及家用电器领域中广泛使用的一种接口设备[21]。它的工作方式为:1) 采用全双工通信方式,允许控制器同时进 行数据的发送与接
收。其中 TXD 信号线为数据发送信号线,即控制器由此信号线向外发送数据,RXD 信号线为数据接收信号线,即控制器由此信号线从外部接收数据。 2) 采用异步通信方式,即收发
器双方没有统一的同步时钟线或在接收器方没有采用时钟提取电路,它的信号同步方式是靠信号帧的首尾定界符,其中电路空闲状态为高电平,当电路状态由高电平转变为低电平且
保持一定的时间后,则认定为起始信号,接下来开始传输数据及校验位。而当电路的状态变为高电平且保持一定的时间后,则认定为终止电平,数据传输结束。3) 采用串行通信方
式,发送数据之前,控 制器把来自 CPU 的并行数据转换成串行数据,接收数据之后,控制器把串行数据转 换成并行数据[21]。因此,UART 接口具有较高的数据传输速率、传输距
离长、抗干 扰性能好、电路结构简单以及节省布线资源等优点。
UART 要想实现全双工异步串行通信[22],3 个主要部分是必不可少的:控制电路部分、发送电路部分和接收电路部分。其中,控制电路部分主要负责产生接收或发送的时钟以及产生
一些和 CPU 进行通信的控制信号[23];发送电路部分包括发送缓冲 器和发送移位寄存器;接收电路部分包括接收缓冲器和接收移位寄存器。在实际的工程实现中,发送和接收缓冲
器通常有两种实现方法,即:寄存器组法和 FIFO 法。 寄存器组法简单方便,但是其缓存容量有限,因此它会限制 UART 的波特率;FIFO 法有较高的存储深度,可方便实现高波特
率的 UART,但是其电路实现较复杂,但可以使用现成的 FIFO IP Core,实际的 UART 芯片,也几乎均使用 FIFO 作为缓冲区。 鉴于本设计的复杂性,本设计在 UART 模块采用
8bit 寄存器组法来实现缓冲区。其内部结构如图 2-1 所示。