通用异步串行接口的 VHDL 实用化设计
杨晓斌,赵花荣,赵明生
摘 要:通用异步串行接口(Universal Asynchronous Receiver Transmitter,UART)
在通信、控制等领域得到了广泛应用。根据 UART 接口特点和应用需求,以提
高 VHDL 设计的稳定性和降低功耗为目标,本文讨论了 UART 接口中时钟域划
分、时钟分频、亚稳态、同步 FIFO 设计等问题和解决方案。
关键词:通用异步串行接口 VHDL 亚稳态 现场可编程逻辑阵列
Practical Design of UART based on VHDL
YANG Xiaobin, Zhao Huarong, Zhao Mingsheng
Abstract: UART is widely used, especially in communication and control system. In
this paper, considering characters of UART and requests of the real implements, some
questions and their solutions such as clock distribution, frequency divider,
metastability, Synchronous FIFO are discussed, aiming at improving the robustness
and reducing power consumption of the UART design based on VHDL.
Key Words: UART VHDL Metastability FPGA
1 引言
FPGA 从实现粘合逻辑逐步发展成为设计平台的核心,在电子、通信以及航
空航天等领域得到了广泛应用。本人最近实现的中频软件无线电硬件平台,就以
FPGA 为核心,实现上变频、下变频等中频数字信号处理,并且构成 A/D/A、DSP
和 ARM 模块之间的通信中心。这种以 FPGA 为核心的架构使得硬件平台结构灵
活,具有可重构性,为软件无线电的各种算法分配方案提供了有力支撑。
除了和 TMS320C6416 之间的数据流采用 EMIF 接口外,FPGA 的其它接口
均采用 UART。为了软件开发和移植的便利,UART 设计要做到兼容 ST16C550
的功能。稳定可靠则是作为软件无线电硬件平台关键接口的基本要求。考虑到嵌
入式系统的特点,在设计中应尽量降低功耗。本文围绕这些目标,介绍了在 UART
实用化设计中所遇到的一些重要问题、解决方案以及最终结果。
2 UART 及 ST16C550 概述
UART 是广泛使用的串行数据传输协议,它在收发分离的串行链路上进行全
双工异步通信。发送过程接收来自数据总线上的并行数据,按照低位序方式并串
转换,然后根据控制寄存器的设置生成串行数据流;相应的,接收过程把串行数
据流转换成并行数据,产生中断以及状态信息,并对数据传输过程中的异常进行
处理。
ST16C550 是广泛使用的一款 UART 接口芯片,是 NS16C550 的改进版本。
它收发均带有 16 字节的 FIFO,可以通过设定波特率设置寄存器来进行收发时钟
的分频控制,传输速率从 50bps 到 1.5Mbps。具体内容可参见数据手册
[1]
。
3 实用化设计的主要问题和解决方案
3.1 框架设计
根据 UART 的功能和数据流特点,系统划分为 5 个模块:时钟生成模块,
完成时钟分频和时钟分配;界面模块,完成 UART 其它模块和数据总线的交互;