Issuu on Google+

Scientific Journal of Control Engineering June 2013, Volume 3 Issue 3, PP.236-241

The Extension and Implementation of MultiUART Based on FPGA Ming Lu1#, Yuansheng Liu2, Jishi Shu3 1. College of Applied Science and Technology, Beijing Union University, Beijing 102200, China 2. Beijing Key Laboratory of Information Service Engineering, Beijing Union University, Beijing 100101, China 3. College of Information College, Beijing Union University, Beijing 100101, China #

Email: yykjtluming@buu.edu.cn

Abstract UART (Universal Asynchronous Receiver Transmitter) is broadly used in embedded communication system because of its programmable ability and high stability in working. A UART communication interface system is presented in this paper used Verilog HDL language. In this system, baud rate of each UART is configured through the external bus, and parity bit is added in UART communication protocol in order to reduce the error rate. The whole design is simulated and verified by Modelsim, and synthesized and Placement and routing by Quartus. The FPGA-based experimental results show that the proposed system is a good candidate with accuracy and reliability. Keywords: UART; State Machine; FPGA; Counter

基于 FPGA 的多 UART 扩展与实现* 路铭 1,刘元盛 2,舒济世 3 1. 北京联合大学 应用科技学院,北京 102200 2. 北京联合大学 北京市信息服务工程重点实验室,北京 100101 3. 北京联合大学 信息学院,北京 100101 摘

要:通用异步接收发送器 UART(Universal Asynchronous Receiver Transmitter),具有可编程性和高度稳定性,在嵌入

式通信系统中得到了广泛的应用。本文采用硬件描述语言(HDL)设计了一个简单的多 UART 通信接口系统,此系统可以通 过外部总线配置每个 UART 的波特率,同时为了降低通信中的误码率,在 UART 的通信协议上加入了奇偶校验位。整个 设计在 Modelsim 软件下仿真验证通过,然后利用 Quartus II 软件进行综合以及布局布线,并最终下载到 FPGA(Field Programmable Gate Array)测试系统中验证了本系统的正确性和可靠性。 关键词:UART;状态机;FPGA;计数器

引言 在嵌入式系统、工业控制和计算机外设等领域中,通用异步收发器支持串行链路上的全双工通信,以及拥 有资源简单、操作方便、抗干扰强、易于实现等优点成为最为普及应用的一种通用串行通信协议。在实际电路 开发中,往往只需要 UART 的简单通信协议,但在数量上可能需要多个 UART 接口。常用的扩展方式有三种, ①时分复用,多个设备在不同时间占用串行总线;②软件编程实现,通过对处理器的通用输入输出接口编程实 现,UART 通信时序;③专用芯片扩展,8250 和 8251 等芯片进行总线扩展。三种方法有的占用处理器的大量 处理时间,有的增加外围电路板设计的复杂度,而且不易进行硬件系统升级。现在,随着半导体和 EDA 技术 的发展,FPGA 这种可编程逻辑芯片,以其资源丰富、工作效率高和设计灵活等特点,常用于数据采集、并行 *

基金资助:受北京市属高等学校高层次人才引进与培养计划项目支持资助(IDHT201304074) 。 - 236 http://www.sj-ce.org/


算法实现以及接口电路的转换设计中。把 FPGA 的特点应用在 UART 的扩展上,不仅可以减少处理器的处理时 间,而且可以根据需要扩展多个 UART 接口,从而保证了硬件以后升级的灵活性。本文在实际应用中以三个 UART 接口为实例进行说明。

1

系统总体介绍 本系统是以 FPGA 为控制核心,通过编写硬件描述语言在一个 FPGA 芯片上实现三个 UART 接口。由于此

系统是为了嵌入式开发扩展接口而用,因此留有并行外部总线接口。 tx1

rx1

tx2

rx2

tx3

rx3

clk

FPGA UART1 配置

UART2 配置

UART1

UART3 配置

UART2

UART3 时钟和寄存器管理 器

uart1_en

clk50MHz

uart2_en

clk50MHz

uart3_en

clk50MHz

UART1 配置 UART2 配置 UART3 配置 clk50MHz con_en

clk50MHz uart1_en 外部总线控制器

uart2_en

re

we

tx_finish

rx_error

rx_finish

addr[1:0]

data_o[7:0]

data_i[7:0]

uart3_en con_en

图 1 FPGA 内部功能框图及引出管脚

