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) begin
    	for(int i=0; i< cfg.mst_num; i++) begin
        	automatic slv_addr_range_t rng = cfg.addrmap.get_addr_range($random_range(0, cfg.slv_num-1));
        	automatic int mid = i;
        	fork
            	mem_check(mid, rng.addr_start + 'h1000*(mid+cfg.mst_num*$random_range(1, 4)));
        	join_none
    	end
        wait 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++) begin
    slv_addr_range_t rng = cfg.addrmap.get_addr_range($random_range(0, cfg.slv_num-1));
    //automatic int mid = i;
    fork
        mem_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的长度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912102.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDA*算法 Power Calculus————poj 3134

目录 闲聊 前言 DFS算法的无效搜索 BFS算法的空间浪费 IDDFS A*算法 IDA* Power Calculus 问题描述 输入 输出 问题分析 代码 闲聊 前几周在忙着数学竞赛&#xff0c;所以就没时间更新&#xff0c;高等数学&#xff0c;一生之敌&#xff0c;真不知道报名的时候我是怎么想…

权限管理简单练习

1.修改/tmp的权限改为 rwxrwxrwx 2.添加SUID权限到/tmp 3.添加SBIT权限到/tmp目录 4. 使用rhel创建 /tmp/123.txt 5.使用其他非root账号删除 /tmp/123/txt 能否执行成功 6.普通用户除了使用sudo可以执行poweroff以外&#xff0c;还有什么别的办法可以执行poweroff

uni-app 图标库整合最佳实践:使用 iconfont 构建属于自己的图标库

一. 前言 在前端开发中&#xff0c;图标已经成为页面设计中不可或缺的一部分。图标可以使界面更加美观、清晰&#xff0c;并且能够提升用户体验。而使用图标库来管理和引用图标资源&#xff0c;可以带来更多的便利和效率。 而在众多的图标库中&#xff0c;iconfont 独树一帜。…

课程讲解--深入探究二分算法

一、二分查找算法的基本概念 定义与原理 二分查找&#xff0c;也被称为折半查找&#xff0c;是一种在有序数据集合中查找特定元素的高效算法。其原理基于分治思想&#xff0c;每次查找都将查找区间缩小一半。例如&#xff0c;在一个有序数组中查找一个特定的数字&#xff0c;我…

达梦数据库DM Exception字符串截断错误,略坑~

前言 我之前在使用达梦数据库的时候&#xff0c;遇到了很多很多的问题&#xff0c;主要对达梦数据库也不是很熟悉&#xff0c;它的语法和我所熟悉的mysql和postgresql有很大的区别。 今天&#xff0c;讲一下我之前遇到的一个问题。这个问题的起因是用达梦数据库迁移工具&…

Java版工程行业管理系统-提升工程项目的综合管理能力

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

高考:心态、时间、知识,多维度攻略让你脱颖而出

高考&#xff0c;宛如一场无声的激战&#xff0c;承载着无数莘莘学子的梦想与热望。在这激烈的竞争中&#xff0c;充分且周全的准备显得尤为关键。那么&#xff0c;高考备考究竟应从哪些方面入手&#xff1f;又有哪些行之有效的备考策略能为我们保驾护航呢&#xff1f; 一、高考…

信息安全工程师(82)操作系统安全概述

一、操作系统安全的概念 操作系统安全是指操作系统在基本功能的基础上增加了安全机制与措施&#xff0c;从而满足安全策略要求&#xff0c;具有相应的安全功能&#xff0c;并符合特定的安全标准。在一定约束条件下&#xff0c;操作系统安全能够抵御常见的网络安全威胁&#xff…

SQL server 中 CROSS APPLY的使用

CROSS APPLY 是 SQL Server 中的一个操作符&#xff0c;用于将一个表表达式&#xff08;如子查询、函数等&#xff09;与外部表进行连接。CROSS APPLY 类似于 INNER JOIN&#xff0c;但它允许你在一个查询中多次引用外部表的行&#xff0c;并且可以动态地生成结果集。 基本语法…

硬件---3电容---电容特性、上电和断电延时、稳压功能、容抗计算

一电容是什么 1概念 电容就是两块不连接的导体加上中间的绝缘材料。其本身能够存储电荷&#xff0c;当在这两个互相导体两端增加电压的时候&#xff0c;就会形成电场&#xff0c;从而存储电能。 2注意 <1>电解电容正负极一定不能接反&#xff0c;如果接反轻则烧坏&am…

行车记录打不开?原因分析与数据恢复全攻略

行车记录遭遇困境 行车记录仪&#xff0c;作为现代驾驶中的重要设备&#xff0c;不仅能够帮助我们记录行车过程&#xff0c;还能在关键时刻提供有力的证据。然而&#xff0c;当行车记录突然打不开时&#xff0c;这无疑给车主们带来了不小的困扰。行车记录打不开&#xff0c;可…

考研要求掌握C语言(归并排序)

归并排序考啥&#xff1f; 在考研中归并排序只出在选择题&#xff0c;理解原理很重要 且在考研中考靓靓归并&#xff0c;还是比较简单的 归并排序原理 就是每次分一半&#xff0c;直到每一半只含有一个或不能再分时&#xff0c;一半一半的进行排序&#xff0c;最终合并两个…

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon

YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化格式&#xff0c;常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读&#xff0c;并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构&#xff1a; Y…

HDFS和HBase跨集群数据迁移 源码

HDFS集群间数据迁移&#xff08;hadoop distcp&#xff09; hadoop distcp \ -pb \ hdfs://XX.14.36.205:8020/user/hive/warehouse/dp_fk_tmp.db/ph_cash_order \ hdfs://XX.18.32.21:8020/user/hive/warehouse/dp_fksx_mart.db/HBase集群间数据&#xff08;hbase ExportSnap…

ffplay 实现视频流中音频的延迟

ffplay -rtsp_transport tcp -i rtsp://admin:1234qwer192.168.1.64:554/Streaming/Channels/101 -vn -af "adelay5000|5000"在这个命令中&#xff1a; -vn 参数表示只播放音频。 -af "adelay5000|5000" 参数表示将音频延迟5000毫秒&#xff08;即5秒&…

(十五)JavaWeb后端开发——异常处理/AOP面向切面编程

目录 1.异常处理 2.AOP概述 3.AOP核心概念 4.AOP-通知类型 5.切入点表达式 6.连接点 1.异常处理 Web后端开发的三层架构是Controller调用Service&#xff0c;Service调用Mapper&#xff0c;如果碰到了异常就会逐级向上抛出&#xff0c;所以Java就在Controller层设计了全…

Linux命令 - linux索引节点、硬链接、软链接的介绍与使用

文章目录 1 索引节点inode2 硬链接Hard Link3 软链接Soft Link 1 索引节点inode 在Linux系统中&#xff0c;保存在磁盘分区中的文件&#xff0c;不管是什么类型&#xff0c;系统都会给它分配一个编号&#xff0c;这个编号被称为索引节点编号&#xff08;Inode Index&#xff0…

浅谈智能家居在智慧养老实训室中的作用

随着人口老龄化的加剧&#xff0c;智慧养老逐渐成为社会关注的热点。在此背景下&#xff0c;智能家居技术以其独特的优势受到广泛关注。智能家居不再是奢侈品&#xff0c;而是提升老年人生活品质和家庭养老效率的有效工具。它们为老年人提供了便捷、安全、舒适的生活环境&#…

【DL】YOLO11 OBB目标检测 | 模型训练 | 推理

本文进行YOLO11的旋转目标检测任务,旋转目标检测能够更精确地定位和描述那些非水平排列的目标,比如倾斜的飞机、船舶等。在原始的目标检测中,添加一个角度预测,实现定向边界框检测。 话不多说,先来个效果图!!! YOLO11中的旋转目标检测的特点 ▲更精确的定位:通过使用…

Linux Centos7 如何安装图形化界面

如果系统是以最小安装的话,一般是不带有图形化界面的,如果需要图形话界面,需要单独安装。本篇教程,主要介绍如何在CentOS7中安装图形化界面。 1、更新系统 首先,保证系统依赖版本处于最新。 sudo yum update -y2、安装 GNOME 桌面环境 sudo yum groupinstall "GNOME…