APP下载

UART自适应波特率发生器的设计与仿真

2024-04-14肖文桂

现代信息科技 2024年1期

DOI:10.19850/j.cnki.2096-4706.2024.01.012

收稿日期:2023-05-31

摘  要:为提升各种微处理器与嵌入式系统的通信波特率,文章对传统波特率自适应检测技术加以改进,基于FPGA和Verilog HDL硬件描述语言设计一种可灵活高效配置波特率参数的UART模块。首先改进传统的通过发送固定数据检测波特率的技术,利用特征值匹配法结合查表比对法设计自适应波特率发生器,实现自动高效检测波特率,完成相应参数配置。然后采用Modelsim对各模块功能进行系统级仿真。仿真结果表明,该波特率发生器能够自动建立串口通信链路,数据传输稳定可靠,提高了检测效率,减少了系统资源开销。

关键词:UART;自适应波特率发生器;Modelsim;特征值匹配

中图分类号:TN83  文献标识码:A  文章编号:2096-4706(2024)01-0059-04

Design and Simulation of UART Adaptive Baud Rate Generator

XIAO Wengui

(Beijing University of Technology, Beijing  100124, China)

Abstract: To improve the communication baud rate between various microprocessors and embedded systems, this paper improves the traditional baud rate adaptive detection technology and designs a UART module based on FPGA and Verilog HDL hardware description language that can flexibly and efficiently configure baud rate parameters. Firstly, the traditional technique of detecting baud rate by sending fixed data is improved, and an adaptive baud rate generator is designed using feature value matching method combined with table lookup comparison method to achieve automatic and efficient detection of baud rate and complete corresponding parameter configuration. Then use Modelsim to perform system level simulations on the functions of each module. The simulation results show that the baud rate generator can automatically establish a serial communication link, ensure stable and reliable data transmission, improve detection efficiency, and reduce system resource overhead.

Keywords: UART; adaptive Baud rate generator; Modelsim; eigenvalue matching

0  引  言

通用异步收发器(Universal Asynchronous Receiver/

Transmitter, UART)因其通信协议简单、线路布局方便等特点,被广泛应用于各种微处理器中。但由于受到通信双方距离远近、周围环境干扰的大小以及系统中不同设备所需的通信速率不同等因素的影响,为保证通信质量,需要在点对点系统中实现实时更改系统数据传输速率的功能[1]。因此,系统接收机需实时更改通信波特率以保证数据的正常接收。

为此,本文创新性地提出了一种基于FPGA的UART自适应波特率发生器的设计方案,采用特征值匹配法结合查表对比法,通过发送特征数据0x00来记录不同波特率对应的特征参数,与特征参数参考表对比后得出正确的波特率,从而实现根据需求实时调整系统传输速率的功能。本文设计并实现了一种波特率自适应检测的UART模块,介绍UART模块整体设计原理,将其分为波特率发生器模块、串口接收模块以及串口发送模块。使用Modelsim进行系统级时序仿真,来验证UART串口通信功能。本方案可在一定程度上提高波特率检测效率,节约系统资源开销,提高UART自适应能力。

1  UART系统设计方案

1.1  UART设计原理

为实现UART波特率自动检测功能,本文利用Verilog HDL硬件描述语言进行系统设计。整体设计从功能可划分为3个模块单元:波特率发生器、串口接收模块、串口发送模块。UART系统设计原理如图1所示[2]。

1.2  波特率发生器

传统的波特率自动检测方法主要有两种:最小位宽法与固定数据传输法。最小位宽法是通过不断地检测迭代出低电平(高电平)的最小脉冲宽度,与标准波特率的参考数据位宽进行比较,从而得出正确的波特率值;固定数据传输法是通过主机发送特定的配置数据来获取当前波特率的信息。最小位宽法的缺点是波特率的识别需要不断地检测数据,得出最小數据位宽,十分依赖于发送数据的内容,握手时间慢、检测效率低[3]。考虑到实时通信系统中需要根据具体的需求快速检测并配置不同的波特率,因此,为了提高检测效率、节约系统时间成本,本设计采用固定数据传输的方法并对此做出一定的改进。

为了对传统的固定数据传输法进行改进,提高波特率检测效率,本文采用特征值匹配法结合查表对比法的方式,利用特征数据0x00来判断具体的波特率值,如图2所示。

配置新的波特率参数时,发送机需要发送特征数据0x00,波特率发生器利用边沿检测电路捕获下降沿触发信号,通过时钟计数器测量低电平持续时间,将计数结果存放在cnt_low中;低电平计数结束后,cnt_low存放的是9位低电平持续时间(1位起始位,8位数据位)。为获取一位低电平数据位宽,计算cnt_low/9的值,与表1的标准波特率参考表对比,完成波特率的正确检测,并将新的波特率参数配置给串口接收模块与串口发送模块,完成数据收发[4]。

为消除边沿触发检测可能引发的亚稳态现象,采用两级D触发器进行边沿检测。采用50 MHz的系统时钟作为时钟激励,其频率远大于波特率。

波特率的理论计算公式为:

(1)

