首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于FPGA 的简化UART 电路设计
来源:本站整理  作者:佚名  2009-03-10 14:13:16



摘要: 本文阐述了通用异步发生器UART 的功能特点,介绍了用硬件描述语言Verilog 来开发各个模块,并给出仿真结果。本设计使用Altera 的FPGA 芯片,将UART 的核心功能嵌入到FPGA 内部,能够实现异步通信的功能,可以将其灵活地嵌入到各个通信系统中。

关键词:FPGA;UART;Verilog HDL

0 引言
随着嵌入式系统的广泛推广和应用,UART ( Universal Asynchronous Receiver Transmiller )作为一种串行数据传输方式也得到广泛的使用。UART 允许在串行链路上进行全双工通信。串行外设到RS 232-C 异步串行接口一般采用专用的集成电路即UART 实现。常见的串行接口芯片如8250 、8251 、NS16450 等,能够实现比较全面的串行通信功能。而在实际应用中,我们往往并不需要如此完整的功能,从而会造成资源的浪费和成本的提高。随着EDA 技术的飞速发展,我们就可以根据自己的需求,将所需要的UART 功能集成到FPGA 内部,从而简化了电路、减小了体积、提高了系统的可靠性。基于这种思想,作者在设计中选用Altera 公司的EP1C12Q240CQ8,使用Verilog HDL 设计实现UART 的核心功能。1 UART 通信原理 串行通信分为两种类型:同步通信方式和异步通行方式。UART 是通用异步发送器,是一种串行异步通信方式。它是各种设备之间进行通信的关键模块,允许在串行链路上进行全双工的通信。在发送端,并行的数字信号需要转化成串行信号才能通过有线或无线传输到另外一台设备;而在接收端,串行信号必须要被恢复成并行信号才能进行数据处理。UART 就是用来处理这种数据与串口之间的串并和并串转换的。
UART 传送一个字符以起始位(Start Bit) 开始,以停止位(Stop Bit )结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一个起始位(低电平),字符本身由5~8 位数据位组成,然后是一位校验位(可选),最后是停止位(1 位,1 位半或2 位),停止位后面是不定长度的空闲位。停止位和空闲位都规定高电平,这样就可以保证起始位开始处有一个下降沿。

图1 数据传输格式

2 UART 在FPGA 中的实现
2.1UART 的硬件电路设计
在串行通信中,普遍采用的是RS-232 接口标准。硬件电路主要由FPGA 串口模块、MAX3232 和DB-9 组成,电路图如图2 所示。数据从DB-9 的TxD 端进入,经过MAX3232 进行电平转换后由FPGA 串口模块中的RxD 端进入,进行串并转换后由数据总线进入FPGA 的其他模块。数据处理后经由数据总线进入FPGA 串口模块,在其中进行并串转换后由TxD 端输出到MAX3232 中,经电平转换后由DB-9 的RxD 端输出。

图2 UART 硬件电路图

1.    2.2 UART 的结构设计 UART 主要由波特率发生模块、发送模块、接收模块这三个部分组成。
    2.2.1 波特率发生模块
    当UART 在发送数据的时候,只需要按照一定的速率将数据串行地移动出就可以了。然而,当UART 在接收串行的数据时,在什么时刻将数据移入移位寄存器是非常关键的。最理想的情况是在串行数据的每一位的中间时刻,对串行数据进行采样。对每一位数据的时间进行分段,时间的分段越多,对串行数据的采样就越靠近中点,由于接收方和发送方的时钟不可能完全同步,时间的分段越多,接收方出现采样错误的概率就越低。但时间的分段越多,也意味着采样时间就越高,系统的开销就越大。因此,在实际的设计中,采用16 倍于波特率的时钟频率。UART 收发的每一个数据宽度都是波特率发生器输出的时钟周期的16 倍。如按照9600b/s 进行收发,那么波特率发生器的输出时钟频率应为9600×16Hz 。由于外部时钟采用25MHz ,可以很简单地通过总线写入不同的数值到波特率发生器保持寄存器中,然后用计数器的方式生成所需要的各种波特率。计算公式为:25000000/(16 ×所期望的波特率)-1。
2.    2.2.2 发送模块

[1] [2]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:145,921.90000 毫秒