根据系统功能,可以将整个系统在 FPGA 内部划分为三大部分进行编程实现,内部功能框图及引出管脚如 图 1 所示,管脚分类及功能见表 1。第一部分:时钟管理和寄存器模块,此模块有两个作用,其一是实现倍频 功能,为系统内部提供 50MHz 的工作时钟,其二是接收外部总线发来的配置信息,用于指定三个 UART 通信 端口的波特率,以及设定 UART 通信是否含有奇偶校验位。第二个部分:总线控制器模块,用于外部处理器与 FPGA 进行数据通信。第三部分:UART 通信端口模块,此模块根据波特率寄存器和奇偶校验寄存器信息,用 状态机产生 UART 通信的发送和接收时序。 表 1 FPGA 引出管脚表 类别 时钟

名称 clk

位宽 1bit

功能 输入,系统外部时钟进入管脚,频率为 10MHz。

data_o[7:0]

8bit

输出,外部数据总线,用于输出对应接收寄存器的内容。

数据总线

data_i[7:0]

8bit

输入,外部数据总线,用于输出对应接收寄存器的内容。

地址总线

addr[1:0]

2bit

输入,外部地址总线,用于选通系统模式,00:配置模式;01:UART1 工作模式;10:UART2 工作模式;11:UART3 工作模式。

we

1bit

输入,写使能。

re

1bit

输入,读使能。

rx_finish

1bit

输出,对应选通 UART 的接收完成标志位。

tx_finish

1bit

输出,对应选通 UART 的发送完成标志位。

rx_error

1bit

输出,对应选通 UART 的接收错误标志位。

控制线

状态端口

- 237 http://www.sj-ce.org/


表 1 FPGA 引出管脚表(续) 类别

名称 rx1

位宽 1bit

功能 输入,UART1 的接收端口。

tx1

1bit

输出,UART1 的发送端口。

rx2

1bit

输入,UART2 的接收端口。

tx2

1bit

输出,UART2 的发送端口。

rx3

1bit

输入,UART3 的接收端口。

tx3

1bit

输出,UART3 的发送端口。

通信端口

2

软件设计介绍 采用自顶向下的设计方法来进行模块化设计,根据系统功能,总体结构划分为三个编程模块:时钟和寄存

器管理模块、总线控制器模块和 UART 模块。其中 UART 模块又分为两个小模块:接收模块和发送模块。整 个系统都采用硬件描述语言 verilog 进行并行程序化设计,通过状态机实现 UART 通信协议。

2.1 总线控制器模块 总线控制器主要是协调 FPGA 与外部处理器通信的接口模块。通过此模块,外部处理器可以选择与之通信 的内部模块。当地址线(addr 2bit)为两个低电平(“00”)时,选择的内部通信模块为时钟管理和寄存器模块。外部 处理器可通过 we 或 re 信号线的变化(高电平到低电平),用数据总线写入或读取内部寄存器(波特率寄存器 和奇偶校验寄存器)信息。当地址线为“01”、“10”或者“11”的时候,外部处理器也是同样使用 we 或 re 来控制 对应 UART 端口的发送和接收信息,同时还会把对应 UART 通信端口的标志信息(发送完成、接收完成和接 收错误)送入状态端口。

2.2 时钟管理和寄存器模块 从系统稳定性考虑,在 FPGA 片外加入低频时钟,通过 PLL 倍频技术,让片外的低频时钟在内部变成高频 时钟,这种方法在集成电路设计中应用最为广泛。正是由于这个需求,在 FPGA 芯片内部一般都集成了 PLL 模块。此系统通过外部接入一个 10MHz 的有源晶振,通过 FPGA 内部的 PLL 模块,把外部 10MHz 时钟倍频 成 50MHz,然后在 FPGA 内部分别传输给其它时序模块。 由于 UART 为异步收发,所以在通信协议中,接收和发送不必使用统一参考时钟。收发双方取得同步的方 法是采用固定的串行数据格式和一致的波特率。 在通信格式上,即数据的每一帧包括 1 位起始位,8 位数据位,1 位奇偶校验位(可选),1 位停止位,其 通信格式如图 2 所示。奇偶校验位存在三种工作模式:奇校验、偶校验和不存在。具体到每一个 UART 端口是 采用哪种模式,由外部处理器通过总线来配置奇偶校验寄存器决定的,此寄存器位宽为 6bit,每个 UART 占用 2bit 位,“00”代表不存在奇偶校验位,“01”代表奇校验,“10” 代表偶校验,系统上电默认为“00”工作模式。 起始位

bit0 LSB

bit1

bit2

bit3

bit4

bit5

bit6

bit7 MSB

奇偶位

结束位

空闲位

图 2 UART 通信格式

