首页 > 其他分享 >UVM - 7 (Sequence机制)

UVM - 7 (Sequence机制)

时间:2024-03-15 12:55:30浏览次数:36  
标签:req sequence Sequence driver item UVM sequencer 机制 uvm

内容

sequence概述

  • uvm_sequence_item - 数据建模
  • uvm_sequence - 产生数据
  • uvm_squencer - 将产生的数据给到driver
  • uvm_driver - 数据驱动给dut
  • sequencer是uvm组件,一个sequencer可以调用多个sequence

uvm_squence class普通成员

sequence执行流程

  • sequencer和driver是在agent中进行例化的
  • sequencer中可以设置默认的sequence,设置完成之后,会自动执行sequence中的body(),另外会自动执行driver中的get_next_item()
  • sequencer中的start()函数会调用sequence中的body()函数,body()会产生sequence item
  • body()产生数据,driver消耗数据

流程到代码的映射

  • 在main_phaze或者是run_phaze中,使用一个forever死循环
  • req是传递进来的transaction item
  • seq_item_port - squencer和driver的接口,可以调用方法
  • seq_item_port.get_next_item(req) - 获取传入的transaction item
  • seq_item_port.item_done() - 表示传递过来的transaction item已经处理完了,此时会告诉sequence已经处理完了,可以通过sequence产生下一笔数据

  • sequence中的body()函数通过objection机制控制进行TB运行
  • `uvm_do(req) - 产生激励然后发送出去,先产生一个req,然后调用randomize()进行随机化,然后将req发送出去
  • req就是一个transaction对象
  • 所有的宏不用加分号

sequence class要求

  • 自己的sequence必须从uvm_sequence扩展出来
  • body()使用task进行书写
  • body()函数是需要sequencer进行调用starting_phase()函数进行显式调用的
  • set_default_sequence() - 设置默认的sequence,并且执行其中的body()
  • 没有设置默认的sequence,需要显示调用body()

User Sequence with callback

手动创建和发送sequence item

sequencer和driver之间的通信机制

  • sequencer中调用sequence中的body()方法产生数据,产生的数据如何传给driver呢?
  • start_item(req)执行之后会找到对应的sequencer
  • sequencer中有wait_for_grant()被启动
  • sequencer执行begin_tr(req),开始数据传输,数据传输给driver
  • driver在run_phaze的时候执行get_next_item(req) - 获取到数据之后继续向下执行
  • driver执行完成之后,会执行item_done(),返回给sequencer中的finish_item(req)中的wait_for_item_done(),然后就执行完成了一次传输

sequence中的randc随机变量

验证工程师可以实现scenario sequence

  • 可以创建一组sequence
  • uvm_send() - 只是传输数据,没有randomize动作

嵌套sequence

在测试案例中执行user sequences

  • 使用uvm_config_db - 设置执行哪个sequence

标签:req,sequence,Sequence,driver,item,UVM,sequencer,机制,uvm
From: https://www.cnblogs.com/Icer-newer/p/18073188

相关文章

  • Java序列化和反序列化机制
    Java的序列化和反序列化机制问题导入:在阅读ArrayList源码的时候,注意到,其内部的成员变量动态数组elementData被Java中的关键字transient修饰transient关键字意味着Java在序列化时会跳过该字段(不序列化该字段)而Java在默认情况下会序列化类(实现了Java.io.Serializable接口......
  • UVM - 9 (override - 2)
    SystemVerilog本身就是一种面向对象的语言,即本身就支持重载(override),重载即当父类中定义一个virtual类型的函数或任务时,在子类中可以重载这个函数或任务。所以我们来先看一下SystemVerilog对重载的支持。案例2systemverilog重载本质是使用继承和多态的思想实现方法的重载c......
  • 数据链路层(流量控制与可靠传输机制)
    数据链路层的可靠传输通常使用确认和超时重传两种机制来完成流量控制:停止等待协议:滑动窗口与后退N帧协议(GBN):发送窗口为n,接收窗口为1累计确认:无须在收到上一个帧的确认才发送,而是可以连续发送帧。接收方连续收到几个正确的数据帧后,才对最后一个数据帧发送确认信息请求重传:当......
  • YOLOv9改进策略:注意力机制 |通道注意力和空间注意力CBAM | GAM超越CBAM,不计成本提高精
    ......
  • UVM - 6 (Transaction Modeling)
    内容uvm_sequence_item是transaction的基类可以使用uvm_sequence_item和uvm_transaction对数据进行建模什么是事务(transaction)?总线协议可以认为是一个事务UVM数据流testcase一般不产生数据,通常进行configsequencer会产生激励给到driver,传递的就是transaction......
  • 云监控告警2.0:革新传统告警机制,引领智能化监控新时代
    本文分享自天翼云开发者社区《云监控告警2.0:革新传统告警机制,引领智能化监控新时代》,作者:每日知识小分享随着云计算技术的飞速发展,云服务已成为企业IT架构的重要组成部分。为了确保云服务的稳定、高效运行,云监控告警机制扮演着至关重要的角色。传统的云监控告警机制在应对复杂多......
  • UVM - 5 (Lab 1)
    DUT的RTL文件:router.vtestbench架构Flowtest.svtest_base.sv注册的时候,以uvm_component扩展出来的类,在注册的时候要使用uvm_component_utils()注册,以uvm_transaction,uvm_sequence扩展出来的类需要用uvm_object_utils()注册//以uvm_component扩展出来的类uv......
  • UVM - 4 (UVM验证平台)
    Reviewthis-指的是当前的类双冒号进行索引-静态方法或者是静态变量在类之外写函数也可以使用双冒号进行索引,双冒号指定作用域所有的phaze是UVM中已经定义好的,不需要显式调用TLM-事务级传输UVM中组件之间的通信使用的是TLM,不使用mailboxuvm_sequence_itemcla......
  • MogDB openGauss 角色切换后sequence为什么不连续
    本文出处:https://www.modb.pro/db/569272背景今天在客户现场做高可用切换测试,为了验证数据库节点角色切换后无数据丢失,我单独创建一张使用了自增sequence的表,通过vip方式访问数据库,并1s插入一条数据。因为数据库本身是通过benchmarksql工具加压的,数据库服务器的CPU使......
  • Python的垃圾回收机制
    什么是垃圾回收机制垃圾回收(GarbageCollection)是一种自动内存管理机制,用于检测和释放不再被程序使用的内存资源,以避免内存泄漏和资源浪费。 在编程中,当对象被创建时,系统为其分配一块内存空间。但是,当对象不再被程序使用时,如果没有及时释放相关的内存空间,就会导致内存泄漏。垃......