专栏首页瓜大三哥​UVM(九)之sequencej机制续1

​UVM(九)之sequencej机制续1

UVM(九)之sequencej机制续1

当一个sequence启动起来之后,UVM会自动执行sequence的body任务,所以要产生各种和杨的激励,就要写好body任务。

body这个任务完成的事情与gen_pkt函数相似,只是不同的是,gen_pkt可以直接通过一个ref形式的参数把产生的transaction交给driver,而sequence则需要使用通信的方式来传递,如下入所示:

由于传递方式的改变,所以产生transaction的方式也就有了不同。一个transaction应该这样产生:

要产生一个transaction,要分成四步:第一步就是实例化,第二部就是调用start_item,第三部就是执行randomize过程,第四部就是调用finish_item。由于是牵扯到sequencer和driver的通信,因此这里就有一个主动和被动的过程。当driver中使用seq_item_port.get_next_item主动请求一个item(transaction)时,sequencer会要求sequence产生一个item(transaction);产生完成后,sequence就要等待driver把item(transaction)取走,这需要driver显示调用seq_item_port.item_done()。当此函数被调用后,finish_item才会返回,一个transaction的产生才真正的完成。

仔细观察这四步,其中只有第三部才会有一些差异,而另外的三步则是固定不变的。针对这种情况,UVM推出了uvm_do系列宏来简化产生transaction的过程。如上,使用uvm_do宏就可以简写为:

一个宏封装了产生item的四个步骤,相当于把所有的事情做完了,极大的方便了使用。除了uvm_do宏之外,uvm_do系列宏中另外一个经常使用的就是uvm_do_with。它的使用方式如下:

使用uvm_do_with宏之后,那么产生transaction的第三部中的assert(tr.randomize() with {tr.crc_err == 1};如果需要发送多个包(其中pkt_num是要发送的包的数量):

假设一个产生特定crc_err的包的sequence如下:

另外一个sequence如下:

现在我们要写一个新的sequence,他可以替代上面的两种包,可以这样写:

这样写起来似乎显得特别的麻烦。产生的两种不同的包中,第一个约束条件有两个,第二个约束条件有三个,但是加入约束条件有10个呢?如果我们有整个验证平台中有30个case都用到了这样一个包,那么就要在这30个case中加入10行这样的代码,这是一件非常恐怖的事情,而且特别容易出错。既然我们已经定义好了crc_seq和long_seq,那么可以作为一个sequence的变量为参数。

把定义好的sequence作为uvm_do的参数,这样就实现了sequence的重用。

本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise),作者:xiguazaitortoise

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UVM(八)之transaction及field_automation

    UVM(八)之transaction及field_automation uvm_sequence_item派生自uvm_transaction,...

    瓜大三哥
  • UVM模型(三)之objection

    UVM模型(三)之objection ? 1.object与component不是两个对等的概念 uvm_object是UVM中最基本的类。 uvm_comp...

    瓜大三哥
  • UVM模型(四)

    UVM模型(四) ? 1.常用到的uvm_component uvm_driver:所有的driver都要派生自uvm_driver。driver的功能...

    瓜大三哥
  • 【每日一题】1444: [蓝桥杯][历届试题]斐波那契

    这道题,咳咳,大家要认真想一想!因为此斐波那契非彼斐波那契! 题目描述 斐波那契数列大家都非常熟悉。它的定义是: f(x) = 1 .... (x...

    编程范 源代码公司
  • 如何合并Git 代码库中牛人的代码到自己的库

    github for Windows使用介绍 这篇文章可以很好带我们入门github,同时还带了一个gitshell,这个工具可以运行github的所有命令,命...

    张善友
  • 商业智能BI中的OLAP是什么

    人们在谈商业智能(BI)时,经常会提到OLAP,有的人可能认为OLAP工具就是BI。其实OLAP仅是BI的一部分,是很重要的一项分析技术。那什么是OLAP呢?

    数据前沿
  • Qt官方示例-菜单栏

    Qt君
  • 从伪并行的 Python 多线程说起

    学过操作系统的同学都知道,线程是现代操作系统底层一种轻量级的多任务机制。一个进程空间中可以存在多个线程,每个线程代表一条控制流,共享全局进程空间的变量,又有自己...

    py3study
  • [译] 这可能是世界上最简单的用 Go 来写 WebAssembly 的教程了

    如果你不想细读,你可以看下我做的 demo 页面或者直接看下 ? go-wasm-cat-game-on-canvas-with-docker 这个项目,我会...

    腾讯IVWEB团队
  • 小程序 下拉刷新 上拉加载

    至此,一个简单的下拉刷新上拉加载基本搞定了。巧用微信的各种Api,就很舒服。 继续扩展的话: 1.updateDom那里下拉刷新是简单的清空重新加载,其实可...

    从今若

扫码关注云+社区

领取腾讯云代金券