如何在父uvm_transaction中随机及例化子的uvm_transaction

2023-11-01

Use Case: AXI DMA控制器有128个独立的通道,可以并行进行读写操作。首先我们对AXI DMA控制器的top level的事务进行建模,如下:

class axi_dmac_transaction extends uvm_transaction;
	rand axi_chan_transaction axi_chan[axi_dmac_dec::CHAN_NUM];
    function new(string name = "axi_dmac_transaction ");
        super.new(name);
        `uvm_info("TRACE", $sformatf("%m"), UVM_DEBUG)
    endfunction
endclass

那么如何进行多通道事务的例化及随机呢?这里利用到了uvm object的pre_randomize函数:

function void pre_randomize();
    foreach(axi_chan[i]) begin
        axi_chan[i] = axi_chan_transaction ::type_id::create($sformatf("axi_chan[%0d]",i));
    end
endfunction

这样就可以在接下来调用axi_dmac_transaction的随机化,从而实现axi_chan_transaction的各个实例的随机化。

如果开启的DMA的通道数量不确定,我们可以利用队列来进行实现:

class axi_dmac_transaction extends uvm_transaction;
	rand int chan_num;
	rand axi_chan_transaction axi_chan[$];
	
	constraint c_chan_num {
		chan_num inside {[1:128]};
		axi_chan.size == chan_num;
    }
    
    function new(string name = "axi_dmac_transaction ");
        super.new(name);
        `uvm_info("TRACE", $sformatf("%m"), UVM_DEBUG)
    endfunction

	function void pre_randomize();
	endfunction

endclass

这时候,调用axi_dmac_transaction的随机化,队列axi_chanchan_numaxi_chan_transaction 句柄,但是句柄的值是空的,因此我们需要进行实例化,该操作可在post_randomize函数中完成:

