微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 利用UART传输数据

利用UART传输数据

时间:10-02 整理:3721RD 点击:

小梅哥AC620开发板试用体验继续     最近在准备电赛,在做数字频率计相关的题目时恰好有FPGA相关的应用。考虑到其高速运算性能,在数字频率计这样的高速运用中有很大的用武之地,因此今天学习一下如何利用FPGA进行收发数据。为了保证电子系统中的上位机、下位机正确通信传输数据,我们需要为它们编写通信协议。
     目前常用的通信协议有I2C,SPI,UART等等,考虑到UART电路结构简单且大部分人都有基础涉猎,因此我决定先从UART开始学起。
    UART通信在使用前需要做多项设置,最常见的设置包括数据位数、波特率大小、奇偶校验类型和停止位数。而对这些参数设置的过程,即是我们所谓的编写协议。下面,我分别就发送端与接收端进行简要的试用介绍

============================分割线===========================




一、波特率设定


    有过单片机开发经验的朋友们都知道,为了实现不同波特率的传输,我们通常利用查找表的思想,对板载计数器分别赋以不同的初始计数值,本模块的设计需要同时保证复用性,当需要不同波特率时,只置不同计数器的起始值即可。具体代码实现如下:

  1. always@(posedge Clk or negedge Rst_n)
  2.         if(!Rst_n)
  3.                 bps_DR 2)))
  4.                 uart_state <= 1'b0;
  5.         else
  6.                 uart_state <= uart_state;               

复制代码

其中值得一提的是,如何判断信号是否有效。如上所述,在一位数据的中央位置,信号比较稳定。因此在这六次采样信号之中,若有三次以上为1,则可视为高电平。考虑到最高为在1+1+1时必定大于1,在高电平次数小于3时必定小鱼1。因此可直接根据高电平判断。


另外,这里我们定义的r_data_byte可以参考为C语言中的二维数组,是一个存储器型变量。在这里,他是一个有8位寻址地址的3位存储器。实际上,我们传输的数据即是在某一个八位地址之下,经过数据判决(是否为1)之后的这个三维存储器的值。关于存储器型变量的定义大家可以参照Verilog相关教材,小梅哥的教学视频中也介绍得比较充分。


至此,数据接收模块基本设置完成,接下来对其进行测试验证。


三、模块的测试验证


与发送模块类似,我们依旧利用ISSP进行例化,此时,同样利用串口猎人,我们在串口猎人处发送数据。其结果如下所示:




================================分割线=================================
上面就是我这次对AC620的串口数据发送、接收模块的使用体验。除了再次熟悉了电子系统中上下位机交换数据的必要步骤之外,更加深了对FPGA工程应用体验的认识。在此再次对小梅哥无比坚实的资源支持进行感谢!学习过程中遇到的模块理解问题,在小梅哥配套学习笔记中都有着非常详细的讲解。小梅哥AC620开发板及学习套件组绝对是入手FPGA工程开发的良心利器。


学无止境,希望大家都能加油!材料支持如此丰厚,不怕你不会,就怕你不学。



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top