⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fifo_trans.sv

📁 VMM 文档加源码, synopsys公司很好的验证资料
💻 SV
字号:
// // -------------------------------------------------------------//    Copyright 2004-2008 Synopsys, Inc.//    All Rights Reserved Worldwide// //    Licensed under the Apache License, Version 2.0 (the//    "License"); you may not use this file except in//    compliance with the License.  You may obtain a copy of//    the License at// //        http://www.apache.org/licenses/LICENSE-2.0// //    Unless required by applicable law or agreed to in//    writing, software distributed under the License is//    distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR//    CONDITIONS OF ANY KIND, either express or implied.  See//    the License for the specific language governing//    permissions and limitations under the License.// -------------------------------------------------------------// class fifo_trans extends vmm_data;  static vmm_log log = new ("fifo_trans", "class") ;      // Local Data Members   rand logic [15:0] data;   rand logic [15:0] wr_data_rate;   rand logic [15:0] rd_data_rate;                                                                          constraint reasonable {      wr_data_rate > 0; wr_data_rate < 10;      rd_data_rate > 0; rd_data_rate < 10;    }      // Constructor  extern function new();  // VMM Standard Methods  extern virtual function string   psdisplay(string prefix = "");      extern virtual function vmm_data allocate ();  extern virtual function vmm_data copy     (vmm_data to = null);  extern virtual function bit      compare  (vmm_data to,                                             output string diff,                                             input int kind = -1);      extern virtual function bit      is_valid (bit silent = 1,                                             int kind = -1);      extern virtual function int unsigned byte_size  (int kind = -1);  extern virtual function int unsigned byte_pack  (ref logic [7:0] bytes[],                                                   input int unsigned offset = 0,                                                   input int  kind = -1);  extern 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);endclass: fifo_trans//-----------------------------------------------------------------------------// VMM Macros - Channel and Atomic Generator//-----------------------------------------------------------------------------`vmm_channel(fifo_trans)`vmm_atomic_gen(fifo_trans, "FIFO Atomic Gen")//-----------------------------------------------------------------------------// new() - Constructor//-----------------------------------------------------------------------------function fifo_trans::new();  super.new(this.log);endfunction: new//-----------------------------------------------------------------------------// allocate() - VMM//-----------------------------------------------------------------------------function vmm_data fifo_trans::allocate();  // Allocate a new object of this type, and return a handle to it  fifo_trans i = new();  allocate = i;    endfunction: allocate//-----------------------------------------------------------------------------// copy() - VMM//-----------------------------------------------------------------------------function vmm_data fifo_trans::copy(vmm_data to);      fifo_trans cpy;  // Allocate a new object if needed, check the type if 'to' specified  if (to == null)    cpy = new();  else if (!$cast(cpy, to)) begin    `vmm_error(this.log, "Cannot copy to non-fifo_trans instance");    return null;  end  // Copy the data fields into the 'to' object and return cpy  copy_data(cpy);  cpy.data = this.data;  cpy.wr_data_rate = this.wr_data_rate;   cpy.rd_data_rate = this.rd_data_rate;                   copy = cpy;endfunction: copy//-----------------------------------------------------------------------------// compare - VMM//-----------------------------------------------------------------------------function bit fifo_trans::compare(vmm_data   to,                                 output string diff,                                 input int  kind);   fifo_trans pkt;   compare = 1;   // Check the type is correct       if (to == null || !$cast(pkt, to)) begin      `vmm_error(this.log, "Cannot compare to non-fifo_trans instance");      return 0;   end   if (pkt.data !== this.data) begin         $sformat(diff, "data (%1b !== %1b)", this.data, pkt.data);       return 0;   endendfunction: compare//-----------------------------------------------------------------------------// psdisplay() - VMM//-----------------------------------------------------------------------------    function string fifo_trans::psdisplay(string prefix);   $sformat(psdisplay, "%swr_dr=%02d rd_dr=%02d data=%h",           prefix, this.wr_data_rate, this.rd_data_rate, this.data);   return psdisplay;endfunction: psdisplay   //-----------------------------------------------------------------------------// is_valid() - VMM//-----------------------------------------------------------------------------function bit fifo_trans::is_valid(bit silent,                                 int kind);    is_valid = 1;endfunction: is_valid//-----------------------------------------------------------------------------// byte_size() - VMM//-----------------------------------------------------------------------------function int unsigned fifo_trans::byte_size(int kind);    byte_size = 6;endfunction: byte_size//-----------------------------------------------------------------------------// byte_pack() - VMM//-----------------------------------------------------------------------------function int unsigned fifo_trans::byte_pack(ref logic [7:0]    bytes[],                                             input int unsigned offset,                                             input int          kind);   bytes = new[offset +  byte_size()] (bytes);   bytes[offset++] = wr_data_rate[7:0];   bytes[offset++] = wr_data_rate[15:8];   bytes[offset++] = rd_data_rate[7:0];   bytes[offset++] = rd_data_rate[15:8];   bytes[offset++] = data[7:0];   bytes[offset++] = data[15:8];   return byte_size();endfunction: byte_pack//-----------------------------------------------------------------------------// byte_unpack() - VMM//-----------------------------------------------------------------------------function int unsigned fifo_trans::byte_unpack(const ref logic [7:0] bytes[],                                             input int unsigned    offset,                                             input int             len,                                             input int             kind);   wr_data_rate = { bytes[offset+1], bytes[offset] };   offset += 2;   rd_data_rate = { bytes[offset+1], bytes[offset] };      offset += 2;   data = { bytes[offset+1] , bytes[offset] };    return byte_size();   // Return the number of bytes unpackedendfunction: byte_unpack

⌨️ 快捷键说明

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