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

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

3天内不再提示

基于FPGA的UART控制器实现RS-232电平和TTL/CMOS电平的转换设计

电子设计 来源:中国科技信息 作者:张明 2021-03-26 14:19 次阅读

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

将串口电平转换为设备电路板的工作电平,即实现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个模块组成,如图一所示。

基于FPGA的UART控制器实现RS-232电平和TTL/CMOS电平的转换设计

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

3、UART各个模块的实现

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

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

(1)数据接收过程

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

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

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

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

4、仿真结果

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

责任编辑:gt

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

    关注

    68

    文章

    19259

    浏览量

    229649
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423136
  • 控制器
    +关注

    关注

    112

    文章

    16332

    浏览量

    177803
收藏 人收藏

    评论

    相关推荐

    TTL电平和CMOS电平的区别!

    电平Uoh和输出低电平Uol  Uoh≥2.4V,Uol≤0.4V  2.输入高电平和输入低电平  Uih≥2.0V,Uil≤0.8V  CMOS
    发表于 01-17 14:52

    EIA RS-232C与TTL转换

    连接,必须在EIA RS-232C与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路
    发表于 07-09 00:33

    TTLRS232电平转换电路及工作原理

    ,元件经济,结构简单设计巧妙 用三极管实现RS-232TTL电路 电路如下图 1.DB9的2脚 TXD:为RS-232电平信号接收端,RX
    发表于 02-24 14:37

    TTLRS232电平转换电路及工作原理

    实现DSP或MCU与PC通讯的电路,元件经济,结构简单设计巧妙 用三极管实现RS-232TTL电路 电路如下图1.DB9的2脚 TXD:为RS-2
    发表于 02-25 13:30

    RS232电平TTL电平的区别

    分别使用寄存地址方式和HAL库实现流水灯一.串口协议和RS-232标准,以及RS232电平TTL
    发表于 01-26 07:31

    RS232电平TTL电平的区别在哪

    一. 了解串口协议和RS-232标准,以及RS232电平TTL电平的区别;了解"USB/TTL
    发表于 02-10 07:53

    TTL CMOS RS232 RS485 RS422各种电平内容

    TTL CMOS RS232 RS485 RS422各种电平内容
    发表于 10-31 14:32 55次下载
    <b class='flag-5'>TTL</b> <b class='flag-5'>CMOS</b> <b class='flag-5'>RS232</b> <b class='flag-5'>RS</b>485 <b class='flag-5'>RS</b>422各种<b class='flag-5'>电平</b>内容

    RS232C/TTL电平转换和串口取电

    本文为大家介绍简单的RS232C/TTL电平转换和串口取电。
    发表于 01-05 17:08 1.3w次阅读
    <b class='flag-5'>RS232</b>C/<b class='flag-5'>TTL</b><b class='flag-5'>电平</b><b class='flag-5'>转换</b>和串口取电

    一文带你走进TTLCMOS电平和OC门

    TTLCMOS电平和OC门知识大全
    的头像 发表于 07-15 10:33 8257次阅读

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

    实现RS-232电平和TTL/CMOS电平转换可以用
    的头像 发表于 10-18 07:54 2594次阅读
    将<b class='flag-5'>UART</b>功能集成到<b class='flag-5'>FPGA</b>内部<b class='flag-5'>实现</b>多模块的设计

    嵌入式五种重要概念串口、COM口、TTLRS-232RS-485有什么区别

    1、串口、COM口是指的物理接口形式(硬件)。而TTLRS-232RS-485是指的电平标准(电信号)。 2、接设备的时候,一般只接GND RX TX。不会接Vcc或者+3.3v
    的头像 发表于 03-03 10:23 7844次阅读

    串口、COM口、UART口, TTLRS-232RS-485区别详解

    调试时总是会遇到各种各样的接口,各种各样的转换板,似懂非懂的感觉很不爽! 首先,串口、UART口、COM口、USB口是指的物理接口形式(硬件)。而TTLRS-232
    发表于 03-13 09:20 1.3w次阅读
    串口、COM口、<b class='flag-5'>UART</b>口, <b class='flag-5'>TTL</b>、<b class='flag-5'>RS-232</b>、<b class='flag-5'>RS</b>-485区别详解

    嵌入式 TTL电平和CMOS电平

    TTL,CMOS都属于数字电路。TTL电流控制器件输出高电平>2.4V输出低电平<0
    发表于 11-26 18:51 10次下载
    嵌入式 <b class='flag-5'>TTL</b><b class='flag-5'>电平和</b><b class='flag-5'>CMOS</b><b class='flag-5'>电平</b>

    TTL电平RS232电平的区别

    什么是TTL电平CMOS电平RS232电平?它们有什么区别呢?一般说来,
    的头像 发表于 02-07 14:58 5459次阅读

    cmos电平ttl电平如何转换 怎么判断ttl电路高低电平

    )是常用的数字电路家族,两者都有自己的特点和应用范围。在介绍如何转换CMOS电平和TTL电平之前,我们先来了解一下它们的定义和特点。
    的头像 发表于 02-22 11:10 3525次阅读