当前位置:   article > 正文

第22节 国产安路FPGA UART应用实例代码讲解

第22节 国产安路FPGA UART应用实例代码讲解

        上一个小节主要是介绍了UART通讯的协议格式等进行的原理性的介绍,这一个小节主要对UART的代码进行讲解、仿真和板上验证进行介绍说明。在代码设计过程当中,充分的考虑了UART通讯的稳定性和功能接口参数灵活可配置的特点。本节通过实例实现上位机串口助手发送数据,FPGA板卡接收数据并环回发送给上位机显示。

        一、UART模块介绍

         UART模块分为两个部分,一个部分是实现发送功能,另一个部分实现接收功能。UART通过顶层包含发送和接收功能做出一个FIFO接口,有利于项目内的模块的拆分,较少耦合性。具体框架如下所示。

        二、UART发送功能代码介绍  

        通过上一个小节可以知道UART的通信格式,发送一帧数据有起始位、数据位、校验位、停止位共同组成,如下图示。

        在编写代码之前, 我们首先要确定串口通信的数据格式及波特率。在这里我们选择串口比较常用的一种模式, 数据位为 8 位, 停止位为 1 位,无校验位,波特率为 115200bps。则传输一帧数据的时序图如下图所示:


 

        UART数据线空闲状态常态是高电平,通过发送1bit的起始位0,开始进入数据发送状态,低位数据先发送,如果有校验位发送校验位,如果没有校验位发送停止位,停止位一般可以发送1bit,1.5bit和2bit的高电平。

        UART发送模块的端口定义如下表所示。

端口名称功能备注
clock_i主时钟
reset_ni复位
start_i启动发送
direction数据发送大小端控制
data_i并行数据输入
cntr_16x_max波特率分频计数器设置值
parity_choice奇偶校验选择
datanum发送数据位数量设置
endnum停止位数量设置
txd_oUART发送信号
over_oUART发送完成信号
baud_tick波特率输出
baud_tick_x21/2波特率输出

        具体的端口定义如下图所示:

        发送功能的状态机跳转代码如下所示,通过判断start_i高电平启动状态机,跳转到s_start状态,开始发送1bit的起始位,跳转到数据发送状态,当按照发送数据bit位数达到用户设置的位数时,判断如果配置了发送奇偶校验位则跳转到奇偶校验状态,如果没有配置奇偶校位,跳转到发送停止位,由于停止位存在0.5bit的情况,所以这里对波特率进行了倍频,达到用于设置的停止位bit数量要求状态机跳转到s_wait状态最后回到空闲,等待第二次触发。

产生波特率计数器使能信号如下图所示:

波特率产生计数器

二倍频波特率信号产生

发送完成信号产生

发送数据计数器

停止位计数器

发送bit位,大小端数据发送控制。

奇偶校验位生成

发送数据端口控制

三、UART接收功能代码介绍

         UART接收功能代码的端口如下下表。

端口名称功能备注
clock_i时钟接口
rst_n复位接口
rxd_iUART接收端口
direction数据接收大小端控制
cntr_16x_max波特率分频计数器设置值
parity_choice奇偶校验选择
datanum发送数据位数量设置
endnum停止位数量设置
data_valid_o接收数据输出有效信号
data_o接收数据输出信号
parity_error_o奇偶校验错误信号
frame_error_o接收帧错误信号

        UART接收部分状态机跳转代码如下图所示,在空闲状态判断是否存在起始信号,如果存在起始信号,跳转到接收起始位状态,接收完成起始位信号,跳转到接收数据状态,达到用户设置的数据位数量,判断用户是否需要接收奇偶校验位,如果设置奇偶校验位跳到接收奇偶校验的状态接收奇偶校验位,否则接收停止位。

        在实验室条件下,串口发送的数据通常是稳定的,在接收时取数据中点作为接收数据。
在工业环境下,干扰较多,信号中通常会产生冲激,用取数据中点的方法容易受到脉冲信号的影响,故用采样的方法保证接收数据的准确性。 

        16倍频波特率产生,用于进行16次信号采样,如下图示。

        采样计数器和实际波特率的产生,如下图所示。

        采样值进行累加,如果在16次采样中值大于7代表是0(因为rxd前面进行了取反),其他情况代表接收到了1,具体代码如下图所示。

接收数据bit有效值产生具体代码,如下图所示。

起始位检测信号产生,如下图所示。

0.5bit控制位信号产生,代码如下图所示。

开始bit位计数器,如下图所示。

数据接收串转并控制代码,如下图所示。

生成接收奇偶校验控制位,判断奇偶校验是否正确,如下图所示:

接收数据和数据有效输出控制,如下图所示。

四、UART顶层代码介绍

        UART的顶层主要例化接收和发送子模块,发送数据读取fifo功能,当发送fifo的非空去数据发送到UART的发送模块,当UART发送模块发送完成一个数据时取fifo下一个数据具体代码,如下图所示。

五、总结

         这一节主要介绍了UART的发送、接收代码和顶层的具体代码,由于篇幅太长,下一节我们主要介绍UART模块的仿真和板上调试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/208344
推荐阅读
相关标签
  

闽ICP备14008679号