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

AHB Matrix 四星级 验证笔记(2.4) Tt3.3AHB总线协议测试时的 并行数据

文章目录

  • 前言
  • 一、代码
  • 二、错误
    • 1.地址范围
    • 2. 并行执行线程中变量覆盖的情况
    • 3.有关incr的beat


前言

  1. 来源路科验证
  2. 本节搞定 T3.3 AHB总线协议的覆盖:AHB_PROTOCOL_COVER 即测试ahb slave接口和master接口支持(尽可能)全部的ahb协议传输场景,主要是支持burst传输 (并行发送)
  3. 重点在于如何给地址
  4. 注意该test不是测试映射的完整性的;所以不需要关心整个地址是不是更加完备:即不是把所有的地址都测试完
  5. 关心的是协议的完整性;只需要保证从三个master到三个slave的访问地址之间没有重合;如果重合会给接下来的数据检查的带来问题;如果同一个地址被两个master的写所覆盖的话;时序上面的延迟会对预测带来障碍
  6. 可以加一些约束,让波形是自己所期望的;加的约束越少越好,这样的话协议上各种时序出现的可能性更大;前提是设计没问题,要是设计有问题的话,约束一开始不可以放的太开,那么就要从singl-----burst------wrap一步一步来

一、代码

  1. 思路:先搞定其中的一次并行发送:多个master到多个slave,稳点后,外部套一个repeat,让其多次发送
  2. 具体代码
--------------------------AHB_PROTOCOL_COVER_seq------------------
virtual task body();super.body();`uvm_info("body", "Entered...", UVM_LOW)cfg.enable_scb = 0;cfg.enable_cov = 0;repeat(loop_count) beginfor(int i=0; i< cfg.mst_num; i++) beginautomatic slv_addr_range_t rng = cfg.addrmap.get_addr_range($random_range(0, cfg.slv_num-1));automatic int mid = i;forkmem_check(mid, rng.addr_start + 'h1000*(mid+cfg.mst_num*$random_range(1, 4)));join_noneendwait fork;    //等第一次传输完以后,在repeat第二次end`uvm_info("body", "Exiting...", UVM_LOW)
endtask
  1. automatic int mid = i; mid 是在循环体内部使用 automatic 关键字声明的变量。这种方式会为每次循环迭代创建一个独立的 mid 变量副本。所以每次循环迭代中 mid 的值都是动态的,不会相互干扰。
  2. loop_count别忘记在挂载sequence之前随机
    seq中的代码
    在这里插入图片描述

loop_count设置多少以功能覆盖率能不能达到为准在这里插入图片描述

  1. 如何保证三个master给同一个slave写的话,地址不重合?
    这里给的地址是rng.addr_start + 'h1000*(mid+cfg.mst_num*$random_range(1, 4),可以看作是基地址+偏移地址,目前的burst_size=32bit,地址需要以4字节为单位进行递增;只要给master一个不一样的地址,后面加4都会不一样,这样就保证了地址的不一样,所以重点在于如何设置偏移地址

  2. 将一块地址按照h'100032‘h0200_0000---32‘h0200_FFFF)分的话,共15个区间;32‘h0200_0000---32‘h0200_10004KBburst传输要求的地址边界不超过1KB,所以他会完美的去匹配,无论落到哪一个区间,master哪怕是incr他也不会越界,这样就保证了地址的不重合

  3. mid+cfg.mst_num*$random_range(1, 4)这块的取值要保证最大值不可以超过14(E)(2+3*4)=14

  4. 上面的4的值与mst_num变大和mid都有关

二、错误

1.地址范围

  1. 出现不应该有的地址范围
    在这里插入图片描述
  2. 原因:在随机产生数值时,发生了错误,如果随机到5,最大是2+3*5=17>>14,将一块地址按照h'100032‘h0200_0000---32‘h0200_FFFF分的话,最后一个值是E=15`,共15个区间;所以将随机值区间最大改为4
