tr.sv

来自「VMM 文档加源码, synopsys公司很好的验证资料」· SV 代码 · 共 137 行

SV
137
字号
//// Template for VMM-compliant transaction descriptor//// <TR>         Name of transaction descriptor class//`ifndef TR__SV`define TR__SV`include "vmm.sv"class TR extends vmm_data;   static vmm_log log = new("TR", "class");   // ToDo: Modify/add symbolic transaction identifiers to match   typedef enum {READ, WRITE } kinds_e;   rand kinds_e kind;   // ToDo: Add relevant class properties to define all transactions   // ToDo: Modify/add symbolic transaction identifiers to match   typedef enum {IS_OK, ERROR} status_e;   rand status_e status;   constraint TR_valid {      // ToDo: Define constraint to make descriptor valid      status == IS_OK;   }   // ToDo: Add constraint blocks to prevent error injection  function new();      super.new(this.log);  endfunction:new   virtual function string psdisplay(string prefix = "");      // ToDo: Implement this method   endfunction:psdisplay   virtual function bit is_valid(bit     silent = 1,                                 input int kind   = -1);      // ToDo: Implement this method      endfunction:is_valid   virtual function vmm_data allocate();            TR tr = new;      allocate = tr;      endfunction:allocate   virtual function vmm_data copy(vmm_data cpy = null);            TR to;      // Copying to a new instance?      if (cpy == null)          to = new;       else          // Copying to an existing instance. Correct type?         if (!$cast(to, cpy)) begin             `vmm_fatal(this.log, "Attempting to copy to a non TR instance");            return null;        end       super.copy_data(to);      to.kind = this.kind;      // ToDo: Copy additional class properties      copy = to;          endfunction:copy   virtual function bit compare(vmm_data   to,                                output string diff,                                input int  kind = -1);            TR tr;             compare = 0;      if (to == null) begin          `vmm_fatal(this.log, "Cannot compare to NULL instance");         return 0;      end      if (!$cast(tr,to)) begin          `vmm_fatal(this.log, "Attempting to compare to a non TR instance");         return 0;      end      if (this.kind != tr.kind) begin         $sformat(diff, "Kind %0s != %0s", this.kind, tr.kind);         return 0;      end      // ToDo: Compare additional class properties      compare = 1;     endfunction:compare   virtual function int unsigned byte_size(int kind = -1);              // ToDo: Implement this method      endfunction:byte_size   virtual function int unsigned byte_pack(ref logic [7:0]    bytes[],                                           input int unsigned offset = 0,                                           input int          kind   = -1);              // ToDo: Implement this method      endfunction:byte_pack   virtual function int unsigned byte_unpack(const ref logic [7:0] bytes[],                                             input int unsigned    offset = 0,                                             input int             len    = -1,                                              input int             kind   = -1);       // ToDo: Implement this method  endfunction:byte_unpackendclass:TR`vmm_channel(TR)`vmm_atomic_gen(TR, "TR")`vmm_scenario_gen(TR, "TR")`endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?