0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UVM中的uvm_do宏简析

芯片验证工程师 ? 来源:芯片验证工程师 ? 2023-06-09 09:36 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

uvm_do宏及其变体提供了创建随机化发送transaction items或者sequence的方法。

`uvm_do

`uvm_do宏将uvm_sequenceuvm_sequence_item类型的变量作为参数。使用factory创建一个对象并赋值给指定的变量。

当driver从sequencer中请求一个uvm_sequence_item时,该uvm_sequence_item被随机化并提供给driver。

ea2caf74-0615-11ee-962d-dac502259ad0.png

class simple_seq_do extends uvm_sequence #(simple_item); 
...//ConstructorandUVMautomationmacros


virtual task body(); 
  `uvm_do(req) 
endtask : body 
endclass : simple_seq_do

上面的例子中,simple_seq_do的body使用uvm_do宏,发送了一个类型为simple_item的数据项。

ea51874a-0615-11ee-962d-dac502259ad0.png

类似地,下面的例子声明了一个sequence(simple_seq_sub_seqs),使用`uvm_do来执行前面定义的simple_seq_do类型的sequence。

class simple_seq_sub_seqs extends uvm_sequence #(simple_item); 
... // Constructor and UVM automation macros 
simple_seq_do seq_do; 
virtual task body(); 
`uvm_do(seq_do) 
endtask : body 
endclass : simple_seq_sub_seqs

`uvm_do_with

`uvm_do_with宏与`uvm_do类似。

第一个参数是从uvm_sequence_item派生出来的变量,包括uvm_sequence_item或者uvm_sequence 。

第 二 个 参 数 可 以 是 任 何 有 效 的inline constraints


在下面的例子中,sequence产生两个数据项,对addr和data的值有特定的约束。

class simple_seq_do_with extends uvm_sequence #(simple_item);
...//ConstructorandUVMautomationmacros
virtual task body();
  `uvm_do_with(req, { req.addr == 16'h0120; req.data == 16'h0444; } )
  `uvm_do_with(req, { req.addr == 16'h0124; req.data == 16'h0666; } )
endtask : body
endclass : simple_seq_do_with

如果约束条件只是用来将发送数据设置为特定的值,可以用用户定义的任务来代替宏。

class simple_seq_do_with extends uvm_sequence #(simple_item);


 task do_rw(int addr, int data);
   item= simple_item::create("item",,get_full_name());
   item.addr.rand_mode(0);
   item.data.rand_mode(0);
   item.addr = addr;
   item.data = data;


   start_item(item);
   randomize(item);
   finish_item(item);
 endtask


virtual task body();
 repeat (num_trans)
   do_rw($urandom(),$urandom());
endtask
...
endclass : simple_seq_do_with





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19587
  • sequence
    +关注

    关注

    0

    文章

    23

    浏览量

    3030

原文标题:UVM中的uvm_do宏

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IC验证之UVM常用汇总分析(四)

    OVM过时的用法,使用纯净的UVM环境:`define UVM_NO_DEPRECATED除了上述通用的外,针对不同的仿真工具需要定义不同的
    发表于 12-02 15:24

    IC验证"一个简单的UVM验证平台"是如何搭建的(六)

    :这个driver的功能非常简单,只是向rxd上发送256个随机数据,并将rx_dv信号置为高电平。当数据发送完毕后,将rx_dv信号 置为低电平。上述代码还出现了uvm_info。这个
    发表于 12-04 15:48

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载...

    uvm的事物级建模方便了工程师对事物进行建模,uvm的tlm通信机制方便实现各个组件之间的数据通信,使用uvm提供的可以方便的进行各种操作,比如实现factory机制,file的o
    发表于 01-21 16:00

    数字IC验证之“搭建一个可以运行的uvm测试平台”(5)连载...

    事物的控制,在智能代码前后有两个if语句,这里先不用管,它的功能是控制验证平台何时结束。  在来看看repeat语句当中的内容,repeat的语句中使用了uvm do这个uvm内建的
    发表于 01-26 10:05

    什么是uvmuvm的特点有哪些呢

    直观的印象,就是uvm验证平台,它是分层的结构。图中的每一个巨型框都代表着平台的一个构成元素。这些元素呢,我们称为平台组建,下面来简单的分析一下。从最底层上来看,agent 包含了driver,monitor和sequencer,其中driver ,monitor
    发表于 02-14 06:46

    谈谈UVMuvm_info打印

      uvm_info的定义如下:  `define uvm_info(ID,MSG,VERBOSITY) \  begin \  if (uvm_report_enabled(VER
    发表于 03-17 16:41

    UVMseq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用UVM的default_sequence机制启动seq2。那么seq1
    发表于 04-04 17:15

    我的第一个UVM代码——Hello world

    Ctrl-V!) 几点说明: 为了使用UVM库里的函数和定义,需要先import uvm_pkg和include uvm_macros。 在testbench的顶层(module
    发表于 11-03 10:18

    UVM的utility

    UVM中所有的对象都应该在factory 中注册, utility 就是用于将对象注册到工厂的。
    的头像 发表于 03-30 09:39 ?1170次阅读

    UVM学习笔记(一)

    driver应该派生自uvm_driver,而uvm_driver派生自uvm_component。
    的头像 发表于 05-26 14:38 ?1761次阅读
    <b class='flag-5'>UVM</b>学习笔记(一)

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVMuvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-20 17:28 ?1925次阅读

    如何用Verdi查看UVM环境的变量?

    我们常用的debug UVM的方法是通过打印log实现。有没有办法像 debug RTL代码一样将 UVM 变量拉到波形上看呢?答案是有的,下面让我们看看是怎么做到的。
    的头像 发表于 06-25 16:01 ?2418次阅读
    如何用Verdi查看<b class='flag-5'>UVM</b>环境<b class='flag-5'>中</b>的变量?

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVMuvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-29 16:57 ?2102次阅读

    一文详解UVM设计模式

    本篇是对UVM设计模式 ( 二 ) 参数化类、静态变量/方法/类、单例模式、UVM_ROOT、工厂模式、UVM_FACTORY[1]单例模式的补充,分析静态类的使用,
    的头像 发表于 08-06 10:38 ?3517次阅读
    一文详解<b class='flag-5'>UVM</b>设计模式

    UVM设计的sequence启动方式有哪几种呢?

    本篇介绍UVM的sequence,这是UVM中最基础的部分。对于前面介绍的uvm_callback, uvm_visitor等,很少被使用
    的头像 发表于 08-17 10:07 ?6233次阅读
    <b class='flag-5'>UVM</b>设计<b class='flag-5'>中</b>的sequence启动方式有哪几种呢?