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

相关文章

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

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++