基于有限状态机实现全双工可编程UART
收稿日期 :2006 - 05 - 09
作者简介 :曹会华(1977 - ) ,女 ,湖南人 ,硕士研究生 ,主要研究方向
为 SoC 和 IP 核设计 ;贺占庄 ,硕士生导师 ,研究员 ,主要研究方向为
计算机系统结构、SoC 和 IP 核设计。
基于有限状态机实现全双工可编程 UART
曹会华 ,贺占庄
(西安微电子技术研究所 ,陕西 西安 710065)
摘 要 :异步协议是广泛应用于数据链路层的串行通信协议 ,文中基于该协议用 VHDL 设计了全双工可编程 UART( Uni2
versal Asynchronous Receiver Transmitter ,通用异步收发器) 。重点讨论了使用 FSM(有限状态机) 技术进行接收器和发送器
两大核心模块的设计实现 ,以及接收器能够正常工作的关键技术 ———倍频采样技术 ;此外本设计在采样的同时实现串并
转换 ,它比传统的方法能少一个周期的时钟消耗。设计的 UART 在 Quartus II 4. 0 中通过了全部功能仿真。
关键词 :有限状态机 ;VHDL ;UART ;异步通信
中图分类号 : TN492 文献标识码 :A 文章编号 :1673 - 629X(2007) 02 - 0053 - 03
Full Duplex and Programmable UART Based on FSM Methodology
CAO Hui2hua , HE Zhan2zhuang
(Xi’an Institute of Microelectronics Technology , Xi’an 710065 ,China)
Abstract :Asynchronous protocol is widely used in serial communication of data link layer. A full duplex and programmable UART con2
taining asynchronous protocol is designed with VHDL in this paper. Mainly discuss the design and implementation of the transmitter and
receiver of UART with FSM , and the sample technique with double frequency. It is the key technique which makes the receiver work ef2
ficiently and correctly. The conversion from serial to parallel data is implemented at the same time with sampling , and thus compared with
the traditional method a clock cycle is saved in design. The functions of UART are simulated in Quartus II 4. 0 successfully.
Key words :FSM ;VHDL ;UART ;asynchronous communication
0 引 言
随着 VLSI 技术的发展和电路复杂性的迅速提
高 ,数字系统的设计方法发生了很大的变化 , EDA 技
术得到了飞速的发展。目前 ,基于 EDA 技术的芯片设
计正在成为数字系统设计的主流 ,其中利用硬件描述
语言进行可编程 ASIC 设计是 EDA 技术的一个重要应
用。基于 HDL 的系统设计采用自顶向下的设计方法 ,
在更抽象的层次上把握并描述了系统的功能特性及电
路结构 ,具有设计周期短、设计成本低、易于修改、不受
工艺限制等特点。随着电路规模和复杂度的进一步增
加 ,硬件描述语言愈显其优越性。
众所周知 ,任何数字系统都可以分为相互作用的
控制单元 (control unit) 和数据通道 ( data path) 两部
分[1 ,2] 。数据通道通常由组合逻辑构成 ,而控制单元
通常由时序逻辑构成 ,任何时序电路都可以用有限状
态机( Finite State Machine ,FSM) 来实现。FSM 是一种
应用于时序逻辑电路设计中的建模技术 ,它在对时序
要求较高的系统(比如数字控制) 设计中非常有用。数
字系统控制部分的每一个控制态可以看作一种状态 ,
与每一控制相关的转换条件指定了状态的下一个状态
和输出。根据有限状态机的输出与当前状态和当前输
入的关系 ,可以将有限状态机分成 Moore 型有限状态
机和 Mealy 型有限状态机两种。Moore FSM 的输出只
与有限状态机的当前状态有关 ,与输入信号的当前值
无关。与 Moore 机不同 ,Mealy FSM 的输出同时与当
前状态和输入信号的当前值有关。但不管哪一种
FSM ,都可以很容易地用 VHDL 实现并在现有的 EDA
环境下综合出来。
文中采用自顶向下[3] 的设计方法 , 设计 了 该
UART ,探讨了利用 VHDL 描述可编程 ASIC 的方法 ,
通过分析 UART 的功能 ,提出利用有限状态自动机来
描述 UART 核心控制逻辑的方法。
1 UART的设计
UART(通用异步接受发送器) 是目前广泛使用的
一种通用串行数据接口[4] ,其应用范围遍及计算机外
第 17 卷 第 2 期
2007 年 2 月 计 算 机 技 术 与 发 展
COMPU TER TECHNOLOGY AND DEVELOPMENT Vol. 17 No. 2
Feb. 2007
设、工业控制等场合。UART 的作用主要有两方面 ,它
可以接收外围设备的串行数据输入 ,并转换成计算机
内部所需的并行数据 ,也可以把计算机内部的并行数
据转换成串行数据 ,并发送给外围设备。UART 主要
由波特率发生器、发送器、接收器、状态寄存器和系统
接口控制模块组成 ,发送器和接收器具有独立的 FIFO
缓冲。
UART 主要实现以下功能 :
(1) 将由计算机内部传送过来的并行数据转换为
用于输出的串行数据流 ;
(2) 将计算机外部传递来的串行数据转换为字节 ,
供计算机内部使用并行数据的器件使用。
(3) 在输出的串行数据流中自动加入启停标记和
奇偶校验位 ,并对从外部接收的数据流进行奇偶校验 ,
自动删除启停位 ;停止位可编程设置为 1 ,1. 5 或 2 个 ;
奇偶校验可设置为奇、偶校验或无校验。
(4) 提供和处理器间的通信信号 ,可以处理处理器
和串行通信设备间的同步管理问题。
1. 1 UART中实现的异步协议
UART 中实现的是数据链路层的异步协议。异步
协议也称起止式异步协议 ,其特点是通信双方以一个
字符(含特定附加位) 作为数据传输单位 ,且发送方传
送字符的间隔时间是不定的。在传输一个字符时总是
以起始位(‘0’) 开始 ,以停止位 (‘1’) 结束。异步通信
协议的实现相对简单 ,适用于对通信速度要求不太高
的场合。其格式如图 1 所示[5] 。
图 1 异步通信协议传输格式
1. 2 发送器设计
发送器主要由波特率发生器、计数器、异步 FIFO、
发送器状态机、奇偶产生器和停止位控制器几个部分
组成 ,其结构框图如图 2 所示(粗箭头表示并行数据通
路 ;细箭头表示控制信号线或串行数据
通路) 。
波特率发生器主要是一个分频器 ,
用于产生发送时钟 ,可以根据需要设置
为 1X ,16X ,32X 或 64X 系统时钟 (clk) 。
计数器负责发送器各部分所需的计数。
奇偶生成器负责根据设置生成奇校验或偶校验。停止
位控制器根据设置产生 1 个、1. 5 个或 2 个停止位 ,在
波特率设置为 1X clk 时不能发送 1. 5 个停止位 ,此设
计中默认为 1 个停止位。发送器状态机主要负责协调
各个模块之间的时序关系 ,其状态图如图 3 所示。
图 2 发送器结构框图
图 3 发送器状态图
发送器状态机工作流程 :发送器使能 ,经复位后处
于 0 状态 ,即空闲(Sidle) 状态 ;如果异步 FIFO 非空 ,则
发送一个开始位(Sstart 状态) ,同时 FIFO 中的一个数
据暂存入发送器的一个内部寄存器中 ;开始位发送完
后 ,处于(Sdata) 状态 ,该状态由 8 个状态组成 ,分别表
示由低位到高位依次发送内部寄存器中的 8 位数据的
状态 ; 如果设置了校验 , 那么状态机进入校验产生
(Sparity) 状态 ,然后发送校验位 ,如果无校验 ,则直接
发送停止位 , ( Sstop) 状态 ;停止
位发送完毕 ,表明一帧数据发送
完毕 ,如果数据没有发送完 ,则
状态机返回 Sstart 状态 ,准备发
送第二个字符 , 否则返回空闲
(Sidle) 状态 ,直到发送器禁止。
1. 3 接收器设计
发送器主要由计数器、接收
状态机、帧监测器、采样及串并转换器、奇偶校验器、同
步 FIFO 和状态寄存器几个部分组成 ,其结构框图如
图 4 所示(粗箭头表示并行数据通路 ;细箭头表示控制
信号线或串行数据通路) 。
图 4 接收器结构框图
下面分别介绍帧监测器、采样及串次转换器和接
·45· 计算机技术与发展 第 17 卷
收状态机的设计 ,奇偶校验器与发送器中的奇偶产生
器的设计是一样的 ,限于篇幅 ,这里不再叙述。
1. 3. 1 帧监测器及数据采样的设计
帧监测器的功能在于采样 RxD ,从而决定一帧数
据的起始位。通过检测起始位的下降沿来决定一个字
符(即一帧) 的开始 ,并以此前沿作为采样后面各位的
定时基准。大部分接收器采用比位周期更短周期的时
钟来控制采样时间 ,本设计使用的采样频率为位频率
的 clk - freq(它可以通过编程设为 16 、32 或 64 ,其值越
大则采样分辨率越高) 倍的接收端时钟 ,接收端能在一
个位周期的 1/ clk - freq 时间内决定字符的开始 ,并按
如下步骤进行后面各位的采样。
1) 当检测到起始位下降前沿时将计数器清零 ;
2) clk - freq 倍频时钟的每个脉冲使计数器加 1 ;
3) 当计数器第一次到达 clk - freq/ 2 时 ,表示已到
达起始位的中间。若此时采样值为 0 ,那么表示一开
始检测到的下降沿不是真正的起始位的前沿 ,而可能
只是一次干扰 ,此次检测应作废 ;若为 0 ,则把计数器
清零 ,同时置帧开始信号为‘1’;至此完成了一个起始
位监测。帧开始位被置‘1’后 ,启动采样及串并转换器
(采样频率和帧监测器使用的采样频率一致) ,它对
RxD 输入进行采样 ,并把采样值暂存入内部的寄存
器 ,一个字符采样完成后 ,也就完成了串行输入的并行
转换 ,从而不需要额外的时钟周期专门处理串并转换。
具体过程如下 :
(1) 计数器每次到达值 clk - freq 时 ,就采样 RxD
输入波形 ,将采样到的数值暂存起来 ,并将计数器清
零 ,采样重复到最后的终止位被采样 ;
(2) 如果终止位采样正确(为 1) ,那么字符就被接
收 ,并暂存起来 ;若应该为终止位处采样到逻辑值 0 ,
则表明同步或传输有问题 ,该次采样的字符作废 ,不被
接收。
1. 3. 2 接收器状态机的设计
接收器状态机负责接收器中各模块之间的时序交
互关系 ,它有四个状态 (0 ,1 ,2 和 3 分别表示空闲、起
始位监测、采样和校验状态) ,其状态转换关系如图 5
所示。
系统复位后 ,状态机处于空闲状态。当设置了接
收器使能信号后 ,表示状态机开始工作 ,接收器启动信
号监测器 ,开始监测起始位 ;监测到起始位后(即产生
了 data - st 脉冲) ,接收器进入接收状态 ,用系统时钟对
RxD 的输入信号进行采样 ,并将采样到的数据暂存入
串并转换器的内部缓存中。
如果接收到的数据不含校验位 ,则串并转换器内
部的接收数据计数器计到 8 后清零 , 并检测缓存的第
8 位是否为‘1’,若是则表明数据可以接收 ,否则表明
传输中有错误 ,此时输出相应的接收状态信号 ;如果接
收到的数据含有校验位 ,则串并转换器内部的接收数
据计数器计到 9 后清零 ,并检测缓存的第 9 位是否为
‘1’,若是则表明数据可以送到奇偶校验器中进行校
验 ,否则表明传输中有错误 ;同时输出相应的接收状态
信号。
如果接收完毕 ,状态机就回到空闲状态 ,否则继续
监测起始位进行下一帧数据的接收。
图 5 异步接收器状态图
2 结束语
文中分析了 UART 的功能要求 ,并采用有限状态
自动机设计其控制逻辑 ,实现了一个全双工可编程的
异步串行通讯接口 ,该接口可以作为一个独立模块嵌
入到其他电路中组成应用系统。另外在波特率发生器
中带有时钟选择功能 ,可以为发送器和接收器选择不
同的比特率时钟 ,这使得 UART 中的接收器和发送器
可以工作在不同的比特率时钟下 , 因此增加了该
UART 的使用灵活性。
有限状态机作为自动机理论的一个重要组成部
分 ,不仅是重要的软件基础理论 ,而且在硬件设计中也
发挥着重要的作用 ,特别是在利用 EDA 技术进行可编
程 ASIC 设计时 ,如果使用得当 ,可以提高设计效率 ,
加快设计流程。
参考文献 :
[1] Pedroni V A. Circuit Design with VHDL [ M]. [ s. l. ] : MIT
Press , 2005.
[2] 赵俊超. 集成电路设计 VHDL 教程[ M]. 北京 :北京希望电
子出版社 ,2002.
[3] 王志华 ,邓仰东. 数字集成系统的结构化设计与高层次综
合[ M]. 北京 :清华大学出版社 ,2001.
[4] 李广军 ,王厚军. 实用接口技术[ M]. 成都 :电子科技大学
出版社 ,1997.
[5] 高传善 ,张世永 ,曲 海 ,等. 计算机网络教程[ M]. 上海 :
复旦大学出版社 ,1997.
·55·第 2 期 曹会华等 :基于有限状态机实现全双工可编程 UART
基于有限状态机实现全双工可编程UART.pdf