当前位置: 首页 > article >正文

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

在这里插入图片描述

本节目录

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

本节内容

一、设计背景

通常,芯片手册或者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.kler.cn/a/405312.html

相关文章:

  • 智慧社区方案提升居民生活质量与管理效率的创新实践
  • 原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型
  • JMeter监听器与压测监控之 InfluxDB
  • 【Linux网络编程】简单的UDP套接字
  • React(二)
  • 蓝队技能-应急响应篇日志自动采集日志自动查看日志自动化分析Web安全内网攻防工具项目
  • 历遍单片机下的IIC设备[ESP--0]
  • 浅谈新能源光储充一体化电站设计方案
  • PyTorch图像预处理:计算均值和方差以实现标准化
  • 网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
  • RocketMQ文件刷盘机制深度解析与Java模拟实现
  • Leecode刷题C语言之统计不是特殊数字的数字数量
  • xbh的比赛
  • Qt 的事件投递机制:从基础到实战
  • 动态调试对安全研究有什么帮助?
  • 设计模式之 模板方法模式
  • vue中路由缓存
  • Python创建虚拟环境报错:Error: Command......
  • 项目中排查bug的思路案例
  • 【Spring MVC】关于Spring MVC编程中与http请求的参数传递的详细介绍
  • 【MySQL系列】深入理解MySQL中的存储、排序字符集
  • Ubuntu20.04从零安装IsaacSim/IsaacLab
  • python内存分析
  • Qt-常用的显示类控件
  • Zookeeper集群搭建Centos环境下
  • ROS机器视觉入门:从基础到人脸识别与目标检测