通过计算可知,通信速率采用9 600 bit/s时,时钟计数的时间测量误差比小于0.006 4%,因此,能保证很高的测量精度。

1.3  串口接收模块

串口接收模块需要接收到波特率发生器发送的正确通信波特率后才能正常工作。当接收到线路通信波特率后,通过边沿检测电路检测数据帧的起始位,以下降沿触发信号表示开始接收数据。利用计数器实现对每位数据的采集,结束后发送接收成功标识rx_done,并将接收成功的数据进行串并转换,发送给串口发送模块。为滤掉通信线上的噪声干扰,本文采用下降沿触发的方式来检测数据帧起始位[5]。同时为了提高串行通信对波特率误差的容忍范围,数据接收的采样波特率设定在1/2的分频因子位置,即在波特率信号周期中间处,其分频因子[6]计算公式为:

(2)

1.4  串口发送模块

串口发送模块由串口接收模块控制。当发送模块收到接收模块传入的数据后,将并行数据存放在数据寄存器中,并通过移位寄存器将并行数据转换为串行数据发送出去,由计数器cnt_tx控制状态的转移,即数据的发送。计数为1时,发送起始位;计数为2~9时,发送数据位;计数为10时,发送停止位。发送时钟根据波特率发生器接收到的波特率产生,与串口通信波特率相同[7]。

2  系统仿真验证分析

2.1  Modelsim简介

ModelSim是一种流行的数字电路模拟器,被广泛用于硬件设计和验证领域。支持多种硬件描述语言,包括Verilog和VHDL,并提供完整的仿真调试环境。主要功能包括功能仿真、波形查看、调试、代码覆盖率分析和性能分析。提供直观的GUI界面和命令行接口,用户可以方便地创建、编辑和运行仿真测试。在仿真过程中,用户可以查看仿真波形、分析信号时序和调试代码,以便更好地理解和验证电路功能[8]。此外,ModelSim还提供了一些高级功能,例如代码优化、时序分析和约束驱动测试。它还支持多种仿真引擎和仿真加速技术,包括单线程、多线程、多核和基于网格的分布式仿真。这些功能可以提高仿真效率和准确性,帮助用户更快地找到和修复电路中的错误。

2.2  UART功能仿真

基于Modelsim仿真平台进行串行通信波特率自适应的功能仿真,主要分为两个部分:波特率发生器的自适应检测、系统数据的收发。

2.2.1  波特率发生器的自适应检测

波特率发生器仿真如图3所示,仿真模拟主机波特率初始值设定为9 600 bit/s,特征数据为0x00,通信数据格式为1 bit起始位,8 bit数据位,1 bit停止位,无校验位。配置数据码为8b0101_0101。模拟主机改变后的数据发送波特率为19 200 bit/s,通过spec_bps记录主机波特率的数值,便于检测验证。

开始时主机波特率为9 600 bit/s,当数据0x55发送结束后,数据接收标识符rx_done产生高电平脉冲,bps_rxd进入高电平状态,检测状态标识state进入低电平状态,不进行波特率检测功能,维持一个计数周期。仿真模拟主机改变波特率为19 200 bit/s,首先发送特征数据0x00。边沿触发器bps_rxd_double检测到下降沿后产生正脉冲信号,state进入高电平状态,开始进行波特率自适应检测。利用低电平计数器cnt_low,记录特征数据低电平持续时间。完成计数后cnt_low计数大小为23 436,则cnt_low/9为2 604。通过查表得出新波特率spec_bps为19 200 bit/s。计算分频因子并产生数据接收时钟clk_rxd以及数据发送时钟clk_txd,完成波特率自适应检测。

2.2.2  系统数据的收发

如图4所示,仿真模拟主机以不同的波特率发送16进制数据0x55。首先设定主机数据发送波特率为9 600 bit/s,经波特率发生器检测后产生正确的数据接收时钟clk_rx与发送时钟clk_tx。接收模块实现数据串并转换后,接收到的并行数据data为0x55,将其传入发送模块。发送模块利用发送时钟clk_tx发送数据信号uart_txd到外部设备,完成后UART系统进入空闲状态,uart_rxd持续高电平,并维持一个计数周期。改变主机数据发送波特率为19 200 bit/s。首先发送特征数据0x00,经自动检测后产生正确的数据接收时钟和发送时钟,检测结束后设备进入空闲状态。当下降沿再次到来时,数据接收状态标识符state进入高电平状态,接收端口接收主机输入信号uart_rxd,利用2倍于19 200 bit/s的时钟频率clk_rx进行周期信号中间位置的数据采集,实现串并转换,最终完成数据的接收并产生接收完成信号rx_done。数据接收结束后state进入低电平状态,接收端口进入空闲状态。以19 200 bit/s接收完成后得到并行數据data为0x55;发送端对数据data进行并串转换,同时增加起始位与停止位,利用19 200 bit/s的时钟频率产生串行发送信号uart_txd,将数据发送到外部设备,完成系统数据收发。

3  潜在应用场景

随着物联网兴起,现代各种电子设备都需要进行不同程度上的通信。其中,车载电子设备、医疗设备、工业自动化等场景需要实时的通信速率来保证工作的正常运行。本文设计的UART自适应波特率发生器可使这些应用设备之间的通信更加可靠、高效。

