低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

在这里插入图片描述

本节目录

一、设计思路
二、loop环回模块
三、仿真模块
四、仿真验证
五、上板验证
六、往期文章链接

本节内容

一、设计思路

串口数据的收发回环测试,最简单的硬件测试是把Tx和Rx连接在一起,然后上位机进行发送和接收测试,但是需要考虑到串口数据的缓存,通常软件驱动侧也会实现串口接收数据的缓存,或者通过一个环形buffer进行串口接收数据的处理。
当然,若PC端串口只发送一个字节,FPGA内部可以直接将数据回环发送至PC。显然应用时候不可能如此,因此在FPGA内部需要预留一定的缓存,常用的设计思路通过FIFO将接收的数据缓存处理。在FPGA发送串口数据的时候,也需要给PC端串口留一定的处理时间,否则可能会发送因发送过快,导致上位机串口无法响应。
在这里插入图片描述

串口接收模块,用来接收上位机发送的数据;串口发送模块,用于将数据发回上位机;数据环回,负责把从串口接收模块接收到的数据送给串口发送模块,以实现串口数据的环回。
在这里插入图片描述

仿真模块,用于模拟上位机实现PC串口数据发送和PC串口接收FPGA的回环数据。通过仿真比对,PC发送的数据和接收的数据是否一致,从而判断数据的正确性。
在这里插入图片描述

二、loop环回模块

串口loop环回模块,主要是通过一个FIFO缓存串口接收的数据,在将FIFO中的数据一个一个字节发送。
采用uart_rx模块的数据有效作为FIFO的写入控制,每个字节有效时候,写入FIFO。串口数据的发送,则以FIFO的非空标志作为启动,读取FIFO内的数据并通过uart_tx将数据发送出去。通过发送接收uart_tx_stop,控制tx_start,每发送一个字节后停止发送,检查FIFO的状态,从而实现FIFO的非空启动。
在这里插入图片描述

三、仿真模块