function void post_randomize();
    `uvm_info("TRACE", $sformatf("%m"), UVM_DEBUG)
    
    foreach(axi_chan[i]) begin
        axi_chan[i] = axi_chan_transaction ::type_id::create($sformatf("axi_chan[%0d]",i));
        assert(axi_chan[i].randomize());
    end
endfunction
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在父uvm_transaction中随机及例化子的uvm_transaction 的相关文章

随机推荐

  • Linux下给挂载U盘或者SD卡

    Linux下给挂载U盘或者SD卡 mount t vfat dev mmcblk0p2 udisk 对于ARMLinux来说 第一次使用U盘时 U盘这个文件目录是不能直接进入的 我们需要对其进行挂载 然后再接下来的使用中就可以直接进行使用了
  • MyBatis笔记(3):ResultMap、日志及分页Paginator/狂神说

    目录 1 查询为null问题 2 日志工厂 2 1 标准日志实现 2 2 Log4j 2 3 使用步骤 3 limit实现分页 3 1 思考 为什么需要分页 3 2 使用Limit实现分页 3 3 步骤 4 RowBounds分页 4 1
  • Linux进程同步机制-Futex

    引子 在编译2 6内核的时候 你会在编译选项中看到 Enable futex support这一项 上网查 有的资料会告诉你 不选这个内核不一定能正确的运行使用glibc的程序 那futex是什么 和glibc又有什么关系呢 futex诞生
  • 学了Python爬虫到底有什么用?真能带来更好的生活水平吗?

    一 Python爬虫外包项目 网络爬虫最通常的的挣钱方式通过外包网站 做中小规模的爬虫项目 向甲方提供数据抓取 数据结构化 数据清洗等服务 新入行的程序员大多都会先尝试这个方向 直接靠技术手段挣钱 这是我们技术人最擅长的方式 因项目竞价的人
  • Open3D(C++) Ransac拟合平面(详细过程版)

    目录 一 算法原理 二 代码实现 三 结果展示 一 算法原理 见 PCL 使用RANSAC拟合平面 二 代码实现 include
  • mysql查询命令联系(3)

    建表语句 CREATE TABLE student id INT 10 NOT NULL UNIQUE PRIMARY KEY name VARCHAR 20 NOT NULL sex VARCHAR 4 birth YEAR depart
  • 微信小程序与后台交互,后台接受前台参数为null

    我的qq 2038373094 我做的是微信小程序 网站 手机app 后端java 前端vue bootstrap框架 原生的html css js都会 做过律师在线咨询系统 共享农场手机app 在线心理咨询系统 在微信小程序的开发工具的控
  • 某东MAOTAI秒杀软件的优化思路

    某东MAOTAI秒杀软件的优化思路 在看到网上泄漏的某东MAOTAI秒杀的代码时 还是很佩服作者的代码基本功 代码优美 逻辑清晰 写的确实很漂亮 用很少的代码就完成了从获取抢购链接 到获得秒杀初始化信息 提交结算订单的功能 刚刚下载到这个脚
  • 笔记/虚拟机联网

    新建虚拟机 自定义硬件 内存2G 网络适配器两块一个NAT 一个仅主机 CD DVD 选择使用ios 映像文件从从磁盘中选择镜像centos7 开启虚拟机设置时区 硬盘划分为自动 设置root 密码 用root 密码登录虚拟机 点击编辑 打
  • TCP通信实现客户端向服务器发送图片

    TCP通信 1 TCP 协议通信交互流程 具体的流程如下 1 服务器根据地址类型 ipv4 ipv6 socket 类型 协议创建 socket 2 服务器为 socket 绑定 ip 地址和端口号 3 服务器 socket 监听端口号的请
  • 2022年能做些什么副业呢?

    工作不顺利 生活有压力 我们都希望自己腰包每天都能日益见长 让我们在消费的时候能更有底气 选对一个好的副业 让我们的生活少受委屈 那今天我就给大家分享简单好做的副业 1 从零开始 了解闲鱼 如果你是闲鱼的新人 想要从0到1 首先要做的就是了
  • 女朋友发的微信消息撤回了,python一串代码,让你大呼过瘾

    想查看微信好友撤回的消息 Python帮你搞 要说微信最让人恶心的发明 消息撤回绝对能上榜 比如你现在正和女朋友用微信聊着天 或者跟自己喜欢的女孩子聊着天 一个不留神 你没注意到对方发的消息就被她及时撤回了 这时你很好奇 好奇她到底发了什么
  • 【C语言学习笔记】算法篇——初见深度优先搜索

    基于啊哈 算法中的实例 题目 输入一个正整数n 输出1 n的全排列 代码分析 include
  • Spring Boot安全管理—Spring Security基本配置

    Spring Security的基本配置 1 基本用法 1 1 创建项目 添加依赖 创建一个Spring Boot Web 项目 然后添加spring boot starter security依赖
  • Linux下C++开发笔记--编译静态链接库和动态链接库

    目录 1 前言 2 生成静态链接库 3 生成动态链接库 1 前言 承接上一篇Linux下C 开发笔记 g 命令的使用笔记 依据教程记录学习笔记 2 生成静态链接库 回顾项目结构 汇编 生成swap o文件 cd src g swap cpp
  • java随机生成6位随机数 5位随机数 4位随机数

    随机数 应用会相当广 验证数 订单号 流水号拼接 下面是java随机数生成语句 生成6位随机数 不会是5位或者7位 仅只有6位 System out println int Math random 9 1 100000 同理 生成5位随机数
  • Ubuntu 18.04安装JDK1.8

    下载链接https www oracle com java technologies downloads java8 官网下载慢且需要注册 比较麻烦 https download csdn net download qq 40378795
  • 分支限界法:布线问题

    问题描述 印刷电路板不限区域划分成n m个方格阵列 如下图所示 精确的电路布线问题要求确定连接方格a的中点 到连接方格b的中点的最短布线方案 布线时 电路只能沿直线或直角布线 为了避免线路相交 已布的线的方格做了封锁标记 其他线路不允许穿过
  • 数据结构 每日一练:选择 + 编程

    目录 选择 编程 选择 1 设对n n gt 1 个元素的线性表的运算只有4种 删除第一个元素 删除最后一个元素 在第一个元素之前插入新元素 在最后一个元素之后插入新元素 则最好使用 A 只有尾结点指针没有头结点指针的循环单链表 B 只有尾
  • 如何在父uvm_transaction中随机及例化子的uvm_transaction

    Use Case AXI DMA控制器有128个独立的通道 可以并行进行读写操作 首先我们对AXI DMA控制器的top level的事务进行建模 如下 class axi dmac transaction extends uvm tran