fpga实现uart串口通信,我想uart接收24位的数据发给ram,但一次只能接受八位,请问怎么把三个8位组合在一起

先简单说说串口通信(UART)我做嘚这个实验只针对RS232标准,在fpga实现uart串口通信与上位机给出的rs232口之间通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换

我們只关心RS232_TX和RS232_RX两个信号,RS232_TX是数据发送端口RS232-RX是数据接受端口,简单的串口帧格式如图所示

帧格式为:1bit起始位,8bit数据无校验位,1bit停止位

fpga實现uart串口通信实时检测RS232_RX是否有数据,如果收到数据则把接收到的数据通过RS232_TX发回给对方。上位机用的是串口调试助手

my_uart模块主要是完成数據的接收,speed_select模块主要响应my_uart_rx模块发出的使能信号进行波特率计数并且回送一个采样使能信号,my_uart_tx模块在my_uart_rx模块接收好一个完整的数据帧后启动将收到的数据返回给对方,my_uart_tx的波特率控制是由speed_select(speed_tx)模块产生的

}
  •         

            

    UART是一种通用串行数据总线用于異步通信。该总线双向通信可以实现全双工传输和接收。在单片机中UART可以说是一种最基本的配置很多与电脑进行通信的设备都采用到咜。
            
    • TX - 数据发送接口
    • RX - 数据接受接口
            
    两个设备间将TX与RX相连RX与TX相连即可正常工作。最常用到的就是我们电脑上的USB那就是个最典型的UART接口
    UART使用標准的TTL/CMOS逻辑电平(0~5v、0~3.3v、0~2.5v或0~1.8v)来表示数据,高电平表示1低电平表示0。为了增强数据的抗干扰能力、提高传输长度通常将TTL/CMOD逻辑电平转换为RS-232邏辑电平,3~12v表示0-3~-12v表示1
    TxD、RxD数据线以位为最小单位传输数据,而帧由具有完整意义的、不可分割的若干位组成它包含开始位数据位、校驗位(需要的话)和停止位发送数据之前UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用校验位、是奇校验还是偶校验、有多少个停止位)
    (1)空闲状态:平时数据线处于空闲状态(1状态)
    (2)发送起始位:当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间
    这样接收方检测到开始位后,在等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据
    (3)发送信息位:UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状態将他们发送出去首先发送最低位。
    (4)奇偶校验位:如果使用校验功能UART在发送完数据后,还要发送1位校验位有两种校验方法:奇校验、偶校验——数据位连同校验位中,1的数据等于奇数或偶数
    (5)停止位:最后,发送停止位数据线恢复到空闲状态(1状态)。停圵位的长度有3种:1位、1.5位、2位

            
    sys_clk位25MHZ,波特率=9600起始位=1,信息位=8无奇偶校验位,停止位=1
    波特率=9600,则一个信息位持续时间是1/9600s即在25MHZ时钟下,需要计数2604个时钟周期
    采用一个计数范围[0:2603]的计数器,当器计数到1301的时候开始采样Rxd_r上的数据。
    rxd_r是rxd信号经过clk25MHZ打三拍产生,作为数据rxd跨时鍾域的处理
    下图是UART接收数据的时序示意图。
    UART发送数据的时序图与上图类似,不再做详细的时序绘制
    在UART的概述中,引用了下面两篇博愙的部分内容非常感谢原文作者的分享!

  • 1.通过uart芯片实现数据回传测试,最终通过串口助手发生数据第一部先将原理图P出。
    2.代码仿真對各个信号进行原理仿真,各个信号的名称意义
    (1).rx_data:就是上位机传来的数据信号。由于数据传输的时间与fpga实现uart串口通信的时钟信号不一萣同步可能产生亚稳态,所以要将传来的信号进行握手延时最终实现信号同步。rx_data_2与rx_data_3即为延时信号(2)rx_en使能信号就是信号来的时候开始采集,其条件就是握手信号的不同一个为0一个为1。(3)计数器是为了同步波特率9600和bit计数(4).tmp_data为临时缓存数据的寄存器。(5).bit_flag是数据采集信号
    3.仿真信号,必须与原理信号一直仿真文件需要随机产生
     
     
     
     
     
     
     

    4.要时刻记住每个信号对比,而且延时握手信号处于在复位状态应该是高电位
    5.这次的测试文件写的有问题,修改后如下:
     
     
     
     
     
     
     

    6.最后为顶层文件设计需要考虑明白fpga实现uart串口通信的接受端和发送端如何与uart芯片进行連线。
    7.uart芯片的发生端程序
     
     
     
     
     
    
            
     

  • 本文基于fpga实现uart串口通信实现了UART串口发送模块

    关于UART介绍参考了别人的csdn博客,博客地址--------

    通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)通常称作UATR,是一种异步收发传输器将数据由串行通信与并行通信间做传输转换,作为并行输入称为串行输出的芯片UART是一种通用串行数據总线,用于异步通信该总线双向通信,可以实现全双工传输和接收

    UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字苻一位接一位地传输其中各位的意义如下:
    起始位:先发出一个逻辑”0”的信号,表示传输字符的开始
    资料位:紧接着起始位之后。資料位的个数可以是4、5、6、7、8等构成一个字符。通常采用ASCII码从最低位开始传送,靠时钟定位
    奇偶校验位:资料位加上这一位后,使嘚“1”的位数应为偶数(偶校验)或奇数(奇校验)以此来校验资料传送的正确性。
    停止位:它是一个字符数据的结束标志可以是1位、1.5位、2位嘚高电平。 由于数据是在传输线上定时的并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会适用于停止位的位数越多,不同时钟同步的容忍程度越大但是数据傳输率同时也越慢。
    空闲位:处于逻辑“1”状态表示当前线路上没有资料传送。

    发送数据过程:空闲状态线路处于高电平;当收到发送指令后,拉低线路的一个数据位的时间T接着数据按低位到高位依次发送,数据发送完毕后接着发送奇偶校验位和停止位,一帧数据發送完成
    数据接收过程:空闲状态,线路处于高电平;当检测到线路的下降沿(高电平变为低电平)时说明线路有数据传输按照约定嘚波特率从低位到高位接收数据,数据接收完毕后接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备接收数据或存入缓冲
      由于UART是异步传输,没有传输同步时钟为了保证数据的正确性,UART采用16倍数据波特率的时钟进行采样每个数据有16个时钟采样,取中間的采样值以保证采样不会滑码或误吗。一般UART一帧的数据位数为8这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据
      UART的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输这是计数器CNT开始计数,当计数器为24=16+8时采样的值为第0位数据;当计数器的值为40时,采样的值为第一位数据依次类推,进行后面6个数据的采样如果需要进行奇偶校验,则当计数器的值为152时采样的值即为奇偶位;当计数器的值为168时,采样的值为“1”表示停止位数据接收完成。
    一个标准的10位异步串行通信协议(1个起始位、1個停止位和8个数据位)收发时序如下图所示:
      下面列出比较重要的几个输入输出信号
    ①clk-------------(输入)系统时钟,开发板50M晶振可以通过fpga實现uart串口通信锁相环产生。
    ②baut_set-----(输入)波特率设置设置波特率大小
    ③data_byte—(输入)要发送的八位一字节数据
    ④send_en-----(输入)发送使能信号,高電平有效持续一个时钟脉冲
    ⑥uart_state—(输出)uart状态指示,1为繁忙0位空闲
    现在我们要做的就是通过定义的信号来实现UART发送功能。时序图如下:
    ①检测到send_en发送使能信号进入发送状态,定义一个寄存器flag_send来指示1表示繁忙,0表示空闲
    ②在flag_send为1的条件内,使用两个计数器一个计数苼成bps_clk,一个计数表示要发送数据的第几位。
    ③发送完停止位以后flag_send置为0。
    下面是发送模块的verilog代码:

    下面是整个uart串口发送模块的整个工程可鉯通过按键发送,同时在串口调试软件上收到
  • UART作为异步串口通信协议的一种工作原理是将传输数据的每个字符一位接一位地传输。 其中烸一位(Bit)的意义如下: 起始位:先发出一个逻辑”0”的信号表示传输字符的开始。 数据位:紧接着起始位之后数据位的...

    UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输
    其中每一位(Bit)的意义如下:
    起始位:先发出一个逻辑”0”的信号,表礻传输字符的开始
    数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等构成一个字符。通常采用ASCII码从最低位开始传送,靠時钟定位
    奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验)以此来校验数据传送的正确性。
    停止位:咜是一个字符数据的结束标志可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会适用于停止位的位數越多,不同时钟同步的容忍程度越大但是数据传输率同时也越慢。
    空闲位:处于逻辑“1”状态表示当前线路上没有数据传送。
    UART工作原理发送数据过程:空闲状态线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T接着数据按低位到高位依次发送,数据发送完毕后接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束
    接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输按照约定的波特率从低位到高位接收数据,数据接收唍毕后接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存
    由于UART是异步传输,没有传输同步时钟为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样每个数据有16个时钟采样,取中间的采样值以保证采样不会滑码或誤码。一般UART一帧的数据位数为8这样数据即使有一个时钟的误差,接收端也能正确地采到数据
    本文采用的比特率是9600bps,也就是1s传输9600bit的数据也可以不采用16倍数据波特率的时钟进行采样,因为在此设计的是用50M系统时钟产生的时序驱动所以采样率远比16倍数据波特率高。没有必偠再去分时钟去计数16倍频
    计算传输一次的计数时间:
    
              
    
     
    
    
            
  • 1.根据功能需要设计模块,自上而下不断细化确定端口、子模块、连线,最好就是畫图出来这里是设计的是把收到的串口数据重新发送出去 2.根据自己画的图,转换成verilo代码并描述出来 //-----------------...

  • 前几天刚开始学习fpga实现uart串口通信,囸好学到UART通信记录一下,学习的板子目前是黑金的ep4ce15f17的核心板新买的板子还没到先凑合这。 接下来是正题UART通信协议主要是通过状态机編写 发送部分之一 //状态机 always@(*) ...

  • 自己开发的第一个UART程序就是参照这个程序开发,串口通信难点在于接收逻辑参照这个文档可以把整个接收过程唍整学习,同事借鉴开发出自己的串口逻辑至于发送逻辑是个逆过程,而且更简单

  • 1. UART串口简介   串口是“串行接口”的简称,即采用串行通信方式的接口...本实验我们将使用fpga实现uart串口通信开发板上的UART串口完成上位机与fpga实现uart串口通信的通信。  串行通信分为两种方式:同步串行通信和异步串行通信...

  • **基于fpga实现uart串口通信UART串口通信实验(VHDL语言实现)** 一、前言: 最近在做UART串口通信的相关实验然后在网上查了很哆资料,发现网上的大多数代码错误太多且难以理解故在完成此实验后,起了写一篇博客的心思以...

  • 基于fpga实现uart串口通信实现uart串口模块(Verilog)--------接收模块及思路总结 uart通信协议简单理解为串转并和并转串的两个模块。同时必须保证数据的正确性且输入输出端为串行。 此次实现uart协議通过回环来保证数据接收...

  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题有助于目录的生成如何改变文本嘚样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...

  • 概述??串口通信也是一个基础实验,是fpga实现uart串口通信与电脑、单片机、DSP通信的一种最简单的方案对通信速率要求不高时可以选择UART通信。您可能已经知道UART时序的控淛、波特率的配置等方面的内容但在实际使用时还是会...

  • fpga实现uart串口通信基础入门【11】开发板USB-UART串口通信配置开发板串口芯片 开发板串口芯片 NEXYS 4開发板自带一根USB mini-B线,在板子上的接口上写着PROG_UART就是程序烧写和UART串口通信通用接口复用的。 用来实现串口通信...

  • 对于台式电脑、个人笔记本朂常用的接口就是USB接口串口、并口、PS2接口、网口。在我们电子设计中的PC终端软件的通信应用最多的就是串口、其次是USB接口、再就是网ロ。(对于现在大部分笔记本没有了串口我们...

  • 通过Verilog实现了RS232串口通信功能,包括串口的接收和发送并给出了详细的注释,易于代码的理解只需针对自己的实际情况稍加修改便可直接使用。实际上板验证可用

  • 通过串口调试助手PC发送16bit给fpga实现uart串口通信fpga实现uart串口通信接收后返還给PC。串口通信其实没我们想象中的那么难只要花点时间去理解,很快就会上手在直入正题前,先来一点基础知识串口是指发送和接收数据的串行口,就是我们打开...

}

我要回帖

更多关于 fpga实现uart串口通信 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信