宏定义`define SIM的方式,将工程中的uart的时钟与复位信号,引入至仿真模块,此处设计的好处,保证仿真uart和工程模块中的uart所使用的逻辑功能在一个时钟域下。
需要注意的是:编译的时候需要把仿真宏定义注释掉。
在这里插入图片描述

采样task任务封装实现串口数据帧的发送,当然开发者也可以自定义业务的帧头帧尾以及帧内容。
在这里插入图片描述

四、仿真验证
仿真中sim_uart_tx模拟上位机的发送数据,sim_uart_rx模拟上位机的接收数据,在仿真模块中frame task产生固定的串口帧格式发送数据:
帧头为a1b2c3d4
中间数据32’h80002000,32’h000000001,32’h000000001
帧尾为a6b7c8d9
从仿真中可以看出来,第一帧的数据与输入的测试激励一致。
在这里插入图片描述

仿真中sim_uart_tx模拟上位机的发送数据,图中可以sim_uart_tx的字节a1比uart_rx的字节a1更早,并且两种的数值一致。
在这里插入图片描述

仿真中sim_uart_rx模拟上位机的接收数据,图中可以uart_tx的字节a1比sim_uart_rx的字节a1更早,并且两种的数值一致。
在这里插入图片描述

五、上板验证

上板验证,采用的是正点原子的7020开发板,自定义GPIO作为串口的收发pin,通过CH340的模块与PC的usb端口相连,上位机软件进行串口数据的发送与接收。
在这里插入图片描述

六、往期文章链接

UltraScale+FPGA中Serdes的多lane对齐异常解决方案
vivado时序报告中slack是如何计算的?如何优化时序?
UltraScale+FPGA中GTY的TX路径时钟详解——以40G的ETH MAC IP为例
vivado时序优化——约束异步时钟组set_clock_groups
基于FDMA和AXI4接口的DDR4遍历读写测试
基于fpga的图像处理之3x3_5x5算子模板设计
基于fpga的图像处理之3x3_5x5算子模板中值排序
基于fpga的图像处理之图像灰度化处理(Vivado+Modelsim+Matlab联合仿真验证)
AXI协议之AXILite开发设计(一)
AXI协议之AXILite开发设计(二)
AXI协议之AXILite开发设计(三)
AXI协议之AXILite开发设计(四)
AXI协议之AXILite开发设计(五)
FPGA和Matlab的FFT功能验证(一)
FPGA和Matlab的FFT功能验证(二)
FPGA和Matlab的FFT功能验证(三)
跟小灰灰一起学vivado:7系列FPGA的MultiBoot和Fallback功能更新固件
跟小灰灰一起学vivado:7系列FPGA配置模式之配置数据文件格式和配置时序步骤
跟小灰灰一起学vivado:7系列FPGA配置模式之主SPI四路(x4)
跟小灰灰一起学vivado:PCIe XDMA实现远程更新FPGA固件
Xilinx UltraScale+DDR4项目开发(一)——DDR4 MIG的ip接口信号

Xilinx UltraScale+DDR4项目开发(二)——DDR4 MIG的时钟网络
Xilinx UltraScale+DDR4项目开发(三)——DDR4器件选型与MIG IP的配置
低速接口项目之串口Uart开发(一)——串口UART
低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试
低速接口项目之串口Uart开发(三)——串口发送模块和接收模块
低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制
低速接口项目之串口Uart开发(五)——QT实现Uart串口寄存器读写工具
低速接口项目之串口Uart开发(六)——zynq系列ps-pl端uart实现共享Axilite内部寄存器的读写
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
低速接口项目之串口Uart开发(八)——如何通过ps侧的串口实现zynq的在线升级(一)
低速接口项目之串口Uart开发(九)——如何通过ps侧的串口实现zynq的在线升级(二)
低速接口项目之串口Uart开发(十)——基于EMIO的自定义PL串口实现zynq的在线升级

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

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

相关文章

机器学习系列----关联分析

目录 1. 关联分析的基本概念 1.1定义 1.2常用算法 2.Apriori 算法的实现 2.1 工作原理 2.2 算法步骤 2.3 优缺点 2.4 时间复杂度 2.5实际运用----市场购物篮分析 3. FP-Growth 算法 3.1 工作原理 3.2 算法步骤 3.3 优缺点 3.4 时间复杂度 3.5实际运用——网页点…

二叉树路径相关算法题|带权路径长度WPL|最长路径长度|直径长度|到叶节点路径|深度|到某节点的路径非递归(C)

带权路径长度WPL 二叉树的带权路径长度(WPL)是二叉树所有叶节点的带权路径长度之和,给定一棵二叉树T,采用二叉链表存储,节点结构为 其中叶节点的weight域保存该节点的非负权值,设root为指向T的根节点的指针,设计求W…

Ubuntu ESP32开发环境搭建

文章目录 ESP32开发环境搭建安装ESP-IDF搭建一个最小工程现象 ESP32开发环境搭建 最近有个小项目需要用到能够联网的mcu驱动,准备玩玩esp的芯片,记录下ESP32开发环境搭建的过程。 ESP-IDF 是乐鑫科技为其 ESP32 系列芯片提供的官方开发框架。这个框架主…

2024.5 AAAiGLaM:通过邻域分区和生成子图编码对领域知识图谱对齐的大型语言模型进行微调

GLaM: Fine-Tuning Large Language Models for Domain Knowledge Graph Alignment via Neighborhood Partitioning and Generative Subgraph Encoding 问题 如何将特定领域知识图谱直接整合进大语言模型(LLM)的表示中,以提高其在图数据上自…

《SpringBoot、Vue 组装exe与套壳保姆级教学》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

django宠物服务管理系统

摘 要 宠物服务管理系统是一种专门为宠物主人和宠物服务提供商设计的软件。它可以帮助用户快速找到附近的宠物医院、宠物美容店、宠物寄养中心等服务提供商,并预订相关服务。该系统还提供了一系列实用的功能。通过使用宠物服务管理系统,用户可以更加方便…

docker 容器运行Ruoyi-cloud

1,linux系统安装openjdk1.8,mvn,dokcer,node,git 2,拉取代码 1)查看gitee仓库地址 2)创建/app文件夹,进入app目录 mkdir /app cd /app 3)clone代码 4)修改配置文件中nacos地址 # 修改注…

Linux运维篇-iscsi存储搭建

目录 概念实验介绍环境准备存储端软件安装使用targetcli来管理iSCSI共享存储 客户端软件安装连接存储 概念 iSCSI是一种在Internet协议上,特别是以太网上进行数据块传输的标准,它是一种基于IP Storage理论的存储技术,该技术是将存储行业广泛…

《Spring 数据访问:高效整合数据库与 ORM》

一、Spring 数据访问概述 Spring 在数据访问方面具有至关重要的地位,它为开发者提供了强大而高效的数据访问解决方案。 (一)强大的数据访问支持 Spring 提供了多种数据访问方式,以满足不同项目的需求。JDBC 是一种传统的数据访问…

AMD(Xilinx) FPGA配置Flash大小选择

目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢? 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时,选择合适的配置Flash是我们进行硬件设计必须考虑的,那么配置Flash大小的选择由什…

解读缓存问题的技术旅程

目录 前言1. 问题的突发与初步猜测2. 缓存的“隐身术”3. 缓存策略的深层优化4. 反思与感悟结语 前言 那是一个普通的工作日,团队例行的早会刚刚结束,我正准备继续优化手头的模块时,突然收到了用户反馈。反馈的内容是部分数据显示异常&#…

Block Successive Upper Bound Minimization Method(BSUM)算法

BSUM优化方法学习 先验知识参考资料1 A Unified Convergence Analysis of Block Successive Minimization Methods for Nonsmooth OptimizationSUCCESSIVE UPPER-BOUND MINIMIZATION (SUM) 连续上限最小化算法THE BLOCK SUCCESSIVE UPPER-BOUND MINIMIZATION ALGORITHM 块连续上…

开源 AI 智能名片 2+1 链动模式商城小程序:场景驱动的商业创新与用户价值挖掘

摘要:本文围绕开源 AI 智能名片 21 链动模式商城小程序源码,深入分析了场景中的时间、空间、设备、社交和状态五大核心元素。阐述了各元素的表现形式、应用策略及价值,包括时间元素对业务周期和用户行为的影响及相应营销策略;空间…

【PyTorch】Pytorch中torch.nn.Conv1d函数详解

1. 函数定义 torch.nn.Conv1d 是 PyTorch 中用于一维卷积操作的类。定义如下: 官方文档:https://pytorch.ac.cn/docs/stable/generated/torch.nn.Conv1d.html#torch.nn.Conv1d torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride1,paddi…

绿光一字线激光模组:工业制造与科技创新的得力助手

在现代工业制造和科技创新领域,绿光一字线激光模组以其独特的性能和广泛的应用前景,成为了不可或缺的关键设备。这种激光模组能够发射出一条明亮且精确的绿色激光线,具有高精度、高稳定性和长寿命的特点,为各种精密加工和测量需求…

【Linux】【Shell】Shell 基础与变量

Shell 基础 Shell 基础查看可用的 Shell判断当前 Shell 类型 变量环境变量查看环境变量临时环境变量永久环境变量PATH 变量 自定义变量特殊赋值(双引号、单引号、反撇号) 预定义变量bashrc Shell 基础 Shell 是一个用 C 语言编写的程序,相当于是一个翻译&#xff0c…

【SQL50】day 2

目录 1.每位经理的下属员工数量 2.员工的直属部门 3.判断三角形 4.上级经理已离职的公司员工 5.换座位 6.电影评分 7.修复表中的名字 8.患某种疾病的患者 9.删除重复的电子邮箱 1.每位经理的下属员工数量 # Write your MySQL query statement below #e1是经理,…

FIFO和LRU算法实现操作系统中主存管理

FIFO&#xff0c;用数组实现 1和2都是使用nextReplace实现新页面位置的更新 1、不精确时间&#xff1a;用ctime输出运行时间都是0.00秒 #include <iostream> #include <iomanip> #include<ctime>//用于计算时间 using namespace std;// 页访问顺序 int pa…

ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;资源共享平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本资源共享平台就是在…

LeetCode 力扣 热题 100道(六)合并两个有序链表(C++)

合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[]示…