FPGA-UART串口接收模块的理解

news2024/11/28 18:56:24

UART串口接收模块

背景

        在之前就有写过关于串口模块的文章——《串口RS232的学习》。工作后很多项目都会用到串口模块,又来重新理解一下FPGA串口接收的代码思路。

        关于串口相关的参数,以及在文章《串口RS232的学习》中已有详细的描述,这里就不过多的赘述了。

uart_rx模块理解

        一般来说,用FPGA实现串口数据的接收,其模块的输入和输出大多都会写成以下形式。

        在该模块的输入端,时钟和复位信号不必多说;FPGA模块的Rx信号则是通过串口线与上位机的Tx端相连接进行数据的传输。

        而在该模块的输出端,Rx_ready信号代表一帧数据(起始位+数据+校验位+停止位,校验位不一定有)的接收完成,当上位机传输了一帧数据之后,Rx_ready信号会被拉高一个时钟周期,代表接收到了一帧数据;而Rx_data一般代表一帧数据中的8位数据,当Rx_ready信号被拉高时,Rx_data=上位机发送过来的8位数据。

uart_rx接收数据后的处理 

        假设上位机向我们的FPGA板卡发送9 Byte的数据,这9 Byte的数据分别为8'H11、8'H22、8'H33、8'H44、8'H55、8'H66、8'H77、8'H88、8'H99。我们应该如何接收呢?

        在不考虑超时处理和校验处理的情况下,可以用以下代码来接收上位机向FPGA板卡发送的数据。


parameter MAX_RX_DATA_NUM = 10;//接收最大的字节个数,假设为10

reg [1:0]	r_rx_ready;			//缓存数据便于采集沿
reg [15:0] 	rx_data_length;		//接收数据的长度
reg [MAX_RX_DATA_NUM*8-1:0] rx_data_sum; //每个字节为10Bit,10字节所占的Bit为10*8


//当r_rx_ready=2'b01时,代表一帧数据的接收完成。
always(posedge clk or negedge rst_n)begin
	if(!rst_n)
		r_rx_ready <= 2'b00;
	else
		r_rx_ready <= {r_rx_ready[0],rx_ready}
end