在工程应用中常使用一些固定的波特率数值,例如 9600bps 等。本设计采用对 50MHz 时钟进行计数来寻 找每帧数据中每一位的中心点或结束点,从而实现收发数据波特率的匹配,其计算公式为 f50MHz/ BAUD,例如: UART 的波特率为 9600bps,那么每一位的结束点为 5208 个时钟,而中心点为结束点的一半,2604 个时钟。为 了工程上使用,根据上述原理,分别计算出四种常见波特率(9600bps、19200bps、38400bps 和 115200bps)的 中心点计数值和结束点计数值, 如表 2 所示。 外部处理器只要通过总线配置波特率寄存器就可以决定每个 UART - 238 http://www.sj-ce.org/


的波特率数值,此寄存器位宽为 6bit,每个 UART 占用 2bit 位,“00”代表 9600bps、“01”代表 19200bps、“10” 代表 38400bps、“11”代表 115200bps,系统上电默认三个 UART 的波特率都为 9600bps。 表 2 四种波特率中心点和结束点计数表

9600bps

中心点 计数值 2604

结束点 计数值 5208

19200bps

1302

2604

38400bps

651

1302

115200bps

217

434

波特率

在外部处理器配置内部寄存器的时候,首先要把地址线置为“00”,选择内部通信模块为时钟管理和寄存器 模块,然后把配置信息送入数据总线(8bit),由最高 2bit 位决定信息进入到哪个寄存器,“00”为奇偶校验寄存器, “11”为波特率寄存器,最后通过 we 信号的变化(由高到低)把数据总线其余 6bit 位信息锁存进寄存器中。

2.3 UART 模块 对于接收模块来说,接收的每一帧数据都是从通信协议中每一位的中心点取值,图 3 为 UART 接收数据的 工作示意图。由于 UART 通信在空闲时为高电平,所以对于接收而言首先要找到通信协议的起始位(低电平), 当 rx 线上检测到低电平后计数器开始从零计数到波特率寄存器指定的中心点计数值,如果在这个时间内 rx 线 一直为低电平,那么表明真实数据到来,否则认为是通信中的噪声信号。如果为真实信号,计数器清零继续计 数,并以波特率寄存器指定的结束点计数值作为计数器的上限,每计数满一回,都从 rx 线上锁存一位信息,并 清零计数器。直到计数满 8 回后,得到 8bit 数据信息。接下来再根据奇偶校验寄存器的信息来决定是否进行奇 偶校验位的判断。如果奇偶校验寄存器决定数据格式不包含奇偶校验位,那么计数器继续从零计数到上限值, 然后判断 rx 线上是否为高电平,如果为高电平,说明通信中收到结束位,数据正确;如果为低电平,通信也结 束,数据不正确。如果数据格式包含奇偶校验位,那么需要在寻找结束位之前再让计数器从零计数到上限值, 然后从 rx 线上锁存一位信息,再根据之前得到的 8bit 数据信息进行奇偶校验。如果满足奇偶校验位条件,说明 数据正确,开始寻找通信协议的结束位;如果不满足奇偶校验位条件,找到 rx 线为高电平后接收端完成一次接 收操作,标示为错误信息。当一帧正确的数据接收完,外部处理器可以通过 re 信号由高到低来控制 FPGA 把接 收到的正确数据送出到数据总线上。 起始位

bit0 LSB

bit1

bit2

bit3

bit4

bit5

bit6

bit7 MSB

奇偶位

结束位

空闲位

图 3 UART 接收示意图

对于发送模块来说,需要根据外部处理器的命令来进行串行发送。首先外部处理器把需要发送的数据信息 送入数据总线,然后 we 由高电平变化到低电平,发送模块把数据总线的信息锁存进入发送寄存器中,同时开 启发送模块。整个发送时序由奇偶校验寄存器和波特率寄存器决定。奇偶校验寄存器决定数据的宽度,10 位还 是 11 位,也就是说通信协议中是否含有奇偶校验位,如果有还需要确定类型(奇校验、偶校验)。而波特率 寄存器决定通信协议中每一位信息在 tx 线上保持的时间,换句话说,就是每一位信息保持的时间为计数器从零 计数到波特率寄存器指定的结束点计数值。图 4 为整个 UART 发送示意图。 起始位

bit0 LSB

bit1

bit2

bit3

bit4

bit5

图 4 UART 发送数据示意图 - 239 http://www.sj-ce.org/

bit6

bit7 MSB

奇偶位

结束位

空闲位


3