mem_check(mid, rng.addr_start + 'h1000*(mid+cfg.mst_num*$random_range(1, 5)));

2. 并行执行线程中变量覆盖的情况

  1. 这个错误意味着在并行执行多个序列时,存在某些序列提前完成的情况,导致其他序列的项目无法正常处理。

在这里插入图片描述

  1. 原因:当缺少automatic int mid = i;时,i 产生的新的数会将原先的覆盖,导致i只能是3,原先的依次被覆盖掉了;
--------------------------AHB_PROTOCOL_COVER_seq------------------
virtual task body();
super.body();
`uvm_info("body", "Entered...", UVM_LOW)
cfg.enable_scb = 0;
cfg.enable_cov = 0;for(int i=0; i< cfg.mst_num; i++) beginslv_addr_range_t rng = cfg.addrmap.get_addr_range($random_range(0, cfg.slv_num-1));//automatic int mid = i;forkmem_check(mid, rng.addr_start + 'h1000*(mid+cfg.mst_num*$random_range(1, 4)));join_none
end
`uvm_info("body", "Exiting...", UVM_LOW)
endtask
  1. 解决之道:添加automatic int mid = i;,最好将rng也添加automatic

3.有关incr的beat

在这里插入图片描述

  1. 这里的错误提示数据对比出了问题,到底哪儿出了问题,看的不是很清楚,所以在做有关动态数组对比时,先比较动态数组的size,然后在比较里面的内容,比较每一个数据,
  2. 详细显示的话,会发现是两边的size不一样
    在这里插入图片描述
    在这里插入图片描述
    定位会发现错误的前面是incr传输,他的地址只要不跨越1KB边界即可,到底传了多少拍,不大清楚;不像incr4之类的,他的拍数是固定的在每一次传输的过程中
    在这里插入图片描述
    可以通过该参数记录,在写数据时记录下来,传递给读数据时的约束
    在这里插入图片描述
    如果给的类型是incr。没有给data.size的话会出问题;incr不限定;;;也就是说如果给的burst_typeincr的话,要限定burst_type的长度

相关文章:

AHB Matrix 四星级 验证笔记(2.4) Tt3.3AHB总线协议测试时的 并行数据

文章目录 前言一、代码二、错误1.地址范围2. 并行执行线程中变量覆盖的情况3.有关incr的beat 前言 来源路科验证本节搞定 T3.3 AHB总线协议的覆盖&#xff1a;AHB_PROTOCOL_COVER 即测试ahb slave接口和master接口支持&#xff08;尽可能&#xff09;全部的ahb协议传输场景&am…...

前端零基础学习Day-Eight

CSS字体和文本样式 CSS文字样式 字体&#xff1a;font-family 语法&#xff1a;font-family:[字体1][,字体2][,...] p{font-family:"微软雅黑","宋体","黑体";} 含空格字体名和中文&#xff0c;用英文引号括起 属性值&#xff1a;具体字体名&…...

贪心算法day3(最长递增序列问题)

目录 1.最长递增三元子序列 2.最长连续递增序列 1.最长递增三元子序列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;我们只需要设置两个数进行比较就好。设a为nums[0]&#xff0c;b 为一个无穷大的数&#xff0c;只要有比a小的数字就赋值…...

【论文复现】MSA+抑郁症模型总结(三)

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀MSA抑郁症模型 热门研究领域&#xff1a;情感计算的横向发展1. 概述2. 论文地址3. 研究背景4. 主要贡献5. 模型结构和代码6. 数据集介绍7. 性…...

【软件测试】敏捷模型(Scrum模型)和V模型、W模型

敏捷模型 前面的那些模型以前非常流行&#xff0c;但现在开发人员在使用的时候会遇到各种问题。主要困难包括在项目开发期间处理来自客户的变更请求&#xff0c;以及合并这些变更所需要的高成本和时间。 在实际工作中&#xff0c;一款产品的功能是不断在变化的 所以为了克服这…...

【go从零单排】接口(interface)和多态(Polymorphism)

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在Go语言中&#xff0c;interface 是一种重要的类型&#xff0c;用于定义一组方法…...

SI5319C-C-GM,SiliconLabs芯科 SI5319C-C-GMR,时钟合成器/抖动清除器 封装 QFN-36 在售 20000PCS 23+

SI5319C-C-GM是SiliconLabs公司生产的时钟合成器和抖动清除器。它是一款高性能的时钟解决方案&#xff0c;可用于各种应用领域&#xff0c;包括通信、数据中心、消费电子等。 该器件采用了SiliconLabs独有的DSPLL技术&#xff0c;能够提供低抖动和高精度的时钟信号。它具有多个…...

使用批处理脚本批量删除Maven无效依赖

背景 在开发过程中&#xff0c;我们经常会遇到以下情况&#xff1a; 在pom.xml文件中错误地指定了依赖的名称。因为网络问题&#xff0c;某些依赖下载不完全。依赖版本号错误&#xff0c;导致下载的文件无法使用。 这些情况会导致Maven在本地仓库中留下一些无效的文件&#…...

腾讯cos对象存储,下行流量费贵,是否可以加入服务器减少费用,架构如何设计

腾讯云COS&#xff08;Cloud Object Storage&#xff09;对象存储服务提供了一种高效、安全、低成本的方式存储大量数据。然而&#xff0c;当涉及到外网下行流量时&#xff0c;确实会产生一定的费用&#xff0c;这可能会增加整体的成本。为了减少这些费用&#xff0c;可以通过以…...

【SAP】关于权限的继承

关于权限的父role和子role的权限继承&#xff0c;既可以 从子role主动去父role那里“取”。从父role“推”到子role 我自己之前一直用的是方法1&#xff0c;但由于子role很多&#xff0c;一个一个手工维护花了不少时间。 后来得知有方法2&#xff0c;特此测试。 我准备了父R…...

SpringBoot技术下的共享汽车运营平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理共享汽车管理系统的相关信息成为必然。开发…...

SwiftUI开发教程系列 - 第7章:数据流和状态管理

SwiftUI 的核心优势之一在于其声明式的数据绑定和状态管理系统&#xff0c;使得在多视图间传递和更新数据变得更加直观和高效。在本章中&#xff0c;我们将讨论如何使用 ObservedObject、EnvironmentObject、StateObject 等属性包装器进行复杂的数据管理&#xff0c;确保应用的…...

Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境

学习目标&#xff1a; 在Ubuntu系统上安装CUDA、PyTorch等GPU深度学习环境&#xff0c;主要目标是为深入研究深度学习和深度强化学习提供高效的计算支持。通过构建GPU环境&#xff0c;计划掌握深度学习的基本概念和算法应用&#xff0c;提高模型训练效率&#xff0c;特别是在复…...

电子学会2024年3月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析

我们今天分享的资料是:电子学会2024年3月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析 电子学会 2024 年 3 月青少年软件编程(图形化)等级三级考试的主要考点包括但不限于以下内容: 理解变量的概念:能够新建变量,知道如何在舞台区显示或隐藏变量,理解…...

初学者指南:用例图——开启您的软件工程之旅

目录 背景&#xff1a; 基本组成&#xff1a; 关联&#xff08;Assciation&#xff09;&#xff1a; 包含&#xff08;Include&#xff09;&#xff1a; 扩展&#xff08;Extend&#xff09;&#xff1a; 泛化&#xff08;Inheritance&#xff09;&#xff1a; 完整银行…...

二叉树遍历/算法数据结构

六、树 6.1遍历算法 6.1.1前中后序 在做递归时&#xff0c;最重要是三步骤 确定递归函数的返回值和参数 确定终止条件 确定单层递归的逻辑 伪代码 void travel(cur, vec) {if (cur null) {return ;}vec.push(cur->middle, vec); // 递归中节点vec.push(cur->left, …...

C#字符串的不可变性:内存管理与线程安全的优势分析

在C#编程中&#xff0c;字符串&#xff08;String&#xff09;被设计为不可变对象&#xff0c;这意味着一旦创建字符串对象后&#xff0c;其内容是不可更改的。这种设计通过在每次修改字符串时创建一个新实例&#xff0c;而不是直接更改原有字符串实例&#xff0c;来实现不可变…...

【杂记】之语法学习第四课手写函数与结构体

函数 如同我们数学中学的 f(x) ax b &#xff0c;函数就是把一个东西丢进去&#xff0c;然后进行类似的操作变化&#xff0c;最终得到的可以是一个数&#xff0c;也可能什么都得不到而只是进行一项操作。 如sqrt() &#xff0c; max() 和 swap() 这样的其实都是函数&#x…...

细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程目的 1、目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、不以#开头&#xff0c;但以&#xff1b;结束&#xff0c;长度不限 3、以#开头&#xff0c;不以;结束&#xff0c;也不包含;&#xff0c;长…...

python使用turtle画图快速入门,轻松完成作业练习

turtle介绍 turtle是一个绘图库&#xff0c;可以通过编程进行绘图。其模拟了一个乌龟在屏幕上的运动过程。该库通常用于给青少年学习编程&#xff0c;当然&#xff0c;也可以使用其进行作图。 在一些学校中&#xff0c;可能在python学习的课程中&#xff0c;要求完成turtle绘…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...