//当r_rx_ready=2'b01时,代表接收到了一个字节的数据,接收数据的长度+1;
//由于接收9字节的数据,则rx_data_length的最大值为8
always(posedge clk or negedge rst_n)begin
	if(!rst_n)
		rx_data_length <= 16’b0;
	else if(r_rx_ready==2'b01)
		rx_data_length <= rx_data_length + 1'b1;
	else
		rx_data_length <= rx_data_length;
end

//将从上位机接收到的9字节数据,先发送的数据存入高位,按序依次放入rx_data_sum中
//此时,rx_data_sum[79:72]=8'H11;rx_data_sum[71:64]=8'H22;.....rx_data_sum[15:8]=8'H99;rx_data_sum[7:0]=8'H00;
always(posedge clk or negedge rst_n)begin
	if(!rst_n)
		rx_data_sum <= 'd0;
	else if(r_rx_ready==2'b01)
		rx_data_sum[((MAX_RX_DATA_NUM-rx_data_length)*8-1)-:8] <= rx_data;
	else
		rx_data_sum <= rx_data_sum;
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux启动mysql报错

甲方公司意外停电&#xff0c;所有服务器重启后&#xff0c;发现部署在Linux上的mysql数据库启动失败.再加上老员工离职&#xff0c;新接手项目&#xff0c;对Linux系统了解不多&#xff0c;解决起来用时较多&#xff0c;特此记录。 1.启动及报错 1.1 启动语句1 启动语句1&a…

Java编程基础(Scanner类==>循环语句)

文章目录 前言一、Scanner类1.创建Scanner对象2.使用3.实践 二、if条件语句1.简单if语句2.if-else语句3.if-else if-else语句3.实践 三、switch 开关语句四、循环语句1.for语句2.while语句3.do-while语句4.break和continue语句 总结 前言 我们发现在学习Java语言编程基础时&am…

【GEE数据库】WRF常用数据集总结

【GEE数据库】WRF常用数据集总结 GEE数据集介绍数据1:MODIS数据集LAI(叶面积指数)和Fpar(绿色植被率)年尺度土地利用类型数据2:月反射率(Monthly Albedo)数据3:LULC和ISA参考GEE数据集介绍 GEE数据搜索网址-A planetary-scale platform for Earth science data &…

(PyTorch) 深度学习框架-介绍篇

前言 在当今科技飞速发展的时代&#xff0c;人工智能尤其是深度学习领域正以惊人的速度改变着我们的世界。从图像识别、语音处理到自然语言处理&#xff0c;深度学习技术在各个领域都取得了显著的成就&#xff0c;为解决复杂的现实问题提供了强大的工具和方法。 PyTorch 是一个…

9.30学习记录(补)

手撕线程池: 1.进程:进程就是运行中的程序 2.线程的最大数量取决于CPU的核数 3.创建线程 thread t1; 在使用多线程时&#xff0c;由于线程是由上至下走的&#xff0c;所以主程序要等待线程全部执行完才能结束否则就会发生报错。通过thread.join()来实现 但是如果在一个比…

08.STL简介

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 2.发展历史 1. 起源与早期探索&#xff08;20世纪80年代初期&#xff09;&#xff…

可变形卷积(Deformable Convolution)是什么?

普通卷积 普通卷积&#xff08;dilation1&#xff09; 普通卷积就是特征图与卷积核的权重W相乘再求和 y(p0​) 表示输出特征图在位置 p0​ 的值。&#x1d465;(&#x1d45d;0&#x1d45d;&#x1d45b;)表示输入特征图在位置 pn​ 的值。&#x1d464;(&#x1d45d;&…

烟火烟雾检测数据集 9600张 烟雾火焰检测 带标注 voc yolo 2类 烟火数据集 烟雾数据集 烟火检测烟雾检测

烟火检测数据集 9600张 烟雾火焰检测 带标注 voc yolo 烟火检测数据集介绍 数据集名称 烟火检测数据集 (Fire and Smoke Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型&#xff08;包括YOLOv5、YOLOv6、YOLOv7等&#xff09;而设计&#x…

malloc源码分析之 ----- 你想要啥chunk

文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码&#xff0c;这里以glibc-2.29为例&#xff1a; void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…

Qt Quick 3D 入门:QML 3D场景详解

随着 Qt 6 的发布&#xff0c;QtQuick3D 模块带来了新的 3D 渲染和交互能力&#xff0c;使得在 Qt 中创建 3D 场景变得更加简单和直观。本文将带您从一个简单的 QML 3D 应用开始&#xff0c;详细讲解各个相关领域的概念、代码实现以及功能特点。 什么是 Qt Quick 3D&#xff1…

C++拾趣——绘制Console中Check Box

大纲 居中显示窗口清屏并重设光标绘制窗口绘制窗口顶部绘制复选项绘制按钮行绘制窗口底部 修改终端默认行为对方向键的特殊处理过程控制Tab键的处理Enter键的处理上下左右方向键的处理 完整代码代码地址 这次我们要绘制复选框&#xff0c;如下图。 居中显示窗口 按照界面库的…

网约班车升级手机端退票

背景 作为老古董程序员&#xff0c;不&#xff0c;应该叫互联网人员&#xff0c;因为我现在做的所有的事情&#xff0c;都是处于爱好&#xff0c;更多的时间是在和各行各业的朋友聊市场&#xff0c;聊需求&#xff0c;聊怎么通过IT互联网 改变实体行业的现状&#xff0c;准确的…

ExcelToWord-Excel套打Word-Word邮件合并工具分享

Excel to Word转换工具分享 在日常工作或学习中&#xff0c;我们常常需要将Excel中的数据导出到Word文档中&#xff0c;以便更好地展示信息。市场上有许多Excel to Word的转换工具&#xff0c;它们各有特色。今天&#xff0c;我们就来推荐几款这样的工具&#xff0c;并探讨一下…

如何使用虚拟机充当软路由

文章目录 前言下载系统把 iso 转为虚拟机使用 VMware 创建虚拟机 前言 很多人需要软路由&#xff0c;但是软路由需要设备的投入&#xff0c;我这里使用虚拟机充当软路由。省下了设备的投入。不过多花了电费。大家自己取舍吧。 下载系统 ImmortalWrt Firmware Selector 在上…

蓝桥等级考试C++组18级真题-2023-06-18

选择题 1 C L18(15分) 已定义double rate 3.921576&#xff1b;以下可以正确输出变量rate 的是()。 A printf("%d",rate)&#xff1b; B printf("%f",rate)&#xff1b; C printf("%ld",rate)&#xff1b; D printf("%r",rate)&#…

PhpStudy-PHP5.4.45后门漏洞应用程序(C++/base64/winhttp)

PhpStudy-PHP5.4.45后门漏洞应用程序&#xff08;C/base64/winhttp&#xff09; 前言引言&#xff08;时间回到多年前&#xff09; PhpShellCmd.exe使用介绍&#xff1a;&#xff08;1&#xff09;输入网址检测是否存在PHP/5.4.45&#xff08;2&#xff09;whoami&#xff08;3…

新闻推荐系统:Spring Boot与大数据

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

IP协议报文

一.IP协议报头结构 二.IP协议报头拆解 1.4位版本 实际上只有两个取值&#xff0c;分别是4和6&#xff0c;4代表的是IPv4&#xff0c;6代表的是IPv6。 2.4位首部长度 IP协议报头的长度也是边长的&#xff0c;单位是*4&#xff0c;这里表示的大小为0~15&#xff0c;当数值为1…

昇思学习打卡营第31天|深度解密 CycleGAN 图像风格迁移:从草图到线稿的无缝转化

1. 简介 图像风格迁移是计算机视觉领域中的一个热门研究方向&#xff0c;其中 CycleGAN (循环对抗生成网络) 在无监督领域取得了显著的突破。与传统需要成对训练数据的模型如 Pix2Pix 不同&#xff0c;CycleGAN 不需要严格的成对数据&#xff0c;只需两类图片域数据&#xff0c…

【redis学习篇1】redis基本常用命令

目录 redis存储数据的模式 常用基本命令 一、set 二、keys pattern keys 字符串当中携带问号 keys 字符串当中携带*号 keys 【^字母】 keys * 三、exists 四、del 五、expire 5.1 ttl命令 5.2key删除策略 5.2.1惰性删除 5.2.2定期删除 六、type key的数据类型…