0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何Dump IP中的寄存器及寄存器的意义

OpenFPGA 来源:赛灵思工程师 作者:Fancheng Meng 2022-07-15 09:09 次阅读

QDMA的驱动在进行版本升级时,可能会对部分寄存器的数值进行变更,用户如果要进行升级,推荐升级到最新的Vivado和驱动版本。如果驱动和Vivado之间的版本相差较大,有时会遇到c2h_cmpt_ready为0的情况,此时IP无法进行数据的传输,这种情况通常在传输大包或者大流量数据的时会出现,遇到这种情况可将QDMA IP的prefetch depth参数进行修改,以改善传输性能。

77a91c7c-03d6-11ed-ba43-dac502259ad0.png

如果是IP在传输中发生了错误或者出现了丢包的情况,就需要使用ILA IP来抓取QDMA IP中的信号和Dump QDMA IP中的寄存器来进行分析,下面重点讲解下如何Dump IP中的寄存器、重点对哪些寄存器进行分析以及寄存器的意义。

Dump 寄存器:

通过以下网站下载QDMA driver, 运行test app中的reg_dump指令来dump QDMA 寄存器的值和context data。

https://github.com/Xilinx/dma_ip_drivers

寄存器的dump操作可以参考下面网址中的user guide界面。
https://xilinx.github.io/dma_ip_drivers/master/QDMA/DPDK/html/userguide.html

寄存器数值代表的意义可以从在PG302的124页的Register Reference File可以下载到,如下图所示:

77b6b4e0-03d6-11ed-ba43-dac502259ad0.png    

对dump出的寄存器进行分析:

使用test app dump出的寄存器的数目太多,本文重点以下几个寄存器进行分析并举例说明:

QDMA_C2H_STAT_DEBUG_DMA_ENG_3
QDMA_C2H_STAT_DEBUG_DMA_ENG_4
C2H_DROP_DESC_RSP_LEN
C2H_DROP_QID_FIFO_LEN
C2H_DROP_PLD_CNT
QDMA_C2H_STAT_DEBUG_DMA_ENG_3 是一个32 bit的寄存器,涵盖了许多重要信号的状态信息,是非常重要的debug寄存器,每一个bit位代表的意义及寄存器默认的数值如下:

77c56490-03d6-11ed-ba43-dac502259ad0.png

在对寄存器的数值进行分析时,需要重点关注3、4、5比特,当3、4、5为低是表明IP并未遇到传输错误,那么错误应该是发生在IP传输数据之前,需要对在数据传输前的驱动配置阶段进行分析和定位。

一般IP内发生传输错误时,此寄存器的3、4、5位比特会被置高,当wrq_packet_out_data_marker为高时,需要检查在工程设计中是否使用了s_axis_c2h_cmpt_ctrl_no_wrb_marker信号,此信号的意义如下:
The DMA also has an option not to send completion information to completion ring during a
Marker packet. Port s_axis_c2h_cmpt_ctrl_no_wrb_marker can be set during a marker
packet. This option disables any write to completion ring when that Marker packet is generated.
When this signal is set for a Maker packet, the DMA has no data or completion transfers, but will
respond with maker response on qsts_out_op[7:0].

如果没有使用此信号,说明IP的传输出现了不可修复的错误,需要通过其他的寄存器进行进一步的分析,通常在3、4、5bit被置为高时,此寄存器的0,1bit不会全为高,IP会挂起并停止数据的传输。IP的传输错误有可能是发送了过量的描述符,时序问题及逻辑设计的不规范,下面对在遇到IP 传输错误时的定位方法进行举例说明:

当发现QDMA_C2H_STAT_DEBUG_DMA_ENG_3的3,4,5比特为高时,可以去查找与丢包相关的寄存器,例如:C2H_DROP_DESC_RSP_LEN,C2H_DROP_QID_FIFO_LEN和C2H_DROP_PLD_CNT。这三个寄存器所代表的意义分别如下所示:

77d7a7f4-03d6-11ed-ba43-dac502259ad0.png

因为操作不当导致IP发生丢包时,C2H_DROP_DESC_RSP_LEN,C2H_DROP_QID_FIFO_LEN和C2H_DROP_PLD_CNT 三个寄存器的数值分别为在IP丢包时:描述符的长度、Qid Fifo中的包长和负载Fifo 0中的信用值。当IP发生丢包时,根据以上三个寄存器的前18bit的数值,会比较容易判断驱动或者工程中可能存在的问题。

原文标题:开发者分享|QDMA与driver的问题定位和分析

文章出处:【微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5305

    浏览量

    119923
  • 数据
    +关注

    关注

    8

    文章

    6852

    浏览量

    88771
  • bit
    bit
    +关注

    关注

    0

    文章

    47

    浏览量

    31976

