基于FPGA_CPLD的通用异步通信接口UART的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于FPG A/CP LD 的通用异步通信接口UART 的设计
The Design of UART (Universal Asynchronous Receiver Transmitter )based on FPG A/CP LD
姜 宁3 范多旺
JIANG Ning F AN Duo 2wang
摘 要
 UART (通用异步接收发送设备)是一种短距离串行传输接口。

在数字通信和控制系统中得到广泛应用。

FPG A/CP LD 是大规模集成电路技术发展的产物,是一种半定制的集成电路。

结合计算机软件技术(E DA
技术)可以快速、方便地构建数字系统。

本文介绍一种采用可编程逻辑器件FPG A/CP LD 实现UART 的方法,将UART 的核心功能集成到FPG A/CP LD 上,本设计包含UART 的发送模块、接收模块和波特率发生器,所有功能的实现全部采用VH D L 硬件描述语言来进行描述。

设计、综合、仿真在QUART USII 软件开发环境下实现。

关键词
 UART VH D L FPG A/CP LD 仿真
Abstract UART (Universal Asynchronous Receiver T ransmitter )is a short 2haul serial communication inter face which is applied widely in digital communication and control system.The result of LSI (Large Scale Integration )is FP 2G A/CP LD ,it is the attribute of semi 2custom Integrate Circuit ,combining E DA with FPG A/CP LD will construct the digi 2tal system quickly and expediently.This article introduces a method to design uart based on the programmable logic de 2vice FPG A/CP LD.The core function of UART is integrated in FPG A/CP LD.This design includes the T ransmitter Log 2ic 、the Receiver Logic and the Baudrate G enerator.All function are given by VH D L.The im plementation of design 、sim 2ulation 、synthesis is the s oftware of QUART USII.
K eyw ords UART VH D L FPG A/CP LD S imulation
3光电技术与智能控制教育部重点实验室兰州交通大学自动控制研究所 甘肃 兰州 730070
随着E DA 技术的发展,FPG A/CP LD 已经在许多方面得
到了广泛应用,而UART (Universal Asynchronous Receiver T rans 2
mitter 通用异步收发器)是广泛使用的串行数据传输协议。

UART 允许在串行链路上进行全双工的通信。

串行外设用到RS2322C 异步串行接口,一般采用专用集成电路即UART 实
现,常见的有芯片
8250、8251等,但这些芯片速度较慢,难以满足一些需要高速应用的场合,虽然新型的UART 如16550、
16750,可以满足高速的要求,但是所有的UART 芯片都存在
引脚较多、体积较大、与其它器件的接口较为复杂的缺点。

因此将需要的UART 功能集成到FPG A/CP LD 内部。

利用
VH D L 语言将UART 的核心功能集成,不仅解决传统芯片的
缺点,也使整个设计更加紧凑、稳定且可靠。

1 UART 的数据传输协议
UART 发送/接受数据的帧格式如图1所示。

包括线路
空闲状态(idle ,高电平)、起始位(start bit ,低电平)、5~8位数据位(data bits )、校验位(parity bit ,可选)和停止位(stop bit ,位数可为1、1.5、2位)。

这种格式是由起始位和停止位来实现字符的同步。

UART 内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数
(1,1.5,2)等设置。

总线由高到低跳变,宽度为一个波特率时间的负脉冲为开始位,然后是8bit 的数据位。

数据位后面是lbit 的地址信
息位。

如果此位是1,表示发送的字节是地址信息;如果此位是0,传输的是正常数据信息。

地址指示位后是串行数据的停止位。

图1 基本UART 的帧格式
2 整体与各部分功能详述
UART 处理的是并行数据转为串行信号和串行转为并行,
但并不是简单地转换。

分析UART 的结构,可以看出UART 主要由数据总线接口、控制逻辑和状态接口、波特率发生器、发送逻辑和接收逻辑等部分组成,各部分间关系如图2。

图2 UART 的结构框图
开发与应用
信息技术与信息化
86 2006年第1期
2.1 UART 发送模块
发送部分的用途是将准备输出的并行数据,按照图1的基本帧格式,转为txd 信号串行输出,这里的串行化时的时钟信号只要使用对应要求的波特率的本地时钟即可。

CPU 要写数据到保持寄存器(THR )时必须判断当前是否为可写的状态,很明显如果不判断此条件,发送的数据就会出错,当CPU 写入数据到THR 后,THR 的数据会传送到发送移位寄存器(TSR )并移位。

于是引进以下信号:
bigin1、begin2:引入两个附加移位,目的是为送出起始位、
停止位而加入串行长度;
txdone7、txdone8:分别表示7、8位的结束标志;T xdone <=txdone8when “8bit ”
else txdone7;
Paritycycle7、paritycycle8:分别表示7、8位下的校验位; Parity <=parity8 when
“8bit ” else parity7
;
Writerdy:为0时表示CPU 不能将数据写入THR ,为1时
可以写入。

这样就可以得到以下信息:在移位时钟的上升沿检测到
txdone 和writerdy 都为高电平时,进入LOAD 状态即将THR 的
数据LOAD 到TSR ,在下一个时钟就进入移位状态。

在移位中同时进行校验位的运算,在需要送出校验位的时候将运算好的校验位送出,txdone =1的时候将高电平送出,其它时候移位输出。

