低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制

devtools/2024/11/24 4:25:51/

在这里插入图片描述

本节目录

一、设计背景
二、设计思路
三、逻辑设计框架
四、仿真验证
五、上板验证
六、往期文章链接

本节内容

一、设计背景

通常,芯片手册或者IP都会提供一系列的用户寄存器以及相关的定义,用于软件开发人员进行控制底层硬件来调试,或封装API提供给用户侧使用。相同的设计思路,也适用于FPGA开发,在FPGA内部自定义一系列的寄存器,包括:业务寄存器和调试寄存器等等。好处有两个方面,一方面方便FPGA工程师用来调试,定位bug,优化修改代码;二是可以灵活的开发给软件,由软件人员根据寄存器的手册进行二次封装,从而实现客户的各类需求。当然,若因为新增客户需求而不断修改调试FPGA代码,是否考虑前期设计的代码的兼容性,可以通过寄存器方式支持不同功能需求的切换,从而满足客户的应用场景。

二、设计思路

那么如何从串口实现FPGA内部寄存器的控制?
设计的想法,灵感来源于内部AXILITE总线,一种轻量级的寄存器读写访问总线,总线通过五个通道实现内部axilite寄存器的读写控制。
串口内容如何与AXILITE的五个通道进行一一映射?
用过AXILITE总线的FPGA开发者,或多或少都了解这个总线信号五个通道,相当多,也有直接逻辑控制各个通道的信号,而此处的思路是引入wishbone总线,通过控制wishbone总线的读写,借助于成熟开源的wishbone总线转换AXI总线的模块,从而实现axilite寄存器的读写控制。
在这里插入图片描述

三、逻辑设计框架

工程源码中vivado版本为2022.2,仿真采用Modelsim2020.4,当然用vivado自带的也可以进行仿真验证。
设计框架中,通过宏定义实现两套代码的仿真验证以及上板,需要对应修改xdc的管脚约束。①是frame实现axilite寄存器的读写控制;②是loop的fifo环回测试。
uart_frame代码:内部自定义AXILITE寄存器,包括只读寄存器、可读可写寄存器的定义。在uart_frame_ctrl中,当PC电脑端发送寄存器写数据帧时,解析来自串口的数据,生成wishbone的写控制,完成axilite的寄存器的写入操作,同时,将接收的数据组帧后,并发送至PC串口显示。当PC电脑端发送寄存器读数据帧时,解析来自串口的数据,生成wishbone的读控制,完成axilite的寄存器的读取操作,同时,将读取的数据组帧后,并发送至PC串口显示。
uart_loop代码,上篇文章已经描述了具体的实现细节,此处就不过多描述了。
在这里插入图片描述

四、仿真验证

在testbench文件中,通过组帧实现固定数据帧的发送,从而实现fpga内部寄存器的读写控制,包括:读FPGA的版本号,读写测试寄存器以及通过控制led寄存器修改led的状态。
在这里插入图片描述
在这里插入图片描述

五、上板验证

//读版本寄存器32’h80000000
//A1B2C3D4800000000000000000000001A6B7C8D9
在这里插入图片描述
在这里插入图片描述

//写测试寄存器32’h80000004
//A1B2C3D4800000046666666600000001A6B7C8D9
在这里插入图片描述

//读测试寄存器32’h80000004
//A1B2C3D4800000040000000000000000A6B7C8D9
在这里插入图片描述

六、往期文章链接

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.ppmy.cn/devtools/136453.html

相关文章

Leetcode 每日一题 167 .两数之和

目录 引言 问题背景 输入输出规范 输入 输出 示例解析 示例 1 示例 2 示例 3 算法策略 Java代码实现 复杂度分析 结语 引言 在算法的世界里,有些问题虽然简单,但却是锻炼算法思维的绝佳练习。今天,我们将深入探讨一个在面试中经…

Zabbix:使用CentOS 9,基于LNMP平台,源码部署Zabbix 7。

ZBX:源码部署Zabbix 7 一、Zabbix概述1. 什么是zabbix2. 为什么学习zabbix3. 逻辑架构3. 实验环境4. 软件下载: 二、安装前的系统准备工作1. 配置主机名2. 关闭防火墙3. 关闭selinux4. 配置yum源5. 配置时钟同步6. 优化系统限制7. 安装JDK 三、部署LNMP环…

猎板科技:PCB 特殊定制领域的卓越引领者

一、专业团队,创新设计之源 猎板科技的核心竞争力首先源于其卓越的专业团队。这支队伍汇聚了经验丰富的资深工程师以及行业前沿的技术专家,他们在 PCB 设计领域拥有深厚的造诣和敏锐的洞察力。无论是面对常规 PCB 设计任务,还是应对极具挑战…

SpringBoot学习记录(六)配置文件参数化

SpringBoot学习记录(六)配置文件参数化 一、参数提取到配置文件中二、yml配置文件三、ConfigurationProperties注解实现批量属性注入 一、参数提取到配置文件中 定义在代码中的参数的值分散在各个不同的文件中,不便于后期维护管理&#xff0…

浅谈vue3 和 vue2的区别

vue3中不再导出一个Vue的构造函数,而是具名导出很多数据不给用户提供Vue构造函数来创建vue实例,使用一个具名导出的createApp,然后传入一个根组件来创建,然后返回一个类似于vue实例的对象,调用mount方法来实现挂载组件…

使用 vscode 调试 nodejs 代码

继前一篇:使用 cmake.js 在 Windows 上编译 js 代码 我们已经能在 vscode 上成功的编译出 js 代码,那我们该如何断点调试 js 代码以及 js 引用的 C 库源码呢 首先要先以 Debug 模式编译 js 代码 cmake-js clean cmake-js compile -D找到 debug 生成的 pd…

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:分享|16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括: 1. 人…

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下,比如1s需要10w次的采样结果,可以考虑使用定时器触发采样,定时器设置多少的时间就会多久采样转换一次。 再加上使用dma,采样的结果直接放在dma的数组里面。 实现了自动采样,自动…