FPGA解析串口协议帧3.0版本,增加了错误重发功能,提供仿真文件以及源码

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

FPGA解析串口协议帧已经发布2个版本了分别如下
版本1点击查看版本1
版本1详细介绍了串口协议帧的帧组成和设计思想但设计粗糙注释不详细
版本1点击查看版本2
版本2优化了代码添加了详细注释
目前根据用户的反馈前两个版本都存在一下问题

1、代码虽然精简但对新手来说理解比较困难看不懂特别是解析模块建议解析模块使用三段式状态机实现
2、功能有bug必须完全按照协议帧发送串口数据发送错误则FPGA无法解析下一帧串口数据了必须断电重启或重新烧录才能再次解析

针对用户的反馈升级了3.0版本
三段式状态机实现定义了8个状态每个状态的跳转只有1位数据变化增强了状态机在组合逻辑和时序逻辑交替工作下的稳定性这种写法目前在业界已经算是天花板水平了
在这里插入图片描述
各状态跳转图如下
在这里插入图片描述
状态切换说明如下

DLE初始状态下收到aa后进入状态HEADER_1 HEADER_1初始状态下收到bb后进入状态HEADER_2
HEADER_2初始状态下接收数据计数器=2后进入状态RX_DATA
RX_DATA初始状态下接收数据计数器=7后进入状态SUM_CHECK
SUM_CHECK初始状态下和校验指示信号为高后进入状态END_1 END_1初始状态下收到cc后进入状态END_2
END_2初始状态下收到dd后进入状态RX_DONE RX_DONE状态自动返回DLE状态再次进入循环

组合逻辑状态切换部分代码如下
在这里插入图片描述
这一步就解决了用户反馈的理解比较困难看不懂的问题

错误重发功能功能
之前的版本确实有这样的问题
比如发送aa bb 00 00 00 00 01 cc dd的错误帧再发aa bb 00 00 00 00 00 cc dd的正确帧FPGA就不能解析了FPGA直接卡在了某一状态一直在等满足他跳转的条件当再次发送串口数据帧时解析模块还未切换回初始状态所以卡死
这里增加了error信号一旦发送的数据帧单个字节错误也就是说一帧数据中的某一个字节不符合协议规定则状态机立即跳转回 DLE初始状态这样就解决卡死问题可以错误重发
关于错误检测信号error部分的代码请联系我获得

整个解析代码加上注释一共才179行可谓短小精悍了
在这里插入图片描述

仿真
连续发送如下7帧数据
其中有2帧是错误数据
在这里插入图片描述
在这里插入图片描述
仿真结果如下
在这里插入图片描述
可以看到即使中间有2帧是错误数据解析模块依然解析出了正确帧的有效数据错误帧不解析也不输出

上板调试
开发板Xilinx Artix7开发板
开发环境vivado2019.1
输入串口
输出串口
工程代码架构如下
在这里插入图片描述
上板调试
在这里插入图片描述
福利工程代码的获取
代码太大无法邮箱发送以某度网盘链接方式发送
资料获取方式文章末尾的V名片。
网盘资料如下
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6