最后还有一个小程序,那就是写出writerdy 的状态,很明显没数据写入时为高,而当txdone 为低时为低,注意这里也必须同时同步。

图3给出了一个奇效验8bit 数据的发送时序图。

发送器
每隔16个C LK 16时钟周期输出1位,次序遵循1位起始位、8
位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。

CPU 何时可以往发送缓冲器tbr 写入数据,也就是说
CPU 要写数据到tbr 时必须判断当前是否可写,如果不判这
个条件,发送的数据会出错。

数据的发送是由微处理器控制,微处理器给出wen 信号,发送器根据此信号将并行数据
din[7..0]锁存进发送缓冲器tbr[7..0],并通过发送移位寄存
器tsr[7..0]发送串行数据至串行数据输出端dout 。

在数据发送过程中用输出信号tre 作为标志信号,当一帧数据发送完毕时,tre 信号为1,通知CPU 在下个时钟装入新数据。

发送器状态机如图3所示
图3 UART 发送状态机
发送模块仿真波形如图4所示。

图4 发送模块仿真波形图
2.2 UART 接收模块
UART 接收部分接收rxd 串行信号,并将其转化为并行数
据。

但串并转换的时钟同发送模块一样处理。

串行数据帧和接收时钟是异步的,发送来的数据由逻辑
1变为逻辑0可以视为一个数据帧的开始。

接收器先要捕捉
起始位,确定rxd 输入由1到0,逻辑0要8个C LK 16时钟周期,才是正常的起始位,然后在每隔16个C LK 16时钟周期采样接收数据,移位输入接收移位寄存器rsr ,最后输出数据
dout 。

还要输出一个数据接收标志信号标志数据接收完。

对于接收同样存在9、10、11位三种串行数据长度的问题,必须根据所设置的情况而将数据完整地取下来。

接收还
有一个特别的情况,那就是它的移位时钟不是一直存在的,这个时钟必须在接收到起始位的中间开始产生,到停止位的中间结束。

接收到停止位后,必须给出中断,并提供相应的校验出错、FRAME 错以及溢出等状态。

所以需引入hunt 和idle 两个信号,其中hunt 为高表示捕捉到起始位,idle 为高表示不在移位状态,利用这两个信号就
可以生成接收所需要的移位时钟。

还要将接收状态和标志表示出来。

溢出标志很简单,那就是在idle 从低变高,也就是说在接收到一个完整的串行序列后,去判一下当前的中断是否有效(高有效,数据没有被读走),如果为高那么溢出,否则没有。

在移位的时候,同时对接收的数据进行校验,这样
信息技术与信息化
开发与应用
2006年第1期87
就可以判断接收的数据是否有错,在接收完成时判一下当前的RX 是否为高电平就可以知道FRAME 是否有错,图5是一
个8bit 奇校验的接收时序图(假定接收正确,所以没有给出校验、溢出、帧出错信号)。

接收器的状态机如图5所示。

图5 UART 接收模块的状态机
接收模块仿真波形如图6所示。

2.3 波特率发生模块
从图1可以看出,U ART 的接收和发送是按照相同的波特率进行收发的(当然也可以实现成对的不同波特率进行收发)。

波特率是可以通过CP U 的总线接口设置的。

波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,送出异步的串行数据。

根据给定的晶振时钟和要求的波特率算出波特率分频数,即假定当前按照9600bps 进行收发,那么波特率发生器输出的时钟频率应为9600×16H z ,当然这也是可以改变的。

假定提供的时钟为1.8432MH z ,那么可以很简单地用
CPU 写入不同的数值到波特率保持寄存器,然后用计数器的
方式生成所需要的各种波特率,这个值的计算原则就是
1843200/(16*所期望的波特率),如果希望输出9600H z 的波特率,那么这个值就是1843200/(16×9600)=12(0CH )。

3 结束语
本设计完全采用VH D L 语言进行描述。

实现的UART 设置了时钟输入clk ,复位输入reset ,串行数据输入rxd ,读写信号输入rd 和wr 、片选输入cs 、传送数据位数选择输入a1和
a0、定时器初值输入count ,串行发送数据输入txd ,接收寄存
器状态输出rd full 、发送寄存器状态输出tdem pty 以及数据总线data 。

并详细讨论了采用VH D L 对异步通信接口UART 的设计流程,对设计进了功能仿真、综合,以及静态时序分析和
时序仿真,最后在A LTERA 公司生产的ACEX 1K 系列的
EP1K 30T C14423芯片上下载,完成了在FAG A 上实现UART 的
全过程。

下载的结果验证UART 设计的逻辑功能以及时序关系均符合设计要求。

图6 接受模块仿真波形图
波特率发生器仿真波形如图7所示
图7 波特率发生器仿真波形图
参考文献:
[1] 林容益.cpu/s oc 及外围电路应用设计(基于fpga/
cpld ).[M].北京:北京航空航天大学出版社,2004[2] 潘松,黄继业.eda 技术实用教程[M].北京:科学出版
社,2002.10.
[3] 姚燕南,薛钧义.微型计算机原理.[M](第3版).西
安.西安电子科技大学,1994
[4] A LTER A.a8251program mable com munication inter face
datasheet.[A]w w .2004/2005.9.
(收稿日期:2005209212)
开发与应用
信息技术与信息化
88 2006年第1期。

相关文档
最新文档