0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将UART功能集成到FPGA内部实现多模块的设计

电子设计 来源:郭婷 作者:电子设计 2019-10-18 07:54 次阅读

异步串行通信要求的传输线少,可靠性高,传输距离远,被广泛应用于微机和外设的数据交换。实现串口通信主要需要完成两部分工作:

将串口电平转换为设备电路板的工作电平,即实现RS-232电平和TTL/CMOS电平的转换;

接收并且检验串行的数据,将数据变成并行的并提供给处理器处理。

实现RS-232电平和TTL/CMOS电平转换可以用接口芯片来实现,实现数据的串行到并行转换用的是UART,它们是实现串行通信必不可少的两个部分。虽然目前大部分处理器芯片中都集成了UART,但是一般FPGA芯片却没有这个特点,所以使用FPGA作为处理器可以有两个选择,第一个选择是使用UART芯片进行串并转换,第二个选择是在FPGA内部实现UART功能。但所有的UART芯片都存在引脚较多、体积较大、与其他器件的接口较为复杂等缺点,从而会使设计的成本和难度增加。因此可以将需要的UART功能集成到FPGA内部,而利用VHDL语言将UART的核心功能集成,不仅解决传统芯片的缺点,也使整个设计更加紧凑、稳定且可靠。

1、UART实现原理

UART主要有UART内核、信号监测器、移位寄存

器、波特率发生器、计数器、总线选择器和奇偶校验器总共7个模块组成,如图一所示。

将UART功能集成到FPGA内部实现多模块的设计

UART各个模块的功能如下:

(1)UART内核模块

UART内核模块是整个设计的核心。在数据接收时,UART内核模块负责控制波特率发生器和移位寄存器,使得移位寄存器在波特率始终的驱动下同步的接收并且保存RS-232接收端口上的串行数据。在数据发送时,UART内核模块首先根据待发送的数据和奇偶校验位的设置产生完整的发送序列(包括起始位、数据位、奇偶校验位和停止位),之后控制移位寄存器将序列加在到移位寄存器的内部寄存器里,最后再控制波特率发生器驱动移位寄存器将数据串行输出。

(2)信号监督器模块

信号检测器用于对RS-232的输入信号进行实时检测,一旦发现新的数据则立即通知UART内核。

(3)移位寄存器模块

移位寄存器的作用是存储输入或者输出的数据。当UART接受RS-232输入时,移位寄存器在波特率模式下采集RS-232输入信号,并且保存结果;当UART进行RS-232输出时,UART内核首先将数据加载到移位寄存器内,再使移位寄存器在波特率模式下将数据输出到RS-232输出端口上。

(4)波特率发生器模块

由于RS-232传输必定是工作在某种波特率下,比如9600,为了便于和RS-232总线进行同步,需要产生符合RS-232传输波特率的时钟,这就是波特率发生器的功能。

(5)奇偶检验器模块

奇偶校验器模块是根据奇偶校验的设置和输入数据计算出相应的奇偶校验位,它是通过纯组合逻辑实现的。

(6)总线选择模块

总线选择模块用于选择奇偶校验器的输入是数据发送总线还是数据接收总线。在接收数据时,总线选择模块将数据接收总线连接到奇偶校验器的输入端,来检查已接收数据的奇偶校验位是否正确;而在发送数据时,总线选择模块将数据发送总线连接到奇偶检验器的输入端,UART内核模块就能够获取并且保存待发送序列所需的奇偶校验位了。

(7)计数器模块

计数器模块的功能是记录串行数据发送或者接收的数目,在计数到某数值时通知UART内核模块。

2、UART工作流程

UART的工作流程可以分为接收过程和发送过程两部分。

接收过程指的是UART监测到RS-232总线上的数据,顺序读取串行数据并且将其输出给CPU的过程。当信号监测器监测到新的数据(RS-232输入逻辑变为0,即RS-232传输协议的起始位)就会触发接收过程,其流程图如图二所示。首先UART内核会重置波特率发生器和移位寄存器,并且设置移位寄存器的工作模式为波特率模式,以准备接收数据。其次,移位寄存器在波特率始终的驱动下工作,不断读取RS-232串行总线的输入数据,并且将数据保存在内部的寄存器内。接收完成后,UART内核会对已接收的数据进行奇偶检验并且输出校验结果。最后,UART内核会重置信号监测器,以准备进行下一次数据接收。

将UART功能集成到FPGA内部实现多模块的设计

发送过程由加载和发送两个步骤组成,如图三所示。加载步骤是UART内核按RS-232串行发送的顺序将起始位、数据位、奇偶校验位和停止位加载到移位寄存器内,这个过程工作在系统时钟下,相对于RS-232的传输速度来说非常快。完成加载步骤后,UART内核会重置波特率发生器,并且设置移位寄存器工作在波特率模式下,于是移位寄存器便在波特率时钟的驱动下依次将加载的数据发送到RS-232的发送端TxD,这样便产生了RS-232的数据发送时序。

将UART功能集成到FPGA内部实现多模块的设计

3、UART各个模块的实现

除UART内核模块以外,其他模块都较为简单,用于实现某一具体功能。现在重点对UART内核模块的实现做出介绍。

UART内核模块的功能是控制数据接收、数据加载和数据发送的过程,这可以用状态机来实现。下面就按接收和发送的过程来介绍UART内核模块状态机的实现。

(1)数据接收过程

