DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 139|回复: 0
打印 上一主题 下一主题

用FPGA/CPLD设计UART

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-26 03:50:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
摘 要 :UART是广泛使用的串行数据通讯电路。本设计包含UART发送器、接收器和波特率发生器。设计应用EDA技术,基于FPGA/CPLD器件设计与实现UART。

关键词 :FPGA/CPLD;UART;VHDL
UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。
--- 串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。


一 UART简介

1 UART结构
--- UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。
--- 功能包括微处理器接口,发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。
--- 图1是UART的典型应用。




2 UART的帧格式
--- UART的帧格式如图2所示。





--- 包括线路空闲状态(idle,高电平)、起始位(start bit,低电平)、5~8位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。
--- 这种格式是由起始位和停止位来实现字符的同步。
--- UART内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数(1,1.5,2)等设置。

二 UART的设计与实现

1 UART发送器

--- 发送器每隔16个CLK16时钟周期输出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所示。





--- 引入发送字符长度和发送次序计数器length_no,实现的部分VHDL程序如下。

--- if std_logic_vector(length_no) = “0001” then
--- tsr = “0011” and std_logic_vector(length_no) = “0001” and std_logic_vector(length_no) <= “1001” then
--- --数据帧数据由接收串行数据端移位入接收移位寄存器
--- rsr(0) <= rxda ;
--- rsr(7 downto 1) <= rsr(6 downto 0) ;
--- parity <= parity xor rsr(7) ;
--- elsif std_logic_vector(length_no) = “1010” then
--- rbr <= rsr ; --接收移位寄存器数据进入接收缓冲器
--- ......
--- end if ;

--- 接收器仿真波形如图6所示。





3 波特率发生器

--- UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。
--- 根据给定的晶振时钟和要求的波特率算出波特率分频数。
--- 波特率发生器仿真波形如图7所示。




三 小结

--- 通过波特率发生器、发送器和接收器模块的设计与仿真,能较容易地实现通用异步收发器总模块,对于收发的数据帧和发生的波特率时钟频率能较灵活地改变,而且硬件实现不需要很多资源,尤其能较灵活地嵌入到FPGA/CPLD的开发中。在EDA技术平台上进行设计、仿真与实现具有较好的优越性。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2026-4-13 15:02 , 耗时 0.093620 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表