Expanded versions of source files are the output of the preprocessor. Lines subject to conditional compilation are not shown and all compiler pragmas have been stripped. Macros have been completely expanded.
std_lib/vmm_data_macros.sv unexpanded source
00001: // 00002: // ------------------------------------------------------------- 00003: // Copyright 2004-2008 Synopsys, Inc. 00004: // All Rights Reserved Worldwide 00005: // 00006: // Licensed under the Apache License, Version 2.0 (the 00007: // "License"); you may not use this file except in 00008: // compliance with the License. You may obtain a copy of 00009: // the License at 00010: // 00011: // http://www.apache.org/licenses/LICENSE-2.0 00012: // 00013: // Unless required by applicable law or agreed to in 00014: // writing, software distributed under the License is 00015: // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 00016: // CONDITIONS OF ANY KIND, either express or implied. See 00017: // the License for the specific language governing 00018: // permissions and limitations under the License. 00019: // ------------------------------------------------------------- 00020: // 00021: 00022: 00024: 00025: 00026: `define vmm_data_member_begin(_class) \ 00027: \ 00028: protected static _class __vmm_rhs; \ 00029: \ 00030: function void do_all(vmm_data::do_what_e do_what, \ 00031: ref logic [7:0] pack[], \ 00032: const ref logic [7:0] unpack[]); \ 00033: super.__vmm_rhs = this.__vmm_rhs; \ 00034: this.__vmm_status = 1; \ 00035: super.do_all(do_what, pack, unpack); \ 00036: if (super.__vmm_status == 0) return; : 00037: 00038: `define vmm_data_member_scalar(_name, _do) \ 00039: \ 00040: case (do_what & _do) \ 00041: DO_PRINT: begin \ 00042: $sformat(this.__vmm_image, "%s\n%s _name='h%0h", this.__vmm_image, this.__vmm_prefix, this._name); \ 00043: end \ 00044: DO_COPY: begin \ 00045: __vmm_rhs._name = this._name; \ 00046: end \ 00047: DO_COMPARE: begin \ 00048: if (__vmm_rhs._name !== this._name) begin \ 00049: $sformat(this.__vmm_image, "this._name ('h%0h) !== to._name ('h%0h)", \ 00050: this._name, __vmm_rhs._name); \ 00051: this.__vmm_status = 0; \ 00052: return; \ 00053: end \ 00054: end \ 00055: DO_PACK: begin \ 00056: int start; \ 00057: int count; \ 00058: start = this.__vmm_offset; \ 00059: `vmm_data_member_scalar_count(this._name,count) \ 00060: this.__vmm_maxbits = this._name; \ 00061: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00062: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00063: this.__vmm_len = this.__vmm_offset; \ 00064: end \ 00065: DO_UNPACK: begin \ 00066: int count; \ 00067: int start; \ 00068: start = this.__vmm_offset; \ 00069: `vmm_data_member_scalar_count(this._name,count) \ 00070: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00071: this._name = this.__vmm_maxbits; \ 00072: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00073: end \ 00074: endcase : 00075: 00076: `define vmm_data_member_scalar_array(_name, _do) \ 00077: \ 00078: case (do_what & _do) \ 00079: DO_PRINT: begin \ 00080: int size =0; \ 00081: size = $size(this._name); \ 00082: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, size); \ 00083: for (int i = 0; i < size; i++) begin \ 00084: $sformat(this.__vmm_image, "%s 'h%0h", this.__vmm_image, this._name[i]); \ 00085: if (i == 2 && size > 5) begin \ 00086: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00087: i = size - 3; \ 00088: end \ 00089: end \ 00090: end \ 00091: DO_COPY: begin \ 00092: __vmm_rhs._name = this._name; \ 00093: end \ 00094: DO_COMPARE: begin \ 00095: foreach (this._name[i]) begin \ 00096: if (__vmm_rhs._name[i] !== this._name[i]) begin \ 00097: $sformat(this.__vmm_image, "this._name[%0d] ('h%0h) !== to._name[%0d] ('h%0h)", \ 00098: i, this._name[i], i, __vmm_rhs._name[i]); \ 00099: this.__vmm_status = 0; \ 00100: return; \ 00101: end \ 00102: end \ 00103: end \ 00104: DO_PACK: begin \ 00105: int start; \ 00106: int count; \ 00107: bit [31:0] size=0; \ 00108: start = this.__vmm_offset; \ 00109: `vmm_data_member_update_offset(this.__vmm_offset,8) \ 00110: foreach (this._name[j]) begin \ 00111: if ( j == 0 ) \ 00112: `vmm_data_member_scalar_count(this._name[j],count) \ 00113: this.__vmm_maxbits = this._name[j]; \ 00114: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00115: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00116: size++; \ 00117: end \ 00118: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00119: `vmm_data_member_scalar_packint(pack,count,(start+4),0) \ 00120: this.__vmm_len = this.__vmm_offset; \ 00121: end \ 00122: DO_UNPACK: begin \ 00123: int start; \ 00124: int count; \ 00125: bit [31:0] size = 0; \ 00126: `vmm_data_member_scalar_unpackint(unpack,size,this.__vmm_offset,0) \ 00127: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00128: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00129: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00130: for (int j=0; j < size; j++) begin \ 00131: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00132: this._name[j] = this.__vmm_maxbits; \ 00133: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00134: end \ 00135: end \ 00136: endcase : 00137: 00138: 00139: `define vmm_data_member_scalar_da(_name, _do) \ 00140: \ 00141: case (do_what & _do) \ 00142: DO_PRINT: begin \ 00143: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.size()); \ 00144: for (int i = 0; i < this._name.size(); i++) begin \ 00145: $sformat(this.__vmm_image, "%s 'h%0h", this.__vmm_image, this._name[i]); \ 00146: if (i == 2 && this._name.size() > 5) begin \ 00147: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00148: i = this._name.size() - 3; \ 00149: end \ 00150: end \ 00151: end \ 00152: DO_COPY: begin \ 00153: __vmm_rhs._name = new [this._name.size()]; \ 00154: foreach(this._name[i]) __vmm_rhs._name[i]=this._name[i]; \ 00155: end \ 00156: DO_COMPARE: begin \ 00157: if (__vmm_rhs._name.size() !== this._name.size()) begin \ 00158: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 00159: this._name.size(), __vmm_rhs._name.size()); \ 00160: this.__vmm_status = 0; \ 00161: return; \ 00162: end \ 00163: foreach (this._name[i]) begin \ 00164: if (__vmm_rhs._name[i] !== this._name[i]) begin \ 00165: $sformat(this.__vmm_image, "this._name[%0d] ('h%0h) !== to._name[%0d] ('h%0h)", \ 00166: i, this._name[i], i, __vmm_rhs._name[i]); \ 00167: this.__vmm_status = 0; \ 00168: return; \ 00169: end \ 00170: end \ 00171: end \ 00172: DO_PACK: begin \ 00173: int start; \ 00174: int count; \ 00175: int index; \ 00176: bit [31:0] size=0; \ 00177: start = this.__vmm_offset; \ 00178: size = this._name.size(); \ 00179: foreach (this._name[j]) begin \ 00180: if ( j == 0) begin \ 00181: `vmm_data_member_scalar_count(this._name[j],count) \ 00182: `vmm_data_member_update_offset(this.__vmm_offset,8) \ 00183: end \ 00184: this.__vmm_maxbits = this._name[j]; \ 00185: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00186: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00187: end \ 00188: this.__vmm_len = this.__vmm_offset; \ 00189: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00190: `vmm_data_member_scalar_packint(pack,count,(start+4),0) \ 00191: end \ 00192: DO_UNPACK: begin \ 00193: int start; \ 00194: int count; \ 00195: int index; \ 00196: bit [31:0] size = 0; \ 00197: `vmm_data_member_scalar_unpackint(unpack,size,this.__vmm_offset,0) \ 00198: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00199: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00200: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00201: this._name = new [size]; \ 00202: for (int j=0; j < size; j++) begin \ 00203: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00204: this._name[j] = this.__vmm_maxbits; \ 00205: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00206: end \ 00207: end \ 00208: endcase : 00209: 00210: 00211: `define vmm_data_member_scalar_aa_scalar(_name, _do) \ 00212: \ 00213: case (do_what & _do) \ 00214: DO_PRINT: begin \ 00215: int _count = 0; \ 00216: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, \ 00217: this.__vmm_prefix, this._name.num()); \ 00218: foreach (this._name[i]) begin \ 00219: if (_count <= 2 || _count >= this._name.num()-2) \ 00220: $sformat(this.__vmm_image, "%s %0d:`h%0h", this.__vmm_image, \ 00221: i, this._name[i]); \ 00222: if (_count == 2 && this._name.num() > 5) begin \ 00223: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00224: end \ 00225: _count++; \ 00226: end \ 00227: end \ 00228: DO_COPY: begin \ 00229: __vmm_rhs._name.delete(); \ 00230: foreach(this._name[i]) begin \ 00231: __vmm_rhs._name[i]=this._name[i]; \ 00232: end \ 00233: end \ 00234: DO_COMPARE: begin \ 00235: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 00236: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 00237: this._name.num(), __vmm_rhs._name.num()); \ 00238: this.__vmm_status = 0; \ 00239: return; \ 00240: end \ 00241: foreach (this._name[i]) begin \ 00242: if (!__vmm_rhs._name.exists(i)) begin \ 00243: $sformat(this.__vmm_image, "this._name[%0d] exists but to._name[%0d] does not", \ 00244: i, i); \ 00245: this.__vmm_status = 0; \ 00246: return; \ 00247: end \ 00248: else if (__vmm_rhs._name[i] != this._name[i]) begin \ 00249: $sformat(this.__vmm_image, "this._name[%0d]:'h%0h !== to._name[%0d]:'h%0h", \ 00250: i, this._name[i], i, __vmm_rhs._name[i]); \ 00251: this.__vmm_status = 0; \ 00252: return; \ 00253: end \ 00254: end \ 00255: end \ 00256: DO_PACK: begin \ 00257: int start; \ 00258: int count; \ 00259: int index; \ 00260: int element=0; \ 00261: bit [31:0] size=0; \ 00262: start = this.__vmm_offset; \ 00263: element = this._name.first(index); \ 00264: `vmm_data_member_scalar_count(element,count) \ 00265: element = 0; \ 00266: size = this._name.num(); \ 00267: foreach (this._name[j]) begin \ 00268: this.__vmm_maxbits = this._name[j]; \ 00269: index = j; \ 00270: if (element == 0 ) begin\ 00271: `vmm_data_member_update_offset(this.__vmm_offset,8) \ 00272: element = 1; \ 00273: end \ 00274: `vmm_data_member_scalar_packint(pack,index,this.__vmm_offset,0) \ 00275: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00276: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00277: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00278: end \ 00279: this.__vmm_len = this.__vmm_offset; \ 00280: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00281: `vmm_data_member_scalar_packint(pack,count,(start+4),0) \ 00282: end \ 00283: DO_UNPACK: begin \ 00284: int start; \ 00285: int count; \ 00286: int index; \ 00287: bit [31:0] size = 0; \ 00288: start = this.__vmm_offset; \ 00289: `vmm_data_member_scalar_unpackint(unpack,size,this.__vmm_offset,0) \ 00290: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00291: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00292: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00293: for (int j=0; j < size; j++) begin \ 00294: `vmm_data_member_scalar_unpackint(unpack,index,this.__vmm_offset,0) \ 00295: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00296: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00297: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00298: this._name[index] = this.__vmm_maxbits; \ 00299: end \ 00300: end \ 00301: endcase : 00302: 00303: `define vmm_data_member_scalar_aa_string(_name, _do) \ 00304: \ 00305: case (do_what & _do) \ 00306: DO_PRINT: begin \ 00307: int _count = 0; \ 00308: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, \ 00309: this.__vmm_prefix, this._name.num()); \ 00310: foreach (this._name[i]) begin \ 00311: if (_count <= 2 || _count >= this._name.num()-2) \ 00312: $sformat(this.__vmm_image, "%s \"%s\":'h%0h", this.__vmm_image, i, this._name[i]); \ 00313: if (_count == 2 && this._name.num() > 5) begin \ 00314: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00315: end \ 00316: _count++; \ 00317: end \ 00318: end \ 00319: DO_COPY: begin \ 00320: __vmm_rhs._name.delete(); \ 00321: foreach(this._name[i]) begin \ 00322: __vmm_rhs._name[i] = this._name[i]; \ 00323: end \ 00324: end \ 00325: DO_COMPARE: begin \ 00326: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 00327: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 00328: this._name.num(), __vmm_rhs._name.num()); \ 00329: this.__vmm_status = 0; \ 00330: return; \ 00331: end \ 00332: foreach (this._name[i]) begin \ 00333: if(!__vmm_rhs._name.exists(i)) begin \ 00334: $sformat(this.__vmm_image, "this._name[\"%s\"] exists but to._name[\"%s\"] does not", \ 00335: i, i); \ 00336: this.__vmm_status = 0; \ 00337: return; \ 00338: end \ 00339: else if (__vmm_rhs._name[i] != this._name[i]) begin \ 00340: $sformat(this.__vmm_image, "this._name[\"%s\"]:'h%0h !== to._name[\"%s\"]:'h%0h", \ 00341: i, this._name[i], i, __vmm_rhs._name[i]); \ 00342: this.__vmm_status = 0; \ 00343: return; \ 00344: end \ 00345: end \ 00346: end \ 00347: DO_PACK: begin \ 00348: int start; \ 00349: int count; \ 00350: string sindextemp; \ 00351: int sindexcount; \ 00352: string stemp; \ 00353: bit [31:0] size=0; \ 00354: start = this.__vmm_offset; \ 00355: stemp = this._name.first(sindextemp); \ 00356: size = this._name.num(); \ 00357: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00358: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00359: this.__vmm_maxbits = 0; \ 00360: foreach (this._name[j]) begin \ 00361: this.__vmm_maxbits =0; \ 00362: sindextemp = j; \ 00363: sindexcount = sindextemp.len(); \ 00364: this.__vmm_maxbits = sindextemp; \ 00365: `vmm_data_member_scalar_packint(pack,sindexcount,this.__vmm_offset,0) \ 00366: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00367: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 00368: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 00369: this.__vmm_maxbits =0; \ 00370: `vmm_data_member_scalar_count(this._name[j],count) \ 00371: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00372: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00373: this.__vmm_maxbits = this._name[j]; \ 00374: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00375: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00376: end \ 00377: this.__vmm_len = this.__vmm_offset; \ 00378: end \ 00379: DO_UNPACK: begin \ 00380: int start; \ 00381: int count; \ 00382: string sindextemp; \ 00383: int sindexcount; \ 00384: string stemp; \ 00385: bit [31:0] size=0; \ 00386: this.__vmm_maxbits = 0; \ 00387: start = this.__vmm_offset; \ 00388: `vmm_data_member_scalar_unpackint(unpack,size,this.__vmm_offset,0) \ 00389: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00390: for (int j=0; j < size; j++) begin \ 00391: `vmm_data_member_scalar_unpackint(unpack,sindexcount,this.__vmm_offset,0) \ 00392: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00393: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 00394: sindextemp = this.__vmm_maxbits; \ 00395: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 00396: this.__vmm_maxbits = 0; \ 00397: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00398: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00399: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00400: this._name[sindextemp] = this.__vmm_maxbits; \ 00401: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00402: end \ 00403: end \ 00404: endcase : 00405: 00406: 00407: `define vmm_data_member_string(_name, _do) \ 00408: \ 00409: case (do_what & _do) \ 00410: DO_PRINT: begin \ 00411: $sformat(this.__vmm_image, "%s\n%s _name=\"%s\"", this.__vmm_image, this.__vmm_prefix, this._name); \ 00412: end \ 00413: DO_COPY: begin \ 00414: __vmm_rhs._name = this._name; \ 00415: end \ 00416: DO_COMPARE: begin \ 00417: if (__vmm_rhs._name != this._name) begin \ 00418: $sformat(this.__vmm_image, "this._name (\"%s\") !== to._name (\"%s\")", \ 00419: this._name, __vmm_rhs._name); \ 00420: this.__vmm_status = 0; \ 00421: return; \ 00422: end \ 00423: end \ 00424: DO_PACK: begin \ 00425: int start; \ 00426: int count; \ 00427: start = this.__vmm_offset; \ 00428: count = (this._name.len()); \ 00429: this.__vmm_maxbits = 0; \ 00430: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00431: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00432: this.__vmm_maxbits = this._name; \ 00433: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00434: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00435: this.__vmm_len = this.__vmm_offset; \ 00436: end \ 00437: DO_UNPACK: begin \ 00438: int count; \ 00439: int start; \ 00440: int size; \ 00441: this.__vmm_maxbits = 0; \ 00442: start = this.__vmm_offset; \ 00443: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00444: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00445: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00446: this._name = this.__vmm_maxbits; \ 00447: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00448: end \ 00449: endcase : 00450: 00451: 00452: `define vmm_data_member_string_array(_name, _do) \ 00453: \ 00454: case (do_what & _do) \ 00455: DO_PRINT: begin \ 00456: int size =0; \ 00457: size = $size(this._name); \ 00458: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, size); \ 00459: for (int i = 0; i < size; i++) begin \ 00460: $sformat(this.__vmm_image, "%s \"%s\"", this.__vmm_image, this._name[i]); \ 00461: if (i == 2 && size > 5) begin \ 00462: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00463: i = size - 3; \ 00464: end \ 00465: end \ 00466: end \ 00467: DO_COPY: begin \ 00468: __vmm_rhs._name = this._name; \ 00469: end \ 00470: DO_COMPARE: begin \ 00471: foreach (this._name[i]) begin \ 00472: if (__vmm_rhs._name[i] != this._name[i]) begin \ 00473: $sformat(this.__vmm_image, "this._name[%0d] (%s) !== to._name[%0d] (%s)", \ 00474: i, this._name[i], i, __vmm_rhs._name[i]); \ 00475: this.__vmm_status = 0; \ 00476: return; \ 00477: end \ 00478: end \ 00479: end \ 00480: DO_PACK: begin \ 00481: int start; \ 00482: int count; \ 00483: string stemp; \ 00484: bit [31:0] size=0; \ 00485: start = this.__vmm_offset; \ 00486: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00487: this.__vmm_maxbits =0; \ 00488: foreach (this._name[j]) begin \ 00489: count = (this._name[j].len()); \ 00490: this.__vmm_maxbits = this._name[j]; \ 00491: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00492: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00493: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00494: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00495: size++; \ 00496: end \ 00497: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00498: this.__vmm_len = this.__vmm_offset; \ 00499: end \ 00500: DO_UNPACK: begin \ 00501: int count; \ 00502: int start; \ 00503: bit [31:0] size = 0; \ 00504: start = this.__vmm_offset; \ 00505: this.__vmm_maxbits =0; \ 00506: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 00507: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00508: for (int j=0; j < size; j++) begin \ 00509: this.__vmm_maxbits =""; \ 00510: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00511: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00512: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00513: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00514: this._name[j] = this.__vmm_maxbits; \ 00515: this.__vmm_maxbits =""; \ 00516: end \ 00517: end \ 00518: endcase : 00519: 00520: `define vmm_data_member_string_da(_name, _do) \ 00521: \ 00522: case (do_what & _do) \ 00523: DO_PRINT: begin \ 00524: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.size()); \ 00525: for (int i = 0; i < this._name.size(); i++) begin \ 00526: $sformat(this.__vmm_image, "%s \"%s\"", this.__vmm_image, this._name[i]); \ 00527: if (i == 2 && this._name.size() > 5) begin \ 00528: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00529: i = this._name.size() - 3; \ 00530: end \ 00531: end \ 00532: end \ 00533: DO_COPY: begin \ 00534: __vmm_rhs._name = new [this._name.size()]; \ 00535: foreach(this._name[i]) __vmm_rhs._name[i] = this._name[i]; \ 00536: end \ 00537: DO_COMPARE: begin \ 00538: if (__vmm_rhs._name.size() !== this._name.size()) begin \ 00539: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 00540: this._name.size(), __vmm_rhs._name.size()); \ 00541: this.__vmm_status = 0; \ 00542: return; \ 00543: end \ 00544: foreach (this._name[i]) begin \ 00545: if (__vmm_rhs._name[i] != this._name[i]) begin \ 00546: $sformat(this.__vmm_image, "this._name[%0d] (%s) !== to._name[%0d] (%s)", \ 00547: i, this._name[i], i, __vmm_rhs._name[i]); \ 00548: this.__vmm_status = 0; \ 00549: return; \ 00550: end \ 00551: end \ 00552: end \ 00553: DO_PACK: begin \ 00554: int start; \ 00555: int count; \ 00556: int firstcount; \ 00557: string stemp; \ 00558: bit [31:0] size=0; \ 00559: start = this.__vmm_offset; \ 00560: size = this._name.size(); \ 00561: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00562: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00563: this.__vmm_maxbits =0; \ 00564: foreach (this._name[j]) begin \ 00565: count = (this._name[j].len()); \ 00566: this.__vmm_maxbits = this._name[j]; \ 00567: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00568: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00569: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00570: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00571: end \ 00572: this.__vmm_len = this.__vmm_offset; \ 00573: end \ 00574: DO_UNPACK: begin \ 00575: int count; \ 00576: int index; \ 00577: int start; \ 00578: bit [31:0] size = 0; \ 00579: start = this.__vmm_offset; \ 00580: this.__vmm_maxbits =0; \ 00581: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 00582: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00583: this._name = new [size]; \ 00584: for (int j=0; j < size; j++) begin \ 00585: this.__vmm_maxbits =""; \ 00586: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00587: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00588: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00589: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00590: this._name[j] = this.__vmm_maxbits; \ 00591: this.__vmm_maxbits =""; \ 00592: end \ 00593: end \ 00594: endcase : 00595: 00596: `define vmm_data_member_string_aa_scalar(_name, _do) \ 00597: \ 00598: case (do_what & _do) \ 00599: DO_PRINT: begin \ 00600: int _count = 0; \ 00601: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.num()); \ 00602: foreach(this._name[i]) begin \ 00603: if (_count <= 2 || _count >= this._name.num()-2) \ 00604: $sformat(this.__vmm_image, "%s %0d:\"%s\"", this.__vmm_image, i, this._name[i]); \ 00605: if (_count == 2 && this._name.num() > 5) begin \ 00606: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00607: end \ 00608: _count++; \ 00609: end \ 00610: $sformat(this.__vmm_image, "%s\"", this.__vmm_image); \ 00611: end \ 00612: DO_COPY: begin \ 00613: __vmm_rhs._name.delete(); \ 00614: foreach(this._name[i]) begin \ 00615: __vmm_rhs._name[i]=this._name[i]; \ 00616: end \ 00617: end \ 00618: DO_COMPARE: begin \ 00619: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 00620: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 00621: this._name.num(), __vmm_rhs._name.num()); \ 00622: this.__vmm_status = 0; \ 00623: return; \ 00624: end \ 00625: foreach (this._name[i]) begin \ 00626: if (!__vmm_rhs._name.exists(i)) begin \ 00627: $sformat(this.__vmm_image, "this._name[%0d] exists but to._name[%0d] does not", \ 00628: i, i); \ 00629: this.__vmm_status = 0; \ 00630: return; \ 00631: end \ 00632: else if (__vmm_rhs._name[i] != this._name[i]) begin \ 00633: $sformat(this.__vmm_image, "this._name[%0d] (\"%s\") !== to._name[%0d] (\"%s\")", \ 00634: i, this._name[i], i, __vmm_rhs._name[i]); \ 00635: this.__vmm_status = 0; \ 00636: return; \ 00637: end \ 00638: end \ 00639: end \ 00640: DO_PACK: begin \ 00641: int start; \ 00642: int count; \ 00643: int index; \ 00644: bit [31:0] size=0; \ 00645: start = this.__vmm_offset; \ 00646: this.__vmm_maxbits = 0; \ 00647: size = this._name.num(); \ 00648: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00649: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00650: foreach (this._name[j]) begin \ 00651: this.__vmm_maxbits = 0; \ 00652: count = (this._name[j].len()); \ 00653: this.__vmm_maxbits = this._name[j]; \ 00654: index = j; \ 00655: `vmm_data_member_scalar_packint(pack,index,this.__vmm_offset,0) \ 00656: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00657: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00658: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00659: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00660: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00661: end \ 00662: this.__vmm_len = this.__vmm_offset; \ 00663: end \ 00664: DO_UNPACK: begin \ 00665: int start; \ 00666: int count; \ 00667: int index; \ 00668: bit [31:0] size = 0; \ 00669: start = this.__vmm_offset; \ 00670: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 00671: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00672: this.__vmm_maxbits = 0; \ 00673: for (int j=0; j < size; j++) begin \ 00674: `vmm_data_member_scalar_unpackint(unpack,index,this.__vmm_offset,0) \ 00675: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00676: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00677: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00678: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00679: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00680: this._name[index] = this.__vmm_maxbits; \ 00681: this.__vmm_maxbits = 0; \ 00682: end \ 00683: end \ 00684: endcase : 00685: 00686: 00687: `define vmm_data_member_string_aa_string(_name, _do) \ 00688: \ 00689: case (do_what & _do) \ 00690: DO_PRINT: begin \ 00691: int _count = 0; \ 00692: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.num()); \ 00693: foreach (this._name[i]) begin \ 00694: if (_count <= 2 || _count >= this._name.num()-2) \ 00695: $sformat(this.__vmm_image, "%s \"%s\":\"%s\"", this.__vmm_image, i, this._name[i]); \ 00696: if (_count == 2 && this._name.num() > 5) begin \ 00697: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00698: end \ 00699: _count++; \ 00700: end \ 00701: end \ 00702: DO_COPY: begin \ 00703: __vmm_rhs._name.delete(); \ 00704: foreach(this._name[i]) __vmm_rhs._name[i] = this._name[i]; \ 00705: end \ 00706: DO_COMPARE: begin \ 00707: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 00708: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 00709: this._name.num(), __vmm_rhs._name.num()); \ 00710: this.__vmm_status = 0; \ 00711: return; \ 00712: end \ 00713: foreach (this._name[i]) begin \ 00714: if (!__vmm_rhs._name.exists(i)) begin \ 00715: $sformat(this.__vmm_image, "this._name[\"%s\"] exists but to._name[\"%s\"] does not", \ 00716: i, i); \ 00717: this.__vmm_status = 0; \ 00718: return; \ 00719: end \ 00720: else if (__vmm_rhs._name[i] != this._name[i]) begin \ 00721: $sformat(this.__vmm_image, "this._name[\"%s\"] (\"%s\") !== to._name[\"%s\"] (\"%s\")", \ 00722: i, this._name[i], i, __vmm_rhs._name[i]); \ 00723: this.__vmm_status = 0; \ 00724: return; \ 00725: end \ 00726: end \ 00727: end \ 00728: DO_PACK: begin \ 00729: int start; \ 00730: int count; \ 00731: string sindextemp; \ 00732: int sindexcount; \ 00733: bit [31:0] size=0; \ 00734: start = this.__vmm_offset; \ 00735: size = this._name.num(); \ 00736: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00737: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00738: this.__vmm_maxbits = 0; \ 00739: foreach (this._name[j]) begin \ 00740: this.__vmm_maxbits =0; \ 00741: sindextemp = j; \ 00742: sindexcount = sindextemp.len(); \ 00743: this.__vmm_maxbits = sindextemp; \ 00744: `vmm_data_member_scalar_packint(pack,sindexcount,this.__vmm_offset,0) \ 00745: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00746: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 00747: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 00748: this.__vmm_maxbits =0; \ 00749: count = this._name[j].len(); \ 00750: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00751: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00752: this.__vmm_maxbits = this._name[j]; \ 00753: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00754: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00755: end \ 00756: this.__vmm_len = this.__vmm_offset; \ 00757: end \ 00758: DO_UNPACK: begin \ 00759: int start; \ 00760: int count; \ 00761: string sindextemp; \ 00762: int sindexcount; \ 00763: string stemp; \ 00764: bit [31:0] size=0; \ 00765: this.__vmm_maxbits = 0; \ 00766: start = this.__vmm_offset; \ 00767: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 00768: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00769: for (int j=0; j < size; j++) begin \ 00770: this.__vmm_maxbits = 0; \ 00771: `vmm_data_member_scalar_unpackint(unpack,sindexcount,this.__vmm_offset,0) \ 00772: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00773: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 00774: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 00775: sindextemp = this.__vmm_maxbits; \ 00776: this.__vmm_maxbits = 0; \ 00777: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00778: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00779: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00780: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00781: this._name[sindextemp] = this.__vmm_maxbits; \ 00782: end \ 00783: end \ 00784: endcase : 00785: 00786: 00787: `define vmm_data_member_enum(_name, _do) \ 00788: \ 00789: case (do_what & _do) \ 00790: DO_PRINT: begin \ 00791: $sformat(this.__vmm_image, "%s\n%s _name=%s", this.__vmm_image, this.__vmm_prefix, this._name.name()); \ 00792: end \ 00793: DO_COPY: begin \ 00794: __vmm_rhs._name = this._name; \ 00795: end \ 00796: DO_COMPARE: begin \ 00797: if (__vmm_rhs._name !== this._name) begin \ 00798: $sformat(this.__vmm_image, "this._name (%s) !== to._name (%s)", \ 00799: this._name.name(), __vmm_rhs._name.name()); \ 00800: this.__vmm_status = 0; \ 00801: return; \ 00802: end \ 00803: end \ 00804: DO_PACK: begin \ 00805: int start; \ 00806: int count; \ 00807: string stemp; \ 00808: bit [31:0] size=0; \ 00809: start = this.__vmm_offset; \ 00810: stemp = this._name.name(); \ 00811: count = (stemp.len()); \ 00812: this.__vmm_maxbits = this._name.name(); \ 00813: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00814: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00815: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00816: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00817: this.__vmm_len = this.__vmm_offset; \ 00818: end \ 00819: DO_UNPACK: begin \ 00820: int count; \ 00821: int start; \ 00822: int size; \ 00823: int index; \ 00824: string stemp; \ 00825: start = this.__vmm_offset; \ 00826: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00827: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00828: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00829: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00830: stemp = this.__vmm_maxbits; \ 00831: index = 0; \ 00832: `vmm_data_member_enum_set_name(this._name,stemp,index) \ 00833: end \ 00834: endcase : 00835: 00836: 00837: `define vmm_data_member_enum_array(_name, _do) \ 00838: \ 00839: case (do_what & _do) \ 00840: DO_PRINT: begin \ 00841: int size =0; \ 00842: size = $size(this._name); \ 00843: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, size); \ 00844: for (int i = 0; i < size; i++) begin \ 00845: $sformat(this.__vmm_image, "%s %s", this.__vmm_image, this._name[i].name()); \ 00846: if (i == 2 && size > 5) begin \ 00847: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00848: i = size - 3; \ 00849: end \ 00850: end \ 00851: end \ 00852: DO_COPY: begin \ 00853: __vmm_rhs._name = this._name; \ 00854: end \ 00855: DO_COMPARE: begin \ 00856: foreach (this._name[i]) begin \ 00857: if (__vmm_rhs._name[i] !== this._name[i]) begin \ 00858: $sformat(this.__vmm_image, "this._name[%0d] (%s) !== to._name[%0d] (%s)", \ 00859: i, this._name[i].name(), i, __vmm_rhs._name[i].name()); \ 00860: this.__vmm_status = 0; \ 00861: return; \ 00862: end \ 00863: end \ 00864: end \ 00865: DO_PACK: begin \ 00866: int start; \ 00867: int count; \ 00868: string stemp; \ 00869: bit [31:0] size=0; \ 00870: start = this.__vmm_offset; \ 00871: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00872: this.__vmm_maxbits = 0; \ 00873: foreach (this._name[j]) begin \ 00874: stemp = this._name[j].name(); \ 00875: count = (stemp.len()); \ 00876: this.__vmm_maxbits = this._name[j].name(); \ 00877: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00878: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00879: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00880: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00881: size++; \ 00882: end \ 00883: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00884: this.__vmm_len = this.__vmm_offset; \ 00885: end \ 00886: DO_UNPACK: begin \ 00887: int count; \ 00888: int start; \ 00889: int index; \ 00890: string stemp; \ 00891: bit [31:0] size = 0; \ 00892: start = this.__vmm_offset; \ 00893: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 00894: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00895: this.__vmm_maxbits =0; \ 00896: for (int j=0; j < size; j++) begin \ 00897: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00898: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00899: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00900: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00901: stemp = this.__vmm_maxbits; \ 00902: index = 0; \ 00903: `vmm_data_member_enum_set_name(this._name[j],stemp,index) \ 00904: this.__vmm_maxbits =""; \ 00905: end \ 00906: end \ 00907: endcase : 00908: 00909: `define vmm_data_member_enum_da(_name, _do) \ 00910: \ 00911: case (do_what & _do) \ 00912: DO_PRINT: begin \ 00913: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.size()); \ 00914: for (int i = 0; i < this._name.size(); i++) begin \ 00915: $sformat(this.__vmm_image, "%s %s", this.__vmm_image, this._name[i].name()); \ 00916: if (i == 2 && this._name.size() > 5) begin \ 00917: this.__vmm_image = {this.__vmm_image, " ..."}; \ 00918: i = this._name.size() - 3; \ 00919: end \ 00920: end \ 00921: end \ 00922: DO_COPY: begin \ 00923: __vmm_rhs._name = new [this._name.size()]; \ 00924: foreach(this._name[i]) __vmm_rhs._name[i] = this._name[i]; \ 00925: end \ 00926: DO_COMPARE: begin \ 00927: if (__vmm_rhs._name.size() !== this._name.size()) begin \ 00928: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 00929: this._name.size(), __vmm_rhs._name.size()); \ 00930: this.__vmm_status = 0; \ 00931: return; \ 00932: end \ 00933: foreach (this._name[i]) begin \ 00934: if (__vmm_rhs._name[i] !== this._name[i]) begin \ 00935: $sformat(this.__vmm_image, "this._name[%0d] (%s) !== to._name[%0d] (%s)", \ 00936: i, this._name[i].name(), i, __vmm_rhs._name[i].name()); \ 00937: this.__vmm_status = 0; \ 00938: return; \ 00939: end \ 00940: end \ 00941: end \ 00942: DO_PACK: begin \ 00943: int start; \ 00944: int count; \ 00945: int index; \ 00946: int element; \ 00947: string stemp; \ 00948: bit [31:0] size=0; \ 00949: start = this.__vmm_offset; \ 00950: size = this._name.size(); \ 00951: `vmm_data_member_scalar_packint(pack,size,start,0) \ 00952: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00953: this.__vmm_maxbits = 0; \ 00954: foreach (this._name[j]) begin \ 00955: stemp = this._name[j].name(); \ 00956: count = (stemp.len()); \ 00957: this.__vmm_maxbits = this._name[j].name(); \ 00958: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 00959: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00960: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00961: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00962: end \ 00963: this.__vmm_len = this.__vmm_offset; \ 00964: end \ 00965: DO_UNPACK: begin \ 00966: int count; \ 00967: int index; \ 00968: int start; \ 00969: string stemp; \ 00970: bit [31:0] size = 0; \ 00971: start = this.__vmm_offset; \ 00972: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 00973: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00974: this._name = new [size]; \ 00975: this.__vmm_maxbits =0; \ 00976: for (int j=0; j < size; j++) begin \ 00977: this.__vmm_maxbits =""; \ 00978: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 00979: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 00980: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 00981: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 00982: stemp = this.__vmm_maxbits; \ 00983: index = 0; \ 00984: `vmm_data_member_enum_set_name(this._name[j],stemp,index) \ 00985: this.__vmm_maxbits =""; \ 00986: end \ 00987: end \ 00988: endcase : 00989: 00990: 00991: `define vmm_data_member_enum_aa_scalar(_name, _do) \ 00992: \ 00993: case (do_what & _do) \ 00994: DO_PRINT: begin \ 00995: int _count = 0; \ 00996: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.num()); \ 00997: foreach(this._name[i]) begin \ 00998: if (_count <= 2 || _count >= this._name.num()-2) begin \ 00999: $sformat(this.__vmm_image, "%s %0d: %s ", this.__vmm_image, i, this._name[i].name()); \ 01000: if (_count == 2 && this._name.num() > 5) begin \ 01001: this.__vmm_image = {this.__vmm_image, " ..."}; \ 01002: end \ 01003: end \ 01004: _count++; \ 01005: end \ 01006: $sformat(this.__vmm_image, "%s", this.__vmm_image); \ 01007: end \ 01008: DO_COPY: begin \ 01009: __vmm_rhs._name.delete(); \ 01010: foreach(this._name[i]) begin \ 01011: __vmm_rhs._name[i]=this._name[i]; \ 01012: end \ 01013: end \ 01014: DO_COMPARE: begin \ 01015: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 01016: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 01017: this._name.num(), __vmm_rhs._name.num()); \ 01018: this.__vmm_status = 0; \ 01019: return; \ 01020: end \ 01021: foreach (this._name[i]) begin \ 01022: if (!__vmm_rhs._name.exists(i)) begin \ 01023: $sformat(this.__vmm_image, "this._name[%0d] exists but to._name[%0d] does not", \ 01024: i, i); \ 01025: this.__vmm_status = 0; \ 01026: return; \ 01027: end \ 01028: else if (__vmm_rhs._name[i] != this._name[i]) begin \ 01029: $sformat(this.__vmm_image, "this._name[%0d] (%s) !== to._name[%0d] (%s)", \ 01030: i, this._name[i].name, i, __vmm_rhs._name[i].name); \ 01031: this.__vmm_status = 0; \ 01032: return; \ 01033: end \ 01034: end \ 01035: end \ 01036: DO_PACK: begin \ 01037: int start; \ 01038: int count; \ 01039: int index; \ 01040: string stemp; \ 01041: bit [31:0] size=0; \ 01042: start = this.__vmm_offset; \ 01043: this.__vmm_maxbits = 0; \ 01044: size = this._name.num(); \ 01045: `vmm_data_member_scalar_packint(pack,size,start,0) \ 01046: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01047: foreach (this._name[j]) begin \ 01048: this.__vmm_maxbits = 0; \ 01049: stemp = this._name[j].name(); \ 01050: count = (stemp.len()); \ 01051: this.__vmm_maxbits = this._name[j].name(); \ 01052: index = j; \ 01053: `vmm_data_member_scalar_packint(pack,index,this.__vmm_offset,0) \ 01054: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01055: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 01056: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01057: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 01058: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01059: end \ 01060: this.__vmm_len = this.__vmm_offset; \ 01061: end \ 01062: DO_UNPACK: begin \ 01063: int count; \ 01064: int start; \ 01065: int index=0; \ 01066: string stemp; \ 01067: bit [31:0] size = 0; \ 01068: start = this.__vmm_offset; \ 01069: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 01070: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01071: this.__vmm_maxbits =0; \ 01072: for (int j=0; j < size; j++) begin \ 01073: this.__vmm_maxbits =0; \ 01074: `vmm_data_member_scalar_unpackint(unpack,index,this.__vmm_offset,0) \ 01075: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01076: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 01077: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01078: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 01079: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01080: stemp = this.__vmm_maxbits; \ 01081: count = 0; \ 01082: `vmm_data_member_enum_set_name(this._name[index],stemp,count) \ 01083: this.__vmm_maxbits =""; \ 01084: end \ 01085: end \ 01086: endcase : 01087: 01088: 01089: 01090: `define vmm_data_member_enum_aa_string(_name, _do) \ 01091: \ 01092: case (do_what & _do) \ 01093: DO_PRINT: begin \ 01094: int _count = 0; \ 01095: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.num()); \ 01096: foreach(this._name[i]) begin \ 01097: if (_count <= 2 || _count >= this._name.num()-2) begin \ 01098: $sformat(this.__vmm_image, "%s \"%s\":%s", this.__vmm_image, i, this._name[i].name); \ 01099: if (_count == 2 && this._name.num() > 5) begin \ 01100: this.__vmm_image = {this.__vmm_image, " ..."}; \ 01101: end \ 01102: end \ 01103: _count++; \ 01104: end \ 01105: end \ 01106: DO_COPY: begin \ 01107: __vmm_rhs._name.delete(); \ 01108: foreach (this._name[i]) begin \ 01109: __vmm_rhs._name[i] = this._name[i]; \ 01110: end \ 01111: end \ 01112: DO_COMPARE: begin \ 01113: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 01114: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 01115: this._name.num(), __vmm_rhs._name.num()); \ 01116: this.__vmm_status = 0; \ 01117: return; \ 01118: end \ 01119: foreach (this._name[i]) begin \ 01120: if (!__vmm_rhs._name.exists(i)) begin \ 01121: $sformat(this.__vmm_image, "this._name[\"%s\"] exists but to._name[\"%s\"] does not", \ 01122: i, i); \ 01123: this.__vmm_status = 0; \ 01124: return; \ 01125: end \ 01126: else if (__vmm_rhs._name[i] != this._name[i]) begin \ 01127: $sformat(this.__vmm_image, "this._name[\"%s\"] (%s) !== to._name[\"%s\"] (%s)", \ 01128: i, this._name[i].name, i, __vmm_rhs._name[i].name); \ 01129: this.__vmm_status = 0; \ 01130: return; \ 01131: end \ 01132: end \ 01133: end \ 01134: DO_PACK: begin \ 01135: int start; \ 01136: int count; \ 01137: int index; \ 01138: string sindextemp; \ 01139: int sindexcount; \ 01140: string stemp; \ 01141: bit [31:0] size=0; \ 01142: start = this.__vmm_offset; \ 01143: stemp = this._name.first(sindextemp); \ 01144: index = 0; \ 01145: size = this._name.num(); \ 01146: `vmm_data_member_scalar_packint(pack,size,start,0) \ 01147: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01148: this.__vmm_maxbits = 0; \ 01149: foreach (this._name[j]) begin \ 01150: this.__vmm_maxbits =0; \ 01151: sindextemp = j; \ 01152: sindexcount = sindextemp.len(); \ 01153: this.__vmm_maxbits = sindextemp; \ 01154: `vmm_data_member_scalar_packint(pack,sindexcount,this.__vmm_offset,0) \ 01155: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01156: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 01157: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 01158: this.__vmm_maxbits =0; \ 01159: stemp = this._name[j].name(); \ 01160: count = (stemp.len()); \ 01161: `vmm_data_member_scalar_packint(pack,count,this.__vmm_offset,0) \ 01162: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01163: this.__vmm_maxbits = this._name[j].name(); \ 01164: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,count,this.__vmm_offset) \ 01165: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01166: end \ 01167: this.__vmm_len = this.__vmm_offset; \ 01168: end \ 01169: DO_UNPACK: begin \ 01170: int start; \ 01171: int count; \ 01172: int index; \ 01173: string sindextemp; \ 01174: int sindexcount; \ 01175: string stemp; \ 01176: bit [31:0] size=0; \ 01177: index = 0; \ 01178: start = this.__vmm_offset; \ 01179: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 01180: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01181: this.__vmm_maxbits = 0; \ 01182: for (int j=0; j < size; j++) begin \ 01183: this.__vmm_maxbits = 0; \ 01184: `vmm_data_member_scalar_unpackint(unpack,sindexcount,this.__vmm_offset,0) \ 01185: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01186: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 01187: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 01188: sindextemp = this.__vmm_maxbits; \ 01189: this.__vmm_maxbits = 0; \ 01190: `vmm_data_member_scalar_unpackint(unpack,count,this.__vmm_offset,0) \ 01191: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01192: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,count,this.__vmm_offset) \ 01193: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01194: stemp = this.__vmm_maxbits; \ 01195: index = 0; \ 01196: `vmm_data_member_enum_set_name(this._name[sindextemp],stemp,index) \ 01197: this.__vmm_maxbits =""; \ 01198: end \ 01199: end \ 01200: endcase : 01201: 01202: 01203: `define vmm_data_member_handle(_name, _do) \ 01204: \ 01205: case (do_what & _do) \ 01206: DO_PRINT: begin \ 01207: if ( _name == null ) begin \ 01208: `vmm_warning(this.log, " vmm_data _name object does not exist, no action"); \ 01209: end \ 01210: else begin \ 01211: string _prefix = this.__vmm_prefix; \ 01212: $sformat(this.__vmm_image, "%s\n%s _name is %s", this.__vmm_image, this.__vmm_prefix, \ 01213: (this._name == null) ? "null" : "<ref>"); \ 01214: this.__vmm_prefix = _prefix; \ 01215: end \ 01216: end \ 01217: DO_COPY: begin \ 01218: if ( _name == null ) begin \ 01219: `vmm_warning(this.log, " vmm_data _name object does not exist, no action"); \ 01220: end \ 01221: else begin \ 01222: __vmm_rhs._name = this._name; \ 01223: end \ 01224: end \ 01225: DO_COMPARE: begin \ 01226: string diff; \ 01227: if ( _name == null ) begin \ 01228: `vmm_warning(this.log, " vmm_data _name object does not exist, no action"); \ 01229: end \ 01230: else begin \ 01231: if (this._name != __vmm_rhs._name) begin \ 01232: this.__vmm_image = "this._name !== to._name"; \ 01233: this.__vmm_status = 0; \ 01234: return; \ 01235: end \ 01236: end \ 01237: end \ 01238: DO_PACK: begin \ 01239: if ( _name == null ) begin \ 01240: `vmm_warning(this.log, " vmm_data _name object does not exist, no action"); \ 01241: end \ 01242: else begin \ 01243: end \ 01244: end \ 01245: DO_UNPACK: begin \ 01246: this._name = null; \ 01247: end \ 01248: endcase : 01249: 01250: 01251: `define vmm_data_member_handle_array(_name, _do) \ 01252: \ 01253: case (do_what & _do) \ 01254: DO_PRINT: begin \ 01255: int size =0; \ 01256: size = $size(this._name); \ 01257: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, size); \ 01258: for (int i = 0; i < size; i++) begin \ 01259: $sformat(this.__vmm_image, "%s %s", this.__vmm_image, \ 01260: (this._name[i] == null) ? "null" : "<ref>"); \ 01261: if (i == 2 && size > 5) begin \ 01262: this.__vmm_image = {this.__vmm_image, " ..."}; \ 01263: i = size - 3; \ 01264: end \ 01265: end \ 01266: end \ 01267: DO_COPY: begin \ 01268: __vmm_rhs._name = this._name; \ 01269: end \ 01270: DO_COMPARE: begin \ 01271: foreach (this._name[i]) begin \ 01272: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01273: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01274: this.__vmm_status = 0; \ 01275: return; \ 01276: end \ 01277: end \ 01278: end \ 01279: DO_PACK: begin \ 01280: end \ 01281: DO_UNPACK: begin \ 01282: foreach (this._name[i]) begin \ 01283: this._name[i] = null; \ 01284: end \ 01285: end \ 01286: endcase : 01287: 01288: 01289: `define vmm_data_member_handle_da(_name, _do) \ 01290: \ 01291: case (do_what & _do) \ 01292: DO_PRINT: begin \ 01293: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.size()); \ 01294: for (int i = 0; i < this._name.size(); i++) begin \ 01295: $sformat(this.__vmm_image, "%s %s", this.__vmm_image, \ 01296: (this._name[i] == null) ? "null" : "<ref>"); \ 01297: if (i == 2 && this._name.size() > 5) begin \ 01298: this.__vmm_image = {this.__vmm_image, " ..."}; \ 01299: i = this._name.size() - 3; \ 01300: end \ 01301: end \ 01302: end \ 01303: DO_COPY: begin \ 01304: __vmm_rhs._name = new[this._name.size()]; \ 01305: foreach(this._name[i]) begin \ 01306: __vmm_rhs._name[i] = this._name[i]; \ 01307: end \ 01308: end \ 01309: DO_COMPARE: begin \ 01310: if (__vmm_rhs._name.size() !== this._name.size()) begin \ 01311: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 01312: this._name.size(), __vmm_rhs._name.size()); \ 01313: this.__vmm_status = 0; \ 01314: return; \ 01315: end \ 01316: foreach (this._name[i]) begin \ 01317: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01318: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01319: this.__vmm_status = 0; \ 01320: return; \ 01321: end \ 01322: end \ 01323: end \ 01324: DO_PACK: begin \ 01325: end \ 01326: DO_UNPACK: begin \ 01327: foreach (this._name[i]) begin \ 01328: this._name[i] = null; \ 01329: end \ 01330: end \ 01331: endcase : 01332: 01333: 01334: `define vmm_data_member_handle_aa_scalar(_name, _do) \ 01335: \ 01336: case (do_what & _do) \ 01337: DO_PRINT: begin \ 01338: int _count = 0; \ 01339: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.num()); \ 01340: foreach(this._name[i]) begin \ 01341: if (_count <= 2 || _count >= this._name.num()-2) \ 01342: $sformat(this.__vmm_image, "%s %0d: %s", this.__vmm_image, i,(this._name[i] == null) ? "null" : "<ref>"); \ 01343: if (_count== 2 && this._name.num() > 5) begin \ 01344: this.__vmm_image = {this.__vmm_image, "\n..."}; \ 01345: end \ 01346: _count++; \ 01347: end \ 01348: end \ 01349: DO_COPY: begin \ 01350: __vmm_rhs._name.delete(); \ 01351: foreach(this._name[i]) begin \ 01352: __vmm_rhs._name[i] = new; \ 01353: __vmm_rhs._name[i] = this._name[i]; \ 01354: end \ 01355: end \ 01356: DO_COMPARE: begin \ 01357: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 01358: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 01359: this._name.num(), __vmm_rhs._name.num()); \ 01360: this.__vmm_status = 0; \ 01361: return; \ 01362: end \ 01363: foreach (this._name[i]) begin \ 01364: if (!__vmm_rhs._name.exists(i)) begin \ 01365: $sformat(this.__vmm_image, "this._name[%0d] exists but to._name[%0d] does not", i, i); \ 01366: this.__vmm_status = 0; \ 01367: return; \ 01368: end \ 01369: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01370: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01371: this.__vmm_status = 0; \ 01372: return; \ 01373: end \ 01374: end \ 01375: end \ 01376: DO_PACK: begin \ 01377: end \ 01378: DO_UNPACK: begin \ 01379: foreach (this._name[i]) begin \ 01380: this._name[i] = null; \ 01381: end \ 01382: end \ 01383: endcase : 01384: 01385: 01386: `define vmm_data_member_handle_aa_string(_name, _do) \ 01387: \ 01388: case (do_what & _do) \ 01389: DO_PRINT: begin \ 01390: int _count = 0; \ 01391: $sformat(this.__vmm_image, "%s\n%s _name[%0d]=", this.__vmm_image, this.__vmm_prefix, this._name.num()); \ 01392: foreach(this._name[i]) begin \ 01393: if (_count <= 2 || _count >= this._name.num()-2) \ 01394: $sformat(this.__vmm_image, "%s \"%s\": %s", this.__vmm_image, i,(this._name[i] == null) ? "null" : "<ref>"); \ 01395: if (_count== 2 && this._name.num() > 5) begin \ 01396: this.__vmm_image = {this.__vmm_image, "\n..."}; \ 01397: end \ 01398: _count++; \ 01399: end \ 01400: end \ 01401: DO_COPY: begin \ 01402: __vmm_rhs._name.delete(); \ 01403: foreach(this._name[i]) begin \ 01404: __vmm_rhs._name[i] = new; \ 01405: __vmm_rhs._name[i] = this._name[i]; \ 01406: end \ 01407: end \ 01408: DO_COMPARE: begin \ 01409: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 01410: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 01411: this._name.num(), __vmm_rhs._name.num()); \ 01412: this.__vmm_status = 0; \ 01413: return; \ 01414: end \ 01415: foreach (this._name[i]) begin \ 01416: if (!__vmm_rhs._name.exists(i)) begin \ 01417: $sformat(this.__vmm_image, "this._name[\"%s\"] exists but to._name[\"%s\"] does not", i, i); \ 01418: this.__vmm_status = 0; \ 01419: return; \ 01420: end \ 01421: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01422: $sformat(this.__vmm_image, "this._name[\"%s\"] !== to._name[\"%s\"]", i, i); \ 01423: this.__vmm_status = 0; \ 01424: return; \ 01425: end \ 01426: end \ 01427: end \ 01428: DO_PACK: begin \ 01429: end \ 01430: DO_UNPACK: begin \ 01431: foreach (this._name[i]) begin \ 01432: this._name[i] = null; \ 01433: end \ 01434: end \ 01435: endcase : 01436: 01437: 01438: `define vmm_data_member_vmm_data(_name, _do, _how) \ 01439: \ 01440: case (do_what & _do) \ 01441: DO_PRINT: begin \ 01442: if ( _name == null ) begin \ 01443: `vmm_warning(this.log, " do-print 1jvmm_data _name object does not exist, no action"); \ 01444: end \ 01445: else begin \ 01446: string _prefix = this.__vmm_prefix; \ 01447: $sformat(this.__vmm_image, "%s\n%s", this.__vmm_image, this._name.psdisplay({this.__vmm_prefix, " _name: "})); \ 01448: this.__vmm_prefix = _prefix; \ 01449: end \ 01450: end \ 01451: DO_COPY: begin \ 01452: if (_name == null) begin \ 01453: `vmm_warning(this.log, " do-copy 1vmm_data _name object does not exist, no action"); \ 01454: end \ 01455: else begin \ 01456: case (_how & HOW_TO_COPY) \ 01457: DO_REFCOPY: begin \ 01458: __vmm_rhs._name = this._name; \ 01459: end \ 01460: DO_DEEPCOPY: begin \ 01461: $cast(__vmm_rhs._name, this._name.copy()); \ 01462: end \ 01463: endcase \ 01464: end \ 01465: end \ 01466: DO_COMPARE: begin \ 01467: if (_name == null) begin \ 01468: `vmm_warning(this.log, " do-ccompare 1 vmm_data _name object does not exist, no action"); \ 01469: end \ 01470: else begin \ 01471: case (_how & HOW_TO_COMPARE) \ 01472: DO_REFCOMPARE: begin \ 01473: if (this._name != __vmm_rhs._name) begin \ 01474: $sformat(this.__vmm_image, "this._name !== to._name"); \ 01475: this.__vmm_status = 0; \ 01476: return; \ 01477: end \ 01478: end \ 01479: DO_DEEPCOMPARE: begin \ 01480: string diff; \ 01481: if (!this._name.compare(__vmm_rhs._name, diff)) begin \ 01482: $sformat(this.__vmm_image, "this._name !== to._name: %s ", diff); \ 01483: this.__vmm_status = 0; \ 01484: return; \ 01485: end \ 01486: end \ 01487: endcase \ 01488: end \ 01489: end \ 01490: DO_PACK: begin \ 01491: int count=0; \ 01492: if (_name == null) begin \ 01493: `vmm_warning(this.log, " vmm_data _name object does not exist, no action"); \ 01494: end \ 01495: else begin \ 01496: count = this._name.byte_pack(pack, this.__vmm_offset, this.__vmm_kind); \ 01497: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01498: end \ 01499: end \ 01500: DO_UNPACK: begin \ 01501: int count=0; \ 01502: this._name = new(); \ 01503: count = this._name.byte_unpack(unpack, this.__vmm_offset, this.__vmm_len, this.__vmm_kind); \ 01504: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01505: end \ 01506: endcase : 01507: 01508: 01509: `define vmm_data_member_vmm_data_array(_name, _do, _how) \ 01510: \ 01511: case (do_what & _do) \ 01512: DO_PRINT: begin \ 01513: int size =0; \ 01514: string _prefix = this.__vmm_prefix; \ 01515: size = $size(this._name); \ 01516: for (int i = 0; i < size; i++) begin \ 01517: string pf; \ 01518: $sformat(pf, "%s _name[%0d]: ", this.__vmm_prefix, i); \ 01519: $sformat(this.__vmm_image, "%s\n%s", this.__vmm_image, this._name[i].psdisplay(pf)); \ 01520: if (i == 2 && size > 5 ) begin \ 01521: this.__vmm_image = {this.__vmm_image, "\n", _prefix, "..."}; \ 01522: i = size -3; \ 01523: end \ 01524: end \ 01525: this.__vmm_prefix = _prefix; \ 01526: end \ 01527: DO_COPY: begin \ 01528: case (_how & HOW_TO_COPY) \ 01529: DO_REFCOPY: begin \ 01530: __vmm_rhs._name = this._name; \ 01531: foreach (this._name[i]) begin \ 01532: __vmm_rhs._name[i] = this._name[i]; \ 01533: end \ 01534: end \ 01535: DO_DEEPCOPY: begin \ 01536: __vmm_rhs._name = this._name; \ 01537: foreach(this._name[i]) begin \ 01538: $cast(__vmm_rhs._name[i], this._name[i].copy()); \ 01539: end \ 01540: end \ 01541: endcase \ 01542: end \ 01543: DO_COMPARE: begin \ 01544: string diff; \ 01545: case (_how & HOW_TO_COMPARE) \ 01546: DO_REFCOMPARE: begin \ 01547: foreach (this._name[i]) begin \ 01548: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01549: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01550: this.__vmm_status = 0; \ 01551: return; \ 01552: end \ 01553: end \ 01554: end \ 01555: DO_DEEPCOMPARE: begin \ 01556: foreach(this._name[i]) begin \ 01557: if (!this._name[i].compare(__vmm_rhs._name[i],diff)) begin \ 01558: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]: %s", i, i, diff); \ 01559: this.__vmm_status = 0; \ 01560: return; \ 01561: end \ 01562: end \ 01563: end \ 01564: endcase \ 01565: end \ 01566: DO_PACK: begin \ 01567: int start; \ 01568: int count; \ 01569: bit [31:0] size=0; \ 01570: start = this.__vmm_offset; \ 01571: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01572: this.__vmm_maxbits = 0; \ 01573: foreach (this._name[j]) begin \ 01574: count = this._name[j].byte_pack(pack, this.__vmm_offset, this.__vmm_kind); \ 01575: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01576: size++; \ 01577: end \ 01578: `vmm_data_member_scalar_packint(pack,size,start,0) \ 01579: this.__vmm_len = this.__vmm_offset; \ 01580: end \ 01581: DO_UNPACK: begin \ 01582: int count; \ 01583: int start; \ 01584: int index; \ 01585: string stemp; \ 01586: bit [31:0] size = 0; \ 01587: start = this.__vmm_offset; \ 01588: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 01589: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01590: this.__vmm_maxbits =0; \ 01591: for (int j=0; j < size; j++) begin \ 01592: this._name[j] = new(); \ 01593: count = this._name[j].byte_unpack(unpack, this.__vmm_offset, this.__vmm_len, this.__vmm_kind); \ 01594: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01595: end \ 01596: end \ 01597: endcase : 01598: 01599: 01600: `define vmm_data_member_vmm_data_da(_name, _do, _how) \ 01601: \ 01602: case (do_what & _do) \ 01603: DO_PRINT: begin \ 01604: string _prefix = this.__vmm_prefix; \ 01605: for (int i = 0; i < this._name.size(); i++) begin \ 01606: string pf; \ 01607: $sformat(pf, "%s _name[%0d]: ", this.__vmm_prefix, i); \ 01608: $sformat(this.__vmm_image, "%s\n%s", this.__vmm_image, this._name[i].psdisplay(pf)); \ 01609: if (i == 2 && this._name.size() > 5) begin \ 01610: this.__vmm_image = {this.__vmm_image, "\n", _prefix, "..."}; \ 01611: i = this._name.size() - 3; \ 01612: end \ 01613: end \ 01614: this.__vmm_prefix = _prefix; \ 01615: end \ 01616: DO_COPY: begin \ 01617: case (_how & HOW_TO_COPY) \ 01618: DO_REFCOPY: begin \ 01619: __vmm_rhs._name = new [this._name.size()]; \ 01620: foreach (this._name[i]) begin \ 01621: __vmm_rhs._name[i] = this._name[i]; \ 01622: end \ 01623: end \ 01624: DO_DEEPCOPY: begin \ 01625: __vmm_rhs._name = new [this._name.size()]; \ 01626: foreach(this._name[i]) begin \ 01627: $cast(__vmm_rhs._name[i], this._name[i].copy()); \ 01628: end \ 01629: end \ 01630: endcase \ 01631: end \ 01632: DO_COMPARE: begin \ 01633: string diff; \ 01634: if (__vmm_rhs._name.size() !== this._name.size()) begin \ 01635: $sformat(this.__vmm_image, "this._name.size() (%0d) !== to._name.size() (%0d)", \ 01636: this._name.size(), __vmm_rhs._name.size()); \ 01637: this.__vmm_status = 0; \ 01638: return; \ 01639: end \ 01640: case (_how & HOW_TO_COMPARE) \ 01641: DO_REFCOMPARE: begin \ 01642: foreach (this._name[i]) begin \ 01643: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01644: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01645: this.__vmm_status = 0; \ 01646: return; \ 01647: end \ 01648: end \ 01649: end \ 01650: DO_DEEPCOMPARE: begin \ 01651: foreach(this._name[i]) begin \ 01652: if (!this._name[i].compare(__vmm_rhs._name[i],diff)) begin \ 01653: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]: %s", i, i, diff); \ 01654: this.__vmm_status = 0; \ 01655: return; \ 01656: end \ 01657: end \ 01658: end \ 01659: endcase \ 01660: end \ 01661: DO_PACK: begin \ 01662: int start; \ 01663: int count; \ 01664: int index; \ 01665: int element; \ 01666: string stemp; \ 01667: bit [31:0] size=0; \ 01668: start = this.__vmm_offset; \ 01669: size = this._name.size(); \ 01670: `vmm_data_member_scalar_packint(pack,size,start,0) \ 01671: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01672: this.__vmm_maxbits = 0; \ 01673: foreach (this._name[j]) begin \ 01674: count = this._name[j].byte_pack(pack, this.__vmm_offset, this.__vmm_kind); \ 01675: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01676: end \ 01677: this.__vmm_len = this.__vmm_offset; \ 01678: end \ 01679: DO_UNPACK: begin \ 01680: int count; \ 01681: int start; \ 01682: int index; \ 01683: string stemp; \ 01684: bit [31:0] size = 0; \ 01685: start = this.__vmm_offset; \ 01686: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 01687: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01688: this.__vmm_maxbits =0; \ 01689: foreach (this._name[j]) begin \ 01690: this._name[j] = new(); \ 01691: count = this._name[j].byte_unpack(unpack, this.__vmm_offset, this.__vmm_len, this.__vmm_kind); \ 01692: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01693: end \ 01694: end \ 01695: endcase : 01696: 01697: `define vmm_data_member_vmm_data_aa_scalar(_name, _do, _how) \ 01698: \ 01699: case (do_what & _do) \ 01700: DO_PRINT: begin \ 01701: int _count = 0; \ 01702: string _prefix = this.__vmm_prefix; \ 01703: foreach (this._name[i]) begin \ 01704: if (_count <= 2 || _count >= this._name.num()-2) begin \ 01705: string pf; \ 01706: $sformat(pf, "%s _name[%0d]", this.__vmm_prefix, i); \ 01707: $sformat(this.__vmm_image, "%s\n%s", this.__vmm_image, this._name[i].psdisplay(pf)); \ 01708: if (_count== 2 && this._name.num() > 5) begin \ 01709: this.__vmm_image = {this.__vmm_image, "\n", _prefix, "..."}; \ 01710: end \ 01711: _count++; \ 01712: end \ 01713: end \ 01714: this.__vmm_prefix = _prefix; \ 01715: end \ 01716: DO_COPY: begin \ 01717: case (_how & HOW_TO_COPY) \ 01718: DO_REFCOPY: begin \ 01719: __vmm_rhs._name.delete(); \ 01720: foreach (this._name[i]) begin \ 01721: __vmm_rhs._name[i] = this._name[i]; \ 01722: end \ 01723: end \ 01724: DO_DEEPCOPY: begin \ 01725: __vmm_rhs._name.delete(); \ 01726: foreach(this._name[i]) begin \ 01727: $cast(__vmm_rhs._name[i], this._name[i].copy()); \ 01728: end \ 01729: end \ 01730: endcase \ 01731: end \ 01732: DO_COMPARE: begin \ 01733: string diff; \ 01734: if (__vmm_rhs._name.num() !== this._name.num()) begin \ 01735: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 01736: this._name.num(), __vmm_rhs._name.num()); \ 01737: this.__vmm_status = 0; \ 01738: return; \ 01739: end \ 01740: case (_how & HOW_TO_COMPARE) \ 01741: DO_REFCOMPARE: begin \ 01742: __vmm_rhs._name.delete(); \ 01743: foreach (this._name[i]) begin \ 01744: if (!__vmm_rhs._name.exists(i)) begin \ 01745: $sformat(this.__vmm_image, "this._name[%0d] exists but to._name[%0d] does not", i, i); \ 01746: this.__vmm_status = 0; \ 01747: return; \ 01748: end \ 01749: if (this._name[i] != __vmm_rhs._name[i]) begin \ 01750: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01751: this.__vmm_status = 0; \ 01752: return; \ 01753: end \ 01754: end \ 01755: end \ 01756: DO_DEEPCOMPARE: begin \ 01757: __vmm_rhs._name.delete(); \ 01758: foreach(this._name[i]) begin \ 01759: if (!__vmm_rhs._name.exists(i)) begin \ 01760: $sformat(this.__vmm_image, "this._name[%0d] exists but to._name[%0d] does not", i, i); \ 01761: this.__vmm_status = 0; \ 01762: return; \ 01763: end \ 01764: if (!this._name[i].compare(__vmm_rhs._name[i], diff)) begin \ 01765: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]: %s", i, i, diff); \ 01766: this.__vmm_status = 0; \ 01767: return; \ 01768: end \ 01769: end \ 01770: end \ 01771: endcase \ 01772: end \ 01773: DO_PACK: begin \ 01774: int start; \ 01775: int count; \ 01776: int index; \ 01777: string stemp; \ 01778: bit [31:0] size=0; \ 01779: start = this.__vmm_offset; \ 01780: this.__vmm_maxbits = 0; \ 01781: size = this._name.num(); \ 01782: `vmm_data_member_scalar_packint(pack,size,start,0) \ 01783: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01784: foreach (this._name[j]) begin \ 01785: this.__vmm_maxbits = 0; \ 01786: index = j; \ 01787: `vmm_data_member_scalar_packint(pack,index,this.__vmm_offset,0) \ 01788: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01789: count = this._name[j].byte_pack(pack, this.__vmm_offset, this.__vmm_kind); \ 01790: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01791: end \ 01792: this.__vmm_len = this.__vmm_offset; \ 01793: end \ 01794: DO_UNPACK: begin \ 01795: int count; \ 01796: int start; \ 01797: int index=0; \ 01798: string stemp; \ 01799: bit [31:0] size = 0; \ 01800: start = this.__vmm_offset; \ 01801: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 01802: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01803: this.__vmm_maxbits =0; \ 01804: for (int j=0; j < size; j++) begin \ 01805: this.__vmm_maxbits =0; \ 01806: `vmm_data_member_scalar_unpackint(unpack,index,this.__vmm_offset,0) \ 01807: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01808: this._name[index] = new(); \ 01809: count = this._name[index].byte_unpack(unpack, this.__vmm_offset, this.__vmm_len, this.__vmm_kind); \ 01810: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01811: end \ 01812: end \ 01813: endcase : 01814: 01815: 01816: `define vmm_data_member_vmm_data_aa_string(_name, _do, _how) \ 01817: \ 01818: case (do_what & _do) \ 01819: DO_PRINT: begin \ 01820: int _count = 0; \ 01821: string _prefix = this.__vmm_prefix; \ 01822: foreach (this._name[i]) begin \ 01823: if (_count <= 2 || _count >= this._name.num()-2) begin \ 01824: string pf; \ 01825: $sformat(pf, "%s _name[\"%s\"]", this.__vmm_prefix, i); \ 01826: $sformat(this.__vmm_image, "%s\n%s", this.__vmm_image, this._name[i].psdisplay(pf)); \ 01827: if (_count== 2 && this._name.num() > 5) begin \ 01828: this.__vmm_image = {this.__vmm_image, "\n", _prefix, "..."}; \ 01829: end \ 01830: _count++; \ 01831: end \ 01832: end \ 01833: this.__vmm_prefix = _prefix; \ 01834: end \ 01835: DO_COPY: begin \ 01836: case (_how & HOW_TO_COPY) \ 01837: DO_REFCOPY: begin \ 01838: this.__vmm_rhs._name.delete(); \ 01839: foreach (this._name[i]) begin \ 01840: this.__vmm_rhs._name[i] = this._name[i]; \ 01841: end \ 01842: end \ 01843: DO_DEEPCOPY: begin \ 01844: this.__vmm_rhs._name.delete(); \ 01845: foreach(this._name[i]) begin \ 01846: $cast(this.__vmm_rhs._name[i], this._name[i].copy()); \ 01847: end \ 01848: end \ 01849: endcase \ 01850: end \ 01851: DO_COMPARE: begin \ 01852: string diff; \ 01853: if (this.__vmm_rhs._name.num() !== this._name.num()) begin \ 01854: $sformat(this.__vmm_image, "this._name.num() (%0d) !== to._name.num() (%0d)", \ 01855: this._name.num(), this.__vmm_rhs._name.num()); \ 01856: this.__vmm_status = 0; \ 01857: return; \ 01858: end \ 01859: case (_how & HOW_TO_COMPARE) \ 01860: DO_REFCOMPARE: begin \ 01861: this.__vmm_rhs._name.delete(); \ 01862: foreach (this._name[i]) begin \ 01863: if (!this.__vmm_rhs._name.exists(i)) begin \ 01864: $sformat(this.__vmm_image, "this._name[\"%s\"] exists but to._name[\"%s\"] does not", i, i); \ 01865: this.__vmm_status = 0; \ 01866: return; \ 01867: end \ 01868: if (this._name[i] != this.__vmm_rhs._name[i]) begin \ 01869: $sformat(this.__vmm_image, "this._name[%0d] !== to._name[%0d]", i, i); \ 01870: this.__vmm_status = 0; \ 01871: return; \ 01872: end \ 01873: end \ 01874: end \ 01875: DO_DEEPCOMPARE: begin \ 01876: this.__vmm_rhs._name.delete(); \ 01877: foreach(this._name[i]) begin \ 01878: if (!this.__vmm_rhs._name.exists(i)) begin \ 01879: $sformat(this.__vmm_image, "this._name[\"%s\"] exists but to._name[\"%s\"] does not", i, i); \ 01880: this.__vmm_status = 0; \ 01881: return; \ 01882: end \ 01883: if (!this._name[i].compare(this.__vmm_rhs._name[i], diff)) begin \ 01884: $sformat(this.__vmm_image, "this._name[\"%s\"] !== to._name[\"%s\"]: %s", i, i, diff); \ 01885: this.__vmm_status = 0; \ 01886: return; \ 01887: end \ 01888: end \ 01889: end \ 01890: endcase \ 01891: end \ 01892: DO_PACK: begin \ 01893: int start; \ 01894: int count; \ 01895: int index; \ 01896: string sindextemp; \ 01897: int sindexcount; \ 01898: string stemp; \ 01899: bit [31:0] size=0; \ 01900: start = this.__vmm_offset; \ 01901: stemp = this._name.first(sindextemp); \ 01902: index = 0; \ 01903: size = this._name.num(); \ 01904: `vmm_data_member_scalar_packint(pack,size,start,0) \ 01905: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01906: this.__vmm_maxbits = 0; \ 01907: foreach (this._name[j]) begin \ 01908: this.__vmm_maxbits =0; \ 01909: sindextemp = j; \ 01910: sindexcount = sindextemp.len(); \ 01911: this.__vmm_maxbits = sindextemp; \ 01912: `vmm_data_member_scalar_packint(pack,sindexcount,this.__vmm_offset,0) \ 01913: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01914: `vmm_data_member_scalar_pack(pack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 01915: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 01916: this.__vmm_maxbits =0; \ 01917: count = this._name[j].byte_pack(pack, this.__vmm_offset, this.__vmm_kind); \ 01918: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01919: end \ 01920: this.__vmm_len = this.__vmm_offset; \ 01921: end \ 01922: DO_UNPACK: begin \ 01923: int start; \ 01924: int count; \ 01925: int index; \ 01926: string sindextemp; \ 01927: int sindexcount; \ 01928: string stemp; \ 01929: bit [31:0] size=0; \ 01930: index = 0; \ 01931: start = this.__vmm_offset; \ 01932: `vmm_data_member_scalar_unpackint(unpack,size,start,0) \ 01933: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01934: this.__vmm_maxbits = 0; \ 01935: for (int j=0; j < size; j++) begin \ 01936: this.__vmm_maxbits = 0; \ 01937: `vmm_data_member_scalar_unpackint(unpack,sindexcount,this.__vmm_offset,0) \ 01938: `vmm_data_member_update_offset(this.__vmm_offset,4) \ 01939: `vmm_data_member_scalar_unpack(unpack,this.__vmm_maxbits,sindexcount,this.__vmm_offset) \ 01940: `vmm_data_member_update_offset(this.__vmm_offset,sindexcount) \ 01941: sindextemp = this.__vmm_maxbits; \ 01942: this.__vmm_maxbits = 0; \ 01943: this._name[sindextemp] = new(); \ 01944: count = this._name[sindextemp].byte_unpack(unpack, this.__vmm_offset, this.__vmm_len, this.__vmm_kind); \ 01945: `vmm_data_member_update_offset(this.__vmm_offset,count) \ 01946: end \ 01947: end \ 01948: endcase : 01949: 01950: 01951: `define vmm_data_member_user_defined(_name) \ 01952: \ 01953: this.__vmm_status = this.do_''_name(do_what, this.__vmm_prefix, this.__vmm_image, \ 01954: this.__vmm_rhs, \ 01955: this.__vmm_kind, this.__vmm_offset, pack, unpack); \ 01956: if (__vmm_status == 0) return; : 01957: 01958: 01959: `define vmm_data_member_end(_class) \ 01960: endfunction \ 01961: \ 01962: static vmm_log log = new("_class", "class"); \ 01963: \ 01964: function new(vmm_log log = null); \ 01965: super.new((log == null) ? this.log : log); \ 01966: endfunction \ 01967: \ 01968: virtual function vmm_data allocate(); \ 01969: _class i = new; \ 01970: return i; \ 01971: endfunction \ 01972: \ 01973: virtual function bit is_valid(bit silent = 1, \ 01974: int kind = -1); \ 01975: return 1; \ 01976: endfunction \ 01977: \ 01978: virtual function string psdisplay(string prefix = ""); \ 01979: $sformat(this.__vmm_image, "%s(``_class (%0d.%0d.%0d)):", prefix, \ 01980: this.stream_id, this.scenario_id, this.data_id); \ 01981: this.__vmm_done_user = 1; \ 01982: psdisplay = this.do_psdisplay(prefix); \ 01983: if (this.__vmm_done_user) return psdisplay; \ 01984: \ 01985: this.__vmm_prefix = prefix; \ 01986: this.do_all(DO_PRINT, __vmm_bytes, __vmm_bytes); \ 01987: return this.__vmm_image; \ 01988: endfunction \ 01989: \ 01990: virtual function vmm_data copy(vmm_data to = null); \ 01991: _class cpy; \ 01992: \ 01993: this.__vmm_done_user = 1; \ 01994: copy = this.do_copy(to); \ 01995: if (this.__vmm_done_user) return copy; \ 01996: \ 01997: if (to == null) cpy = new; \ 01998: else if (!$cast(cpy, to)) begin \ 01999: `vmm_fatal(this.log, "Cannot copy to non-_class instance"); \ 02000: return null; \ 02001: end \ 02002: \ 02003: super.copy_data(cpy); \ 02004: this.__vmm_rhs = cpy; \ 02005: this.do_all(DO_COPY, __vmm_bytes, __vmm_bytes); \ 02006: \ 02007: return cpy; \ 02008: endfunction \ 02009: \ 02010: virtual function bit compare( vmm_data to, \ 02011: output string diff, \ 02012: input int kind = -1); \ 02013: _class cp; \ 02014: \ 02015: this.__vmm_done_user = 1; \ 02016: compare = this.do_compare(to, diff, kind); \ 02017: if (this.__vmm_done_user) return compare; \ 02018: \ 02019: if (!$cast(cp, to)) begin \ 02020: `vmm_fatal(this.log, "Cannot compare to non-_class instance"); \ 02021: return 0; \ 02022: end \ 02023: \ 02024: this.__vmm_rhs = cp; \ 02025: this.__vmm_kind = kind; \ 02026: this.do_all(DO_COMPARE, __vmm_bytes, __vmm_bytes); \ 02027: diff = this.__vmm_image; \ 02028: \ 02029: return this.__vmm_status; \ 02030: endfunction \ 02031: \ 02032: virtual function int unsigned byte_pack(ref logic [7:0] bytes[], \ 02033: input int unsigned offset = 0, \ 02034: input int kind = -1); \ 02035: this.__vmm_done_user = 1; \ 02036: byte_pack = this.do_byte_pack(bytes, offset, kind); \ 02037: if (this.__vmm_done_user) return byte_pack; \ 02038: \ 02039: this.__vmm_offset = offset; \ 02040: this.__vmm_kind = kind; \ 02041: this.do_all(DO_PACK, bytes, __vmm_bytes); \ 02042: \ 02043: return this.__vmm_offset - offset; \ 02044: endfunction \ 02045: \ 02046: virtual function int unsigned byte_unpack(const ref logic [7:0] bytes[], \ 02047: input int unsigned offset = 0, \ 02048: input int len = -1, \ 02049: input int kind = -1); \ 02050: this.__vmm_done_user = 1; \ 02051: byte_unpack = this.do_byte_unpack(bytes, offset, len, kind); \ 02052: if (this.__vmm_done_user) return byte_unpack; \ 02053: \ 02054: this.__vmm_offset = offset; \ 02055: this.__vmm_kind = kind; \ 02056: this.do_all(DO_UNPACK, __vmm_bytes, bytes); \ 02057: \ 02058: return this.__vmm_offset - offset; \ 02059: endfunction : 02060: 02061: 02062: `define vmm_data_byte_size(_max, _n) \ 02063: virtual function int unsigned byte_size(int kind = -1); \ 02064: this.__vmm_done_user = 1; \ 02065: byte_size = this.do_byte_size(kind); \ 02066: if (this.__vmm_done_user) return byte_size; \ 02067: \ 02068: return _n; \ 02069: endfunction: byte_size \ 02070: \ 02071: virtual function int unsigned max_byte_size(int kind = -1); \ 02072: this.__vmm_done_user = 1; \ 02073: max_byte_size = this.do_max_byte_size(kind); \ 02074: if (this.__vmm_done_user) return max_byte_size; \ 02075: \ 02076: return _max; \ 02077: endfunction : 02078: