当前位置: 首页 > 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的长度
http://www.lryc.cn/news/481143.html

相关文章:

  • 前端零基础学习Day-Eight
  • 贪心算法day3(最长递增序列问题)
  • 【论文复现】MSA+抑郁症模型总结(三)
  • 【软件测试】敏捷模型(Scrum模型)和V模型、W模型
  • 【go从零单排】接口(interface)和多态(Polymorphism)
  • SI5319C-C-GM,SiliconLabs芯科 SI5319C-C-GMR,时钟合成器/抖动清除器 封装 QFN-36 在售 20000PCS 23+
  • 使用批处理脚本批量删除Maven无效依赖
  • 腾讯cos对象存储,下行流量费贵,是否可以加入服务器减少费用,架构如何设计
  • 【SAP】关于权限的继承
  • SpringBoot技术下的共享汽车运营平台
  • SwiftUI开发教程系列 - 第7章:数据流和状态管理
  • Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境
  • 电子学会2024年3月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析
  • 初学者指南:用例图——开启您的软件工程之旅
  • 二叉树遍历/算法数据结构
  • C#字符串的不可变性:内存管理与线程安全的优势分析
  • 【杂记】之语法学习第四课手写函数与结构体
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法
  • python使用turtle画图快速入门,轻松完成作业练习
  • 【C++】新手入门指南
  • C++使用开源ConcurrentQueue库处理自定义业务数据类
  • 在vue3的vite网络请求报错 [vite] http proxy error:
  • ElasticSearch 简单的查询。查询存在该字段的资源,更新,统计
  • FOFA使用教程之从零到精通
  • 【提高篇】3.2 GPIO(二,基本结构)
  • UE hard/soft reference| DDX DDY | Unity pcg color
  • macOS 应用公证指南:使用 fastlane 实现自动化公证流程
  • 深度学习:解密图像、音频和视频数据的“理解”之道20241105
  • uniapp 实现瀑布流
  • 计算机毕业设计 | springboot+vue智慧工地管理系统 前后端分离后台管理(附源码+文档)