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

📄 tr_test.sv

📁 VMM 文档加源码, synopsys公司很好的验证资料
💻 SV
字号:
//// Template for testing the implementation of a VMM-compliant// transaction descriptor//// % vcs -R -sverilog -ntb_opts rvm TR_test.sv//// <TR>         Name of transaction descriptor class// [filename]   TR_test//program test;`include "vmm.sv"`include "TR.sv"initialbegin   vmm_log log = new("TR", "Descriptor Test");   TR obj = new;   TR cpy;   TR sb[$];   logic [7:0] bytes[];   string diff;   int n, m;   int fp;   fp = $fopen("TR.sav", "w");   if (fp == 0) begin      `vmm_fatal(log, "Cannot open file 'TR.sav'");   end   repeat (100) begin      if (!obj.randomize()) begin         `vmm_error(log, "Failed to randomize object");         obj.display("Contradiction: ");      end else begin         obj.display("");      end      if (!obj.is_valid()) begin         `vmm_error(log, "TR::is_valid() did not validate random value");         obj.display("Invalid: ");      end      if (!$cast(cpy, obj.allocate())) begin         `vmm_error(log, "TR::allocate() did not allocate a TR instance");         cpy.display("Allocated: ");      end      if (cpy.log != obj.log) begin         `vmm_error(log, "TR::log is not a static data member");         `vmm_note(obj.log, "Original message interface");         `vmm_note(cpy.log, "Copy message interface");      end      if (!$cast(cpy, obj.copy())) begin         `vmm_error(log, "TR::copy() did not allocate a TR instance");         cpy.display("Allocated: ");      end      if (!cpy.compare(obj, diff)) begin         `vmm_error(log, {"TR::copy() did not new-copy/compare: ", diff});         cpy.display("Copy: ");      end      cpy = new;      obj.copy(cpy);      if (!cpy.compare(obj, diff)) begin         `vmm_error(log, {"TR::copy() did not copy/compare: ", diff});         cpy.display("Copy: ");      end`ifndef NO_PACKING      cpy = new;      bytes = new[0];      n = obj.byte_pack(bytes);      m = obj.byte_size();      if (n != m) begin         `vmm_error(log, $psprintf("TR::byte_pack() did not pack TR::byte_size() number of bytes: %d vs. %d", n, m));      end      m = cpy.byte_unpack(bytes);      if (n != m) begin         `vmm_error(log, $psprintf("TR::byte_pack()/byte_unpack() did not pack then unpack same number of bytes: %d then %d", n, m));      end      if (!cpy.compare(obj, diff)) begin         `vmm_error(log, {"TR::byte_pack()/byte_unpack() did not pack/unpack/compare: ", diff});         cpy.display("Copy: ");      end      cpy.save(fp);      sb.push_back(cpy);      $write("------------------------------------\n");   end   $fclose(fp);   fp = $fopen("TR.sav", "r");   if (fp == 0) begin      `vmm_fatal(log, "Cannot re-open file 'TR.sav'");   end   repeat (100) begin      if (!obj.load(fp)) begin         `vmm_error(log, "Error occured while loading object");      end      obj.display("Loaded: ");      cpy = sb.pop_front();      if (!cpy.compare(obj, diff)) begin         `vmm_error(log, {"TR::save()/load() did not save/load/compare: ", diff});         cpy.display("Saved: ");      end      $write("------------------------------------\n");   end`endif      log.report();endendprogram

⌨️ 快捷键说明

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