seq-sqr-drv交互 -- 源码浅析

2023-11-02 10:20
文章标签 源码 浅析 交互 seq sqr drv

本文主要是介绍seq-sqr-drv交互 -- 源码浅析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

seq-sqr-drv交互 -- 源码浅析

  • sequence启动流程
  • transaction发送流程
  • 基于m_req_fifo同步
  • 基于id的同步
  • 关于sqr和drv的连接

sequence启动流程

在这里插入图片描述

transaction发送流程

在这里插入图片描述

基于m_req_fifo同步

  • m_req_fifo属于uvm_sequencer_param_base的成员变量(uvm_tlm_fifo类型); send_request是uvm_sequencer_param_base的成员函数;wait_for_item_done属于uvm_sequencer_base的成员函数
  • finish_item中调用send_request将待发送的trans放入m_req_fifo中
  • driver中通过get_next_item从m_req_fifo中取trans发到总线上
    在这里插入图片描述

基于id的同步

  • 此处的id指的是trans的sequence_id和transaction_id
  • 一个seq会在start_item中为当前seq在当前sqr上分配sequence_id(通过start_item -> wait_for_grant -> m_register_sequence完成),即为m_sqr_seq_ids关联数组赋值
  • 一个trans在通过send_request发送出去的时候就会打上sequence_id和transaction_id,具体流程参考sequence responese — set_id_info
  • sequence中通过wait_for_item_done任务来等待当前trans发送完成(wait_for_item_done实际属于uvm_sequencer_base的成员函数)
  • wait_for_item_done会将启动sqr(uvm_sequencer_base类型)中两个id置为-1,然后wait这两个值等于真实值;driver发送完当前trans后,会通过item_done函数将这两个id改成实际的sequence_id和transaction_id值,至此wait_for_item_done就能结束等待,开始下一笔操作
    在这里插入图片描述

关于sqr和drv的连接

通过源码可以发现,get_next_item/item_done/put_response等task的具体实现都在uvm_sequencer类或其父类中,那么drv中通过seq_item_port.get_next_item的时候是如何调用到sqr中的get_next_item呢?个人猜测与connect函数有关(暂时没有找到相关代码实现)

  • 首先看看seq_item_port,它是参数化类uvm_post_base#(uvm_sqr_if_base)的子类,seq_item_port.get_next_item实际上是调用的uvm_sqr_if_base类中的get_next_item,但是不清楚它是如何引到sequencer侧的 😕
    在这里插入图片描述
  • 再看看seq_item_export,可以看出seq_item_export实际是一个imp,基于port和imp的理解,对port.xx的调用实际上是对imp.xx的调用(比如write函数等),所以seq_item_port.get_next_item实际调用的是seq_item_export.get_next_item,也就是调用的sequencer.get_next_item
    在这里插入图片描述
  • 最后再看看connect函数:没有找到预想中seq_item_port和seq_item_export是如何建立关系的代码,哪位大佬知道的话可以留言指导一下🙏
    在这里插入图片描述

这篇关于seq-sqr-drv交互 -- 源码浅析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329937

相关文章

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

浅析Java如何保护敏感数据

《浅析Java如何保护敏感数据》在当今数字化时代,数据安全成为了软件开发中至关重要的课题,本文将深入探讨Java安全领域,聚焦于敏感数据保护的策略与实践,感兴趣的小伙伴可以了解下... 目录一、Java 安全的重要性二、敏感数据加密技术(一)对称加密(二)非对称加密三、敏感数据的访问控制(一)基于角色的访问

Python与Java交互出现乱码的问题解决

《Python与Java交互出现乱码的问题解决》在现代软件开发中,跨语言系统的集成已经成为日常工作的一部分,特别是当Python和Java之间进行交互时,编码问题往往会成为导致数据传输错误、乱码以及难... 目录背景:为什么会出现乱码问题产生的场景解决方案:确保统一的UTF-8编码完整代码示例总结在现代软件

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J