数据接收过程的流程图如图二所示,可以定义3个状态——空闲、接收和接收完成,其中状态变换图如图四所示。

将UART功能集成到FPGA内部实现多模块的设计

(2)数据加载和发送过程

数据加载和发送过程都是为了发送数据而设定的,所以将它们放在一起进行介绍。可以用4个状态来实现上述的过程,即空闲、加载、发送和发送完成,其中的空闲状态就是UART内核复位后的空闲状态,和上面介绍的数据接收过程的空闲状态一致。

数据加载和发送过程的状态转换图如图五所示。

将UART功能集成到FPGA内部实现多模块的设计

4、仿真结果

在波特率为9600情况下对UART进行仿真,结果稳定可靠。该设计具有很好的可读性和灵活性,具有很好的参考价值。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19191

    浏览量

    229311
  • FPGA
    +关注

    关注

    1627

    文章

    21685

    浏览量

    602323
  • uart
    +关注

    关注

    22

    文章

    1230

    浏览量

    101223
收藏 人收藏

    评论

    相关推荐

    基于FPGA器件实现UART适应自顶向下的设计

    FIF0),在实际应用中,往往只需要用到UART的几个基本功能,使用专用芯片会造成资源浪费和成本提高,我们可以所需要的UART功能
    发表于 08-04 17:25 856次阅读
    基于<b class='flag-5'>FPGA</b>器件<b class='flag-5'>实现</b><b class='flag-5'>UART</b>适应自顶向下的设计

    FPGA/CPLD设计UART

    ),有时我们不需要使用完整的UART功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以所需要的
    发表于 05-23 19:37

    一种基于FPGAUART电路实现

    一般的使用中往往不需要使用完整的UART功能,比如对于串口的设备或需要加密通讯的场合使用UART 就不是最合适的。如果设计上用到FPGA
    发表于 02-05 15:33

    FPGA怎么用UART实现 UART实现原理

    内部寄存器里,最后再控制波特率发生器驱动移位寄存器数据串行输出。2.信号监测器模块信号监测器用于对 RS-232 的输入信号进行实时监测,一旦发现新的数据则立即通知 UART内核。
    发表于 10-18 09:51

    一种基于FPGAUART实现方法设计

    摘要:UART作为RS232协议的控制接口得到了广泛的应用,UART功能集成FPGA芯片中
    发表于 06-21 07:17

    基于FPGAUART接口模块设计

    随着FPGA的广泛应用,经常需要FPGA与其他数字系统进行串行通信,专用的UART集成电路如8250,8251等是比较复杂的,因为专用的UART
    发表于 09-16 11:57 4630次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>UART</b>接口<b class='flag-5'>模块</b>设计

    一种基于FPGAUART 电路实现

      UART 即通用异步收发器,传统上采用多功能的专用集成电路实现。但是在一般的使用中往往不需要完整的UART
    发表于 05-23 10:13 2658次阅读
    一种基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>UART</b> 电路<b class='flag-5'>实现</b>

    集成UART核心的FPGA异步串行实现

    串行外设都会用到RS232-C异步串行接口,传统上采用专用的集成电路即UART实现,如TI、EXAR、EPIC的550、452等系列,但是我们一般不需要使用完整的UART
    发表于 06-04 11:42 1204次阅读
    <b class='flag-5'>集成</b><b class='flag-5'>UART</b>核心的<b class='flag-5'>FPGA</b>异步串行<b class='flag-5'>实现</b>

    基于FPGA/CPLD的UART功能设计

    基于FPGA/CPLD的UART功能设计
    发表于 01-23 20:45 31次下载

    FPGA为基础的UART模块的详细设计方案

      UART作为RS232协议的控制接口得到了广泛的应用,UART功能集成
    发表于 07-07 15:51 12次下载
    以<b class='flag-5'>FPGA</b>为基础的<b class='flag-5'>UART</b><b class='flag-5'>模块</b>的详细设计方案

    使用FPGA模块化设计方法实现UART的设计论文

    UART作为RS232协议的控制接口得到了广泛的应用,UART功能集成
    发表于 07-07 17:28 10次下载
    使用<b class='flag-5'>FPGA</b>和<b class='flag-5'>模块</b>化设计方法<b class='flag-5'>实现</b><b class='flag-5'>UART</b>的设计论文

    基于FPGA实现通用异步收发器基本功能的应用设计

    的的UART功能和一些辅助功能时,就可以需要的UART功能
    发表于 07-10 10:28 931次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>通用异步收发器基本<b class='flag-5'>功能</b>的应用设计

    如何使用FPGA和IP核实现UART扩展

    了当前普追采用的UART的方法和Actel公司提供的标准8051和UAI玎(通用异步收发器)。在IP核的基础上,通过两块FPGA内部RAM,设计出一种“桥”的办法,用Vcalog硬件
    发表于 02-02 15:15 11次下载
    如何使用<b class='flag-5'>FPGA</b>和IP核<b class='flag-5'>实现</b><b class='flag-5'>多</b><b class='flag-5'>UART</b>扩展

    一种基于FPGAUART电路的实现

    的。本设计使用Xilinx的FPGA器件,只将UART的核心功能嵌入FPGA内部,不但
    发表于 04-27 14:07 8次下载

    基于FPGAUART模块设计与实现简介

    基于FPGAUART模块设计与实现介绍说明。
    发表于 06-01 09:43 20次下载