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.
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:
00023: `define vmm_subenv_member_begin(_class) \
00024: \
00025: function void do_all(vmm_subenv::do_what_e do_what, \
00026: vmm_env::restart_e restart = vmm_env::FIRM); \
00027: super.do_all(do_what, restart);
:
00028:
00029:
00030: `define vmm_subenv_member_scalar(_name, _do) \
00031: `define vmm_xactor_member_scalar(_name, _do)
:
00032:
00033: `define vmm_subenv_member_scalar_array(_name, _do) \
00034: `vmm_xactor_member_scalar_array(_name, _do)
:
00035:
00036: `define vmm_subenv_member_scalar_aa_scalar(_name, _do) \
00037: `vmm_xactor_member_scalar_aa_scalar(_name, _do)
:
00038:
00039: `define vmm_subenv_member_scalar_aa_string(_name, _do) \
00040: `vmm_xactor_member_scalar_aa_string(_name, _do)
:
00041:
00042: `define vmm_subenv_member_enum(_name, _do) \
00043: `vmm_xactor_member_enum(_name, _do)
:
00044:
00045: `define vmm_subenv_member_enum_array(_name, _do) \
00046: `vmm_xactor_member_enum_array(_name, _do)
:
00047:
00048: `define vmm_subenv_member_enum_aa_scalar(_name, _do) \
00049: `vmm_xactor_member_enum_aa_scalar(_name, _do)
:
00050:
00051: `define vmm_subenv_member_enum_aa_string(_name, _do) \
00052: `vmm_xactor_member_enum_aa_string(_name, _do)
:
00053:
00054: `define vmm_subenv_member_string(_name, _do) \
00055: `vmm_xactor_member_string(_name, _do)
:
00056:
00057: `define vmm_subenv_member_string_array(_name, _do) \
00058: `vmm_xactor_member_string_array(_name, _do)
:
00059:
00060: `define vmm_subenv_member_string_aa_scalar(_name, _do) \
00061: `vmm_xactor_member_string_aa_scalar(_name, _do)
:
00062:
00063: `define vmm_subenv_member_string_aa_string(_name, _do) \
00064: `vmm_xactor_member_string_aa_string(_name, _do)
:
00065:
00066: `define vmm_subenv_member_vmm_data(_name, _do) \
00067: `vmm_xactor_member_vmm_data(_name, _do)
:
00068:
00069: `define vmm_subenv_member_vmm_data_array(_name, _do) \
00070: `vmm_xactor_member_vmm_data_array(_name, _do)
:
00071:
00072: `define vmm_subenv_member_vmm_data_aa_scalar(_name, _do) \
00073: `vmm_xactor_member_vmm_data_aa_scalar(_name, _do)
:
00074:
00075: `define vmm_subenv_member_vmm_data_aa_string(_name, _do) \
00076: `vmm_xactor_member_vmm_data_aa_string(_name, _do)
:
00077:
00078:
00079: `define vmm_subenv_member_channel(_name, _do) \
00080: \
00081: case (do_what & _do) \
00082: DO_PRINT: begin \
00083: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00084: this._name.psdisplay({this.__vmm_prefix, `"_name: `"})); \
00085: end \
00086: DO_RESET: begin \
00087: case (restart) \
00088: vmm_env::FIRM: this._name.flush(); \
00089: vmm_env::HARD: this._name.kill(); \
00090: endcase \
00091: end \
00092: DO_VOTE: begin \
00093: this.end_test.register_channel(this._name); \
00094: end \
00095: endcase
:
00096:
00097:
00098: `define vmm_subenv_member_channel_array(_name, _do) \
00099: \
00100: case (do_what & _do) \
00101: DO_PRINT: begin \
00102: foreach (this._name[i]) begin \
00103: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00104: this._name[i].psdisplay(`vmm_sformatf("%s%s[%0d]: ", \
00105: this.__vmm_prefix, \
00106: `"_name`", i))); \
00107: end \
00108: end \
00109: DO_RESET: begin \
00110: case (restart) \
00111: vmm_env::FIRM: foreach (this._name[i]) begin \
00112: this._name[i].flush(); \
00113: end \
00114: vmm_env::HARD: foreach (this._name[i]) begin \
00115: this._name[i].kill(); \
00116: end \
00117: endcase \
00118: end \
00119: DO_VOTE: begin \
00120: foreach (this._name[i]) begin \
00121: this.end_test.register_channel(this._name[i]); \
00122: end \
00123: end \
00124: endcase
:
00125:
00126:
00127: `define vmm_subenv_member_channel_aa_scalar(_name, _do) \
00128: \
00129: `vmm_subenv_member_channel_array(_name, _do)
:
00130:
00131:
00132: `define vmm_subenv_member_channel_aa_string(_name, _do) \
00133: \
00134: case (do_what & _do) \
00135: DO_PRINT: begin \
00136: foreach (this._name[i]) begin \
00137: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00138: this._name[i].psdisplay(`vmm_sformatf("%s%s[%s]: ", \
00139: this.__vmm_prefix, \
00140: `"_name`", i))); \
00141: end \
00142: end \
00143: DO_RESET: begin \
00144: case (restart) \
00145: vmm_env::FIRM: foreach (this._name[i]) begin \
00146: this._name[i].flush(); \
00147: end \
00148: vmm_env::HARD: foreach (this._name[i]) begin \
00149: this._name[i].kill(); \
00150: end \
00151: endcase \
00152: end \
00153: DO_VOTE: begin \
00154: foreach (this._name[i]) begin \
00155: this.end_test.register_channel(this._name[i]); \
00156: end \
00157: end \
00158: endcase
:
00159:
00160:
00161: `define vmm_subenv_member_xactor(_name, _do) \
00162: \
00163: case (do_what & _do) \
00164: DO_PRINT: begin \
00165: string _prefix = this.__vmm_prefix; \
00166: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00167: this._name.psdisplay({this.__vmm_prefix, `"_name: `"})); \
00168: this.__vmm_prefix = _prefix; \
00169: end \
00170: DO_START: begin \
00171: this._name.start_xactor(); \
00172: end \
00173: DO_STOP: begin \
00174: this._name.stop_xactor(); \
00175: end \
00176: DO_RESET: begin \
00177: case (restart) \
00178: vmm_env::FIRM: this._name.reset_xactor(vmm_xactor::SOFT_RST); \
00179: vmm_env::HARD: this._name.kill(); \
00180: endcase \
00181: end \
00182: DO_VOTE: begin \
00183: this.end_test.register_xactor(this._name); \
00184: end \
00185: endcase
:
00186:
00187:
00188: `define vmm_subenv_member_xactor_array(_name, _do) \
00189: \
00190: case (do_what & _do) \
00191: DO_PRINT: begin \
00192: string _prefix = this.__vmm_prefix; \
00193: foreach (this._name[i]) begin \
00194: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00195: this._name[i].psdisplay(`vmm_sformatf("%s%s[%0d]: ", \
00196: _prefix, \
00197: `"_name`", i))); \
00198: end \
00199: this.__vmm_prefix = _prefix; \
00200: end \
00201: DO_START: begin \
00202: foreach (this._name[i]) begin \
00203: this._name[i].start_xactor(); \
00204: end \
00205: end \
00206: DO_STOP: begin \
00207: foreach (this._name[i]) begin \
00208: this._name[i].stop_xactor(); \
00209: end \
00210: end \
00211: DO_RESET: begin \
00212: case (restart) \
00213: vmm_env::FIRM: foreach (this._name[i]) begin \
00214: this._name[i].reset_xactor(); \
00215: end \
00216: vmm_env::HARD: foreach (this._name[i]) begin \
00217: this._name[i].kill(); \
00218: end \
00219: endcase \
00220: end \
00221: DO_VOTE: begin \
00222: foreach (this._name[i]) begin \
00223: this.end_test.register_xactor(this._name[i]); \
00224: end \
00225: end \
00226: endcase
:
00227:
00228:
00229: `define vmm_subenv_member_xactor_aa_scalar(_name, _do) \
00230: `vmm_subenv_member_xactor_array(_name, _do)
:
00231:
00232:
00233: `define vmm_subenv_member_xactor_aa_string(_name, _do) \
00234: \
00235: case (do_what & _do) \
00236: DO_PRINT: begin \
00237: string _prefix = this.__vmm_prefix; \
00238: foreach (this._name[i]) begin \
00239: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00240: this._name[i].psdisplay(`vmm_sformatf("%s%s[%s]: ", \
00241: _prefix, \
00242: `"_name`", i))); \
00243: end \
00244: this.__vmm_prefix = _prefix; \
00245: end \
00246: DO_START: begin \
00247: foreach (this._name[i]) begin \
00248: this._name[i].start_xactor(); \
00249: end \
00250: end \
00251: DO_STOP: begin \
00252: foreach (this._name[i]) begin \
00253: this._name[i].stop_xactor(); \
00254: end \
00255: end \
00256: DO_RESET: begin \
00257: case (restart) \
00258: vmm_env::FIRM: foreach (this._name[i]) begin \
00259: this._name[i].reset_xactor(); \
00260: end \
00261: vmm_env::HARD: foreach (this._name[i]) begin \
00262: this._name[i].kill(); \
00263: end \
00264: endcase \
00265: end \
00266: DO_VOTE: begin \
00267: foreach (this._name[i]) begin \
00268: this.end_test.register_xactor(this._name[i]); \
00269: end \
00270: end \
00271: endcase
:
00272:
00273:
00274: `define vmm_subenv_member_subenv(_name, _do) \
00275: \
00276: case (do_what & _do) \
00277: DO_PRINT: begin \
00278: string _prefix = this.__vmm_prefix; \
00279: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00280: this._name.psdisplay({this.__vmm_prefix, `"_name: `"})); \
00281: this.__vmm_prefix = _prefix; \
00282: end \
00283: DO_START: begin \
00284: this.__vmm_forks++; \
00285: fork \
00286: begin \
00287: this._name.start(); \
00288: this.__vmm_forks--; \
00289: end \
00290: join_none \
00291: end \
00292: DO_STOP: begin \
00293: this.__vmm_forks++; \
00294: fork \
00295: begin \
00296: this._name.stop(); \
00297: this.__vmm_forks--; \
00298: end \
00299: join_none \
00300: end \
00301: DO_RESET: begin \
00302: this.__vmm_forks++; \
00303: fork \
00304: begin \
00305: this._name.reset(restart); \
00306: this.__vmm_forks--; \
00307: end \
00308: join_none \
00309: end \
00310: endcase
:
00311:
00312:
00313: `define vmm_subenv_member_subenv_array(_name, _do) \
00314: \
00315: case (do_what & _do) \
00316: DO_PRINT: begin \
00317: string _prefix = this.__vmm_prefix; \
00318: foreach (this._name[i]) begin \
00319: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00320: this._name[i].psdisplay(`vmm_sformatf("%s%s[%0d]: ", \
00321: _prefix, \
00322: `"_name`", i))); \
00323: end \
00324: this.__vmm_prefix = _prefix; \
00325: end \
00326: DO_START: begin \
00327: this.__vmm_forks++; \
00328: foreach (this._name[i]) begin \
00329: automatic int j = i; \
00330: fork \
00331: begin \
00332: this._name[j].start(); \
00333: this.__vmm_forks--; \
00334: end \
00335: join_none \
00336: end \
00337: end \
00338: DO_STOP: begin \
00339: this.__vmm_forks++; \
00340: foreach (this._name[i]) begin \
00341: automatic int j = i; \
00342: fork \
00343: begin \
00344: this._name[j].stop(); \
00345: this.__vmm_forks--; \
00346: end \
00347: join_none \
00348: end \
00349: end \
00350: DO_RESET: begin \
00351: this.__vmm_forks++; \
00352: foreach (this._name[i]) begin \
00353: automatic int j = i; \
00354: fork \
00355: begin \
00356: this._name[j].reset(restart); \
00357: this.__vmm_forks--; \
00358: end \
00359: join_none \
00360: end \
00361: end \
00362: endcase
:
00363:
00364:
00365: `define vmm_subenv_member_subenv_aa_scalar(_name, _do) \
00366: `vmm_subenv_member_subenv_array(_name, _do)
:
00367:
00368:
00369: `define vmm_subenv_member_subenv_aa_string(_name, _do) \
00370: \
00371: case (do_what & _do) \
00372: DO_PRINT: begin \
00373: string _prefix = this.__vmm_prefix; \
00374: foreach (this._name[i]) begin \
00375: $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00376: this._name[i].psdisplay(`vmm_sformatf("%s%s[%s]: ", \
00377: _prefix, \
00378: `"_name`", i))); \
00379: end \
00380: this.__vmm_prefix = _prefix; \
00381: end \
00382: DO_START: begin \
00383: this.__vmm_forks++; \
00384: foreach (this._name[i]) begin \
00385: automatic string j = i; \
00386: fork \
00387: begin \
00388: this._name[j].start(); \
00389: this.__vmm_forks--; \
00390: end \
00391: join_none \
00392: end \
00393: end \
00394: DO_STOP: begin \
00395: this.__vmm_forks++; \
00396: foreach (this._name[i]) begin \
00397: automatic string j = i; \
00398: fork \
00399: begin \
00400: this._name[j].stop(); \
00401: this.__vmm_forks--; \
00402: end \
00403: join_none \
00404: end \
00405: end \
00406: DO_RESET: begin \
00407: this.__vmm_forks++; \
00408: foreach (this._name[i]) begin \
00409: automatic int j = i; \
00410: fork \
00411: begin \
00412: this._name[j].reset(restart); \
00413: this.__vmm_forks--; \
00414: end \
00415: join_none \
00416: end \
00417: end \
00418: endcase
:
00419:
00420:
00421: `define vmm_subenv_member_user_defined(_name) \
00422: \
00423: this.__vmm_restart = restart; \
00424: void'(this.do_``_name(do_what));
:
00425:
00426:
00427: `define vmm_subenv_member_end(_class) \
00428: endfunction \
00429: \
00430: virtual function string psdisplay(string prefix = `"`"); \
00431: this.__vmm_done_user = 1; \
00432: psdisplay = this.do_psdisplay(prefix); \
00433: if (this.__vmm_done_user) return psdisplay; \
00434: \
00435: this.__vmm_image = super.psdisplay(prefix); \
00436: this.__vmm_prefix = prefix; \
00437: if (`vmm_str_match(prefix, ": $")) begin \
00438: this.__vmm_prefix = {`vmm_str_prematch(prefix), "."}; \
00439: end \
00440: this.do_all(DO_PRINT); \
00441: return this.__vmm_image; \
00442: endfunction \
00443: \
00444: virtual task start(); \
00445: super.start(); \
00446: this.__vmm_done_user = 1; \
00447: this.do_vote(); \
00448: if (!this.__vmm_done_user) begin \
00449: this.do_all(DO_VOTE); \
00450: end \
00451: \
00452: this.__vmm_done_user = 1; \
00453: this.do_start(); \
00454: if (this.__vmm_done_user) return; \
00455: \
00456: this.__vmm_forks = 0; \
00457: this.do_all(DO_START); \
00458: wait (this.__vmm_forks == 0); \
00459: endtask \
00460: \
00461: virtual task stop(); \
00462: super.stop(); \
00463: this.__vmm_done_user = 1; \
00464: this.do_stop(); \
00465: if (this.__vmm_done_user) return; \
00466: \
00467: this.__vmm_forks = 0; \
00468: this.do_all(DO_STOP); \
00469: wait (this.__vmm_forks == 0); \
00470: endtask \
00471: \
00472: virtual task reset(vmm_env::restart_e kind = vmm_env::FIRM); \
00473: super.stop(); \
00474: this.__vmm_done_user = 1; \
00475: this.do_reset(kind); \
00476: if (this.__vmm_done_user) return; \
00477: \
00478: this.__vmm_forks = 0; \
00479: this.do_all(DO_RESET, kind); \
00480: wait (this.__vmm_forks == 0); \
00481: endtask \