zoukankan      html  css  js  c++  java
  • uvm_transaction——事物

    文件:
    src/base/uvm_transaction.svh
    类: 
    uvm_transaction
     
      uvm_transaction继承自uvm_object,添加了timing和recording接口,该类是uvm_sequence_item的基类。这个类提供了时间戳属性(timestamp properties),通知事件(notification events),和交易记录(transaction recording)支持。其子类uvm_sequence_item应当作为基类为所有用户定义的事务类型。

    //------------------------------------------------------------------------------
    //
    // CLASS: uvm_transaction
    //
    // The uvm_transaction class is the root base class for UVM transactions.
    // Inheriting all the methods of <uvm_object>, uvm_transaction adds a timing and
    // recording interface.
    //
    // This class provides timestamp properties, notification events, and transaction
    // recording support. 
    //
    // Use of this class as a base for user-defined transactions
    // is deprecated. Its subtype, <uvm_sequence_item>, shall be used as the
    // base class for all user-defined transaction types. 
    // 
    // The intended use of this API is via a <uvm_driver #(REQ,RSP)> to call <uvm_component::accept_tr>,
    // <uvm_component::begin_tr>, and <uvm_component::end_tr> during the course of
    // sequence item execution. These methods in the component base class will
    // call into the corresponding methods in this class to set the corresponding
    // timestamps (~accept_time~, ~begin_time~, and ~end_time~), trigger the
    // corresponding event (<begin_event> and <end_event>, and, if enabled,
    // record the transaction contents to a vendor-specific transaction database.
    //
    // Note that get_next_item/item_done when called on a uvm_seq_item_pull_port
    // will automatically trigger the begin_event and end_events via calls to begin_tr and end_tr.
    // While convenient, it is generally the responsibility of drivers to mark a
    // transaction's progress during execution.  To allow the driver or layering sequence
    // to control sequence item timestamps, events, and recording, you must call
    // <uvm_sqr_if_base#(REQ,RSP)::disable_auto_item_recording> at the beginning
    // of the driver's ~run_phase~ task.
    //
    // Users may also use the transaction's event pool, <events>,
    // to define custom events for the driver to trigger and the sequences to wait on. Any
    // in-between events such as marking the beginning of the address and data
    // phases of transaction execution could be implemented via the
    // <events> pool.
    // 
    // In pipelined protocols, the driver may release a sequence (return from
    // finish_item() or it's `uvm_do macro) before the item has been completed.
    // If the driver uses the begin_tr/end_tr API in uvm_component, the sequence can
    // wait on the item's <end_event> to block until the item was fully executed,
    // as in the following example.
    //
    //| task uvm_execute(item, ...);
    //|     // can use the `uvm_do macros as well
    //|     start_item(item);
    //|     item.randomize();
    //|     finish_item(item);
    //|     item.end_event.wait_on();
    //|     // get_response(rsp, item.get_transaction_id()); //if needed
    //| endtask
    //|
    //
    // A simple two-stage pipeline driver that can execute address and
    // data phases concurrently might be implemented as follows: 
    //
    //| task run();
    //|     // this driver supports a two-deep pipeline
    //|     fork
    //|       do_item();
    //|       do_item();
    //|     join
    //| endtask
    //| 
    //| 
    //| task do_item();
    //|     
    //|   forever begin
    //|     mbus_item req;
    //|
    //|     lock.get();
    //|
    //|     seq_item_port.get(req); // Completes the sequencer-driver handshake
    //|
    //|     accept_tr(req);
    //|
    //|       // request bus, wait for grant, etc.
    //| 
    //|     begin_tr(req);
    //|
    //|       // execute address phase
    //|
    //|     // allows next transaction to begin address phase
    //|     lock.put();
    //| 
    //|       // execute data phase
    //|       // (may trigger custom "data_phase" event here)
    //| 
    //|     end_tr(req);
    //| 
    //|   end
    //| 
    //| endtask: do_item
    //
    //------------------------------------------------------------------------------
    virtual class uvm_transaction extends uvm_object;
    
      // Function: new
      //
      // Creates a new transaction object. The name is the instance name of the
      // transaction. If not supplied, then the object is unnamed.
      
      extern function new (string name="", uvm_component initiator=null);
    
       ......
    
    endclass

    参考文献:

    2 UVM基础之———uvm_transaction. http://www.cnblogs.com/bob62/p/3871858.html
  • 相关阅读:
    Codeforces Round #246 (Div. 2):B. Football Kit
    iOS8使用TouchID
    HDU 1796 How many integers can you find(容斥原理+二进制/DFS)
    MapReduce的Reduce side Join
    Android入门级编译错误汇总
    当往事已随风
    静态链表的C++实现
    《跨界杂谈》企业商业模式(三):集约
    C
    Android插屏动画效果
  • 原文地址:https://www.cnblogs.com/dpc525/p/7930518.html
Copyright © 2011-2022 走看看