原文标题:开发者分享|QDMA与driver的问题定位和分析

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Modbus协议的读取保持寄存器

    功能码用于读取从设备保持寄存器的内容,不支持广播模式。消息顿中指定了需要读取的保持寄存器的起始地址和数目。而保持寄存器各地址的具体内容和意义
    的头像 发表于 10-30 10:54 310次阅读

    寄存器间接寻址和寄存器寻址的区别

    寄存器间接寻址和寄存器寻址是计算机体系结构两种重要的寻址方式,它们在指令执行过程起着关键作用。下面将从定义、原理、特点、应用场景以及区别等方面对这两种寻址方式进行详细阐述。
    的头像 发表于 10-05 17:13 699次阅读

    寄存器的类型和作用

    在计算机科学寄存器(Register)是一种高速存储单元,它位于CPU内部,与CPU的运算单元和逻辑控制单元紧密相连。寄存器的主要作用是暂时存储指令、操作数和地址等临时数据,以便CPU快速访问和处理。由于
    的头像 发表于 09-05 14:11 956次阅读

    数字寄存器的原理和使用

    数字寄存器是计算机体系结构至关重要的组成部分,其原理和使用对于理解计算机的工作原理和数据存储方式具有重要意义
    的头像 发表于 09-05 14:08 380次阅读

    寄存器故障分析

    寄存器故障分析是计算机硬件维护与系统稳定性保障的重要环节。寄存器作为计算机的关键组成部分,负责存储和传输数据,其稳定性和可靠性直接影响到整个计算机系统的性能。以下是对
    的头像 发表于 08-29 11:26 722次阅读

    寄存器是什么意思?寄存器是如何构成的?

    在计算机科学寄存器(Register)是一个高速存储单元,它位于中央处理(CPU)内部,用于存储计算机程序执行过程中所需要的数据、指令地址或状态信息。寄存器是计算机体系结构
    的头像 发表于 08-02 18:23 3116次阅读
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何构成的?

    寄存器寻址和直接寻址的区别

    寄存器寻址和直接寻址是计算机指令系统的两种基本寻址方式。它们在指令的执行过程起着至关重要的作用,决定了指令操作数的来源和目标。下面我们将介绍这两种寻址方式的特点、区别以及在实际应用
    的头像 发表于 07-12 10:42 1211次阅读

    寄存器寻址的实现方式

    在计算机体系结构寄存器寻址是一种常见的寻址方式,它允许程序直接访问CPU内部的寄存器寄存器寻址可以提高程序的执行效率,因为它避免了对内存的访问。
    的头像 发表于 07-12 10:36 530次阅读

    寄存器分为基本寄存器和什么两种

    寄存器是计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。 一、基本寄存器
    的头像 发表于 07-12 10:31 1057次阅读

    移位寄存器右移是怎么移位的

    移位寄存器是一种在数字电路和计算机科学中广泛使用的存储设备,它可以用来存储和传输数据。在移位寄存器,数据可以通过移位操作来实现数据的传输和处理。移位寄存器的移位操作有两种基本形式:左
    的头像 发表于 07-12 10:14 894次阅读

    干货满满:ARM的内核寄存器讲解

    内核寄存器与外设寄存器: 内核寄存器与外设寄存器是完全不同的概念。内核寄存器是指 CPU 内部的寄存器
    发表于 04-17 11:47 2808次阅读
    干货满满:ARM的内核<b class='flag-5'>寄存器</b>讲解

    如何根据自己设计寄存器配置总线定义来生成一套寄存器配置模版

    无论是FPGA还是ASIC,系统设计总会存在配置寄存器总线的使用,我们会将各种功能、调试寄存器挂载在寄存器总线上使用。
    的头像 发表于 03-04 13:56 1037次阅读
    如何根据自己设计<b class='flag-5'>中</b>的<b class='flag-5'>寄存器</b>配置总线定义来生成一套<b class='flag-5'>寄存器</b>配置模版

    CPU的6个主要寄存器

    CPU寄存器是中央处理内的组成部分,是有限存贮容量的高速存贮部件。寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制
    的头像 发表于 02-03 15:15 3802次阅读

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一种用于在数字电路实现数据移位操作的基本电路元件。它由多个触发以及相关控制电路组成,具有存储、接受和移动数据的功能。移位寄存器可以分为两种类型:串行移位
    的头像 发表于 01-18 10:52 7066次阅读

    寄存器查看的功能和使用

    对于搞嵌入式底层开发的软件或者硬件工程师来说,经常会涉及到查看芯片手册,比如某个芯片的串口控制寄存器值,需要知道这个值对应寄存器的哪些位,微软计算的程序员模式虽然可以查看
    的头像 发表于 11-28 12:26 1817次阅读
    <b class='flag-5'>寄存器</b>查看<b class='flag-5'>器</b>的功能和使用