3.1  车载电子设备

现代汽车中有许多电子设备需要进行实时通信。例如,车载导航系统中,GPS或北斗系统、主机、汽车显示屏等导航模块需要实时根据车辆驾驶情况以及路况做出相应提示,以满足驾驶员需求;车载诊断设备中,发送机控制模块、车身控制模块等车诊设备需要对路况和车身系统状况进行实时诊断与调试,以减少事故发生的概率;车载音响系统中,功放、主机、音响喇叭等,需要实时进行声音讯息传输,以方便驾驶员接收广播或播放音乐[9]。这些设备都需要满足不同设备在不同通信速率条件下能高效可靠地正常通信的需求。UART自适应波特率发生器能提高设备通信的灵活性、可靠性,帮助车载电子设备之间进行更加稳定和高效的通信。

3.2  医疗设备

在医疗方面,目前越来越多的医疗设备都需要与计算机或外部设备连接交互,传输医疗数据图像。比如心电图仪器,通常需要与计算机相连,将探测到的人体数据传输回主机并显示在屏幕上,便于医生进行病情诊断;又如血压计、血糖仪或医疗影响设备等,都需要将所测病理数据实时传输到外部设备,将人体生理指标可视化,为后续深入工作打下基础[10]。这些医疗设备都需要进行交互通信,而往往不同设备所需的传输波特率不同,使用UART波特率自适应发生器能在一定程度上提高设备之间传输效率与可靠性,提高医疗诊断的正确性、时效性。

3.3  工業自动化

UART自适应波特率发生器在工业自动化领域中也有着广泛的应用。以下是一些常见的应用场景——工业机器人:工业机器人通常需要与控制器进行通信,以接收控制指令并向控制器发送反馈信息;PLC控制系统:PLC控制系统通常需要与传感器、执行器等设备进行通信,以实现自动化控制;工业传感器:工业传感器通常需要将采集到的数据传输到控制器或其他设备上进行分析和处理;工业自动化监控系统:工业自动化监控系统中有多个设备需要进行通信,例如传感器、执行器、控制器等[11]。这些设备可能需要在不同的波特率下进行通信,使用自适应波特率发生器可以使它们之间的通信更加灵活和高效,提高各种工业设备之间通信的稳定性、灵活性和效率,帮助工业自动化设备更好地与其他设备进行协同工作,提高工业设备的性能和可靠性。同时,它也为工业自动化设备制造商提供了更加灵活和高效的设计方案,使得工业自动化设备的研发和生产更加简便和快速。

4  结  论

本文基于FPGA设计并实现了一种具有波特率自适应功能的UART通信模块,利用特征值匹配法结合查表法的方式设计了自适应波特率发生器,成功实现了不同通信波特率的自适应检测。利用Verilog HDL硬件描述语言实现该UART的硬件电路设计。基于Modelsim的仿真结果表明,对于不同波特率数据的传输,该方法能快速、正确、稳定地建立串行通信链路。整体设计具有很高的整体性和稳定性。

该方法改进了传统的波特率自适应检测技术,能够正确高效地实现波特率的自动检测,对异步串行通信的应用方法做了一定的补充。对于车载电子设备、医疗设备、工业自动化等物联网相关场景,提供了一种用于不同设备通信速率之间高效自动检测的方案,可减少系统功耗,节约系统资源,具有一定的现实意义。

参考文献:

[1] 孙夫文,郑采君,刘昕卓,等.基于FPGA串口波特率自适应功能的设计与实现 [J].电子设计工程,2019,27(9):69-73.

[2] 刘博.基于FPGA的UART模块设计与实现 [J].无线电工程,2018,48(5):433-438.

[3] 杨洋,和蕾,王旭,等.基于FPGA的UART串行通信参数自适应设计与实现 [J].电子设计工程,2021,29(16):21-25.

[4] 陈谦,马迅.波特率自适应串行通信方法研究 [J].中国集成电路,2019,28(4):61-65.

[5] 李盛杰.UART测试技术研究 [J].计算机与数字工程,2017,45(3):598-602.

[6] 丰淑凤,朱晓莹,王旭.基于FPGA的宽波特率误差容忍范围的UART设计 [J].信息技术与信息化,2021(9):169-171+176.

[7] 樊利军,田柏林.基于FPGA的UART自适应波特率发生器的实现 [J].北京工业职业技术学院学报,2016,15(1):29-32+56.

[8] 曾宪炼,马捷中,任向隆.基于VHDL的故障注入技术 [J].计算机工程,2010,36(11):244-246+249.

[9].谷彦庆.传感器在汽车电子控制系统中的应用 [J].汽车与新动力,2022,5(2):65-67.

[10] 张宏庆,贾利.基于人工智能与5G通信的医疗检测设备管理系统设计 [J].电子设计工程,2021,29(11):113-116+121.

[11] 陈泽群.工业自动化中物联网技术的应用 [J].现代工业经济和信息化,2023,13(3):61-63.

作者简介:肖文桂(2002.10—),男,汉族,广东湛

江人,本科,研究方向:UART、数字电路。