测试系统介绍 软件仿真测试。根据系统设计要求,用硬件描述语言对 we、re、data_in 和 rx 线产生激励时序来模拟实际

电路的行为,在 Modelsim 下仿真结果如图 5 所示,系统时钟为 50MHz,地址线分别选择了 UART 的三个通信 端口进行了数据的发送和接收。从仿真结果可以看出,本设计实现了外部处理器通过总线扩展三个 UART 的功 能,并且每一个 UART 端口都能够正确可靠地发送和接收数据。

图 5 软件仿真结果

另外,根据本系统的要求,设计了一个实际应用测试电路板,其硬件测试平台架构如图 6 所示。在发送测 试中,通过单片机的编程可以把拨码开关的信息发送到指定的端口上,然后 PC 电脑用超级终端就可接收单片 机发来的数据信息。在接收测试中,用 PC 电脑给指定的 UART 端口发送信息,在单片机端可通过 LED 灯来 显示八位数据信息。根据硬件测试要求分别通过单片机控制选通 UART 的三个端口进行实际硬件测试,图 7 为 COM5、COM6 和 COM7 三个端口的通信结果。 tx1

LED显示电路

232-tx RS-232接口 rx1

单片机最小系统

外部总线

232-rx

tx2

FPGA 三个UART扩展系统 EP2C5Q208C8

232-tx RS-232接口

rx2

rx3 按键和拨码开关电路

PC电脑 232-rx

232-rx RS-232接口

tx3

图 6 硬件测试系统架构图

图 7 硬件测试结果 - 240 http://www.sj-ce.org/

232-tx


4

结论 用硬件描述语言在 FPGA 中设计实现多 UART 的扩展,可以减少系统硬件面积,降低系统功耗,提高系统

的稳定性和灵活性。本文以 FPGA 扩展三个 UART 通信端口为例,详细说明了系统的设计原理和运行流程,并 且对设计进行了软件和硬件验证从而保证了系统的稳定性和可行性。由于采用硬件软件化的设计方法,所以为 进一步的开发和扩展提供了灵活性。而且本设计全部采用可综合性硬件描述语言进行编程设计,所以本设计还 可以作为 SoC 设计中的一个 IP 软核。

REFERENCES [1]

Lu Junwen, Zheng Lubin, Yu Zhongqing. The Extension of Multi-Uart Based on IP Core and Implementation in FPGA[J]. COMPUTER TECHNOLOGY AND DEVELOPMENT, 2010, 20(6): 188-191

[2]

Hu Zhe, ZhangJun, Luo Xiling. A Novel Design of Efficient Multi-channel UART Controller Based on FPGA[J]. CHINESE JOURNAL OF AERONAUTICS, 2007, 20(1): 66-74

[3]

He Chunzhi, Xia Yinshui, Wang Lunyao. Design and FPGA implementation of a UART IP core[J]. Journal of Zhejiang University(Science Edition), 2012, 39(5): 535-540

[4]

Yu Qing, Jiang Wengang. Design and implementation of UART on FPGA[J]. ELECTRONIC MEASUREMENT TECHNOLOGY, 2012, 35(11): 76-79

[5]

Li Qiuju. Design of Universal Asynchronous Receiver and Transmitter[D].Xi’an: Xidian University, 2007

[6]

Han Ming. The Design of Universal Asynchronous Receiver Transmitter Based on FPGA[D]. Dalian: Dalian Maritime University, 2009

[7]

Duan Surong, Zhuang Shengxian. Design and realization of inner couplers FIFO full duplex UART[J]. Communication Technology, 2010, 43(2): 46-50

[8]

Niu Fengju, Zhu Mingcheng. IP technologies used in the process of the chip design[J]. Semiconductor Technology, 2001, 26(10): 21-32

【作者简介】 1

路铭(1981-),男,民族,硕士,助

2

刘元盛(1973-)男,汉族,硕士,副教授,智能汽车控制

教,嵌入式系统与 SoC 设计,2001-2005

技术。1992-1996 年于北京交通大学就读本科;2001-2004 年

年于中国地质大学就读本科;2007-2010

于北京交通大学攻读研究生学位。

年于北京联合大学攻读研究生学位。

Email: yuansheng@buu.edu.cn

Email: yykjtluming@buu.edu.cn

3

舒济世(1990-),男,汉族,硕士在读,学生,嵌入式系

统设计,2008-2012 年与北京联合大学就读本科;2012 至今 为北京联合大学在读研究生。Email: shujishi321@163.com

- 241 http://www.sj-ce.org/


The extension and implementation of multi uart based on fpga