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名片。
网盘资料如下:

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

  1. 易信上线4.0版本首推“任务红包”功能

    本文讲的是 :  易信上线4.0版本首推"任务红包"功能  , 近日,移动社交软件易信4.0版本正式上线.在新版本中,易信首次推出了红包功能.其中不仅包含了"普通红包&q ...

  2. 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)

    概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...

  3. 全网独家3.1.2版本独立微信社群人脉系统社群空间站最新源码开源+详细教程

    最新3.1.2版本独立微信社群人脉系统社群空间站最新源码开源+详细教程 3.1.0旧版本传送门:人脉系统3.1.0 3.1.1旧版本传送门:人脉系统3.1.1 功能介绍: 1.微信社群是一个集发布.展 ...

  4. 小程序源码:全网独家小程序版本独立微信社群人脉系统社群空间站最新源码开源+详细教程

    功能介绍: 1.微信社群是一个集发布.展示社群信息.人脉推广的裂变工具/平台. 2.通过人脉广场,将商家信息通过名片进行展示,让资源对接.人脉推广更加便捷高效.为平台带来更多流量,让平台更有价值. 3 ...

  5. KIngcms 5.1版本增加站内链接功能自动给指定关键词加上链接

    站内链接功能对SEO的效果还是很不错的,自动给指定的关键词加上指定的链接.而且可以设置优先级.比如对两个词"SEO"和"SEO优化"都设置有站内链接.但在文章中 ...

  6. 最新3.1.1版本独立微信社群人脉系统社群空间站最新源码开源+详细教程

    功能介绍: 1.微信社群是一个集发布.展示社群信息.人脉推广的裂变工具/平台. 2.通过人脉广场,将商家信息通过名片进行展示,让资源对接.人脉推广更加便捷高效.为平台带来更多流量,让平台更有价值. 3 ...

  7. abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析

    老版Abp对Castle的严重依赖在vnext中已经得到了解决,vnext中DI容器可以任意更换,为了实现这个功能,底层架构相较于老版abp,可以说是进行了高度重构.当然这得益于.Net Core的D ...

  8. 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 包括图中模型以及一个仿真设置要点word文档教程

    永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程 ID:69100643350855880陈cola

  9. php文件直链源码,蓝奏网盘文件夹直链解析源码

    蓝奏网盘文件夹直链解析源码 @晶晶易.版本 2 .支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 .局部变量 返回文本, 文本型 .局部变量 ...

最新文章

  1. Python学习--not语句
  2. js---PC端滑动进度条
  3. extlink.php,ExtJs 学习笔记基础篇 Ext组件的使用_extjs
  4. python os.system 不打印_Python初体验之我爱你
  5. SAP S/4HANA表结构之变
  6. 一个个人网站如何融资一千万
  7. 2014年4月5日 java集合框架总结2--List接口及其子类
  8. 在StackBlitz上进行rxjs编程练习
  9. Android下基于线程池的网络访问基础框架
  10. SAP License:获利分析的两种方式比较
  11. 利用思科 Webex中的3个漏洞,以 ghost 用户身份参会
  12. apk反汇编之smali语法
  13. 笑哭了!日本网友求助如何卸载360浏览器,过程堪比“ 拆弹 ”...
  14. IOS - 苹果微信不打开收不到新消息提醒怎么办?
  15. airpods版本号_怎么看airpods版本号 苹果airpods查看固件版本教程详解
  16. 获取本周周一和周末日期、上周周一和周末、下周周一和周末
  17. upc组队赛16 GCDLCM 【Pollard_Rho大数质因数分解】
  18. 第一台数字电子计算机占地面积为,计算机应用基础教学课件作者刘凤第1章.ppt...
  19. 看完这篇JVM内存管理机制,面试再也不慌了!
  20. 多目标优化之帕累托最优

热门文章

  1. 使用Speech Synthesis API 做语音播放
  2. Zynq UltraScale+ MPSoC EV系列VCU应用通路搭建
  3. 旺店通与金蝶云星空对接集成采购入库单接口
  4. 计算机组成原理 基础知识
  5. 《ERP原理》期末复习——第三章 erp为企业带来的效益
  6. 林大OJ习题 2020年1月11日
  7. 循环冗余检验CRC原理
  8. Tomcat进程占用CPU过高怎么办?
  9. Python:计算天干地支
  10. Fog Volume渲染算法实现