VMM OpenSource - (expanded) sv/std_lib/vmm_xactor_macros.sv

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.

sv/std_lib/vmm_xactor_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: 
00023: `define vmm_xactor_member_begin(_class) \
00024:  \
00025:    function void do_all(vmm_xactor::do_what_e do_what, \
00026:                         vmm_xactor::reset_e   rst_typ = SOFT_RST); \
00027:       super.do_all(do_what, rst_typ);
     : 
00028: 
00029: 
00030: `define vmm_xactor_member_scalar(_name, _do) \
00031:   \
00032:       case (do_what & _do) \
00033:         DO_PRINT: begin \
00034:            $sformat(this.__vmm_image, `"%s\n%s%s: %0d`", this.__vmm_image, \
00035:                     this.__vmm_prefix, `"_name`", this._name); \
00036:         end \
00037:       endcase
     : 
00038: 
00039: 
00040: `define vmm_xactor_member_scalar_array(_name, _do) \
00041:   \
00042:       case (do_what & _do) \
00043:         DO_PRINT: begin \
00044:            foreach (this._name[i]) begin \
00045:               $sformat(this.__vmm_image, `"%s\n%s%s[%0d]: %0d`", \
00046:                        this.__vmm_image, this.__vmm_prefix, \
00047:                        `"_name`", i, this._name[i]); \
00048:            end \
00049:         end \
00050:       endcase
     : 
00051: 
00052: 
00053: `define vmm_xactor_member_scalar_aa_scalar(_name, _do) \
00054:   \
00055:    `vmm_xactor_member_scalar_array(_name, _do)
     : 
00056:    
00057: 
00058: `define vmm_xactor_member_scalar_aa_string(_name, _do) \
00059:   \
00060:       case (do_what & _do) \
00061:         DO_PRINT: begin \
00062:            foreach (this._name[i]) begin \
00063:               $sformat(this.__vmm_image, `"%s\n%s%s[%s]: %0d`", \
00064:                        this.__vmm_image, this.__vmm_prefix, \
00065:                        `"_name`", i, this._name[i]); \
00066:            end \
00067:         end \
00068:       endcase
     : 
00069: 
00070: 
00071: `define vmm_xactor_member_enum(_name, _do) \
00072:   \
00073:       case (do_what & _do) \
00074:         DO_PRINT: begin \
00075:            $sformat(this.__vmm_image, `"%s\n%s%s: %0s`", this.__vmm_image, \
00076:                     this.__vmm_prefix, `"_name`", this._name.name()); \
00077:         end \
00078:       endcase
     : 
00079: 
00080: 
00081: `define vmm_xactor_member_enum_array(_name, _do) \
00082:   \
00083:       case (do_what & _do) \
00084:         DO_PRINT: begin \
00085:            foreach (this._name[i]) begin \
00086:               $sformat(this.__vmm_image, `"%s\n%s%s[%0d]: %0s`", \
00087:                        this.__vmm_image, this.__vmm_prefix, \
00088:                        `"_name`", i, this._name[i].name()); \
00089:            end \
00090:         end \
00091:       endcase
     : 
00092: 
00093: 
00094: `define vmm_xactor_member_enum_aa_scalar(_name, _do) \
00095:   \
00096:    `define vmm_xactor_member_enum_array(_name, _do)
     : 
00097: 
00098: 
00099: `define vmm_xactor_member_enum_aa_string(_name, _do) \
00100:   \
00101:       case (do_what & _do) \
00102:         DO_PRINT: begin \
00103:            foreach (this._name[i]) begin \
00104:               $sformat(this.__vmm_image, `"%s\n%s%s[%s]: %s`", \
00105:                        this.__vmm_image, this.__vmm_prefix, \
00106:                        `"_name`", i, this._name[i].name()); \
00107:            end \
00108:         end \
00109:       endcase
     : 
00110: 
00111: 
00112: `define vmm_xactor_member_string(_name, _do) \
00113:   \
00114:       case (do_what & _do) \
00115:         DO_PRINT: begin \
00116:            $sformat(this.__vmm_image, `"%s\n%s%s: %s`", this.__vmm_image, \
00117:                     this.__vmm_prefix, `"_name`", this._name); \
00118:         end \
00119:       endcase
     : 
00120: 
00121: 
00122: `define vmm_xactor_member_string_array(_name, _do) \
00123:   \
00124:       case (do_what & _do) \
00125:         DO_PRINT: begin \
00126:            foreach (this._name[i]) begin \
00127:               $sformat(this.__vmm_image, `"%s\n%s%s[%0d]: %s`", \
00128:                        this.__vmm_image, this.__vmm_prefix, \
00129:                        `"_name`", i, this._name[i]); \
00130:            end \
00131:         end \
00132:       endcase
     : 
00133: 
00134: 
00135: `define vmm_xactor_member_string_aa_scalar(_name, _do) \
00136:   \
00137:    `vmm_xactor_member_string_array(_name, _do)
     : 
00138: 
00139: 
00140: `define vmm_xactor_member_string_aa_string(_name, _do) \
00141:   \
00142:       case (do_what & _do) \
00143:         DO_PRINT: begin \
00144:            foreach (this._name[i]) begin \
00145:               $sformat(this.__vmm_image, `"%s\n%s%s[%s]: %s`", \
00146:                        this.__vmm_image, this.__vmm_prefix, \
00147:                        `"_name`", i, this._name[i]); \
00148:            end \
00149:         end \
00150:       endcase
     : 
00151: 
00152: 
00153: `define vmm_xactor_member_vmm_data(_name, _do) \
00154:   \
00155:       case (do_what & _do) \
00156:         DO_PRINT: begin \
00157:            $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00158:                     this._name.psdisplay({this.__vmm_prefix, `"_name: `"})); \
00159:         end \
00160:       endcase
     : 
00161: 
00162: 
00163: `define vmm_xactor_member_vmm_data_array(_name, _do) \
00164:   \
00165:       case (do_what & _do) \
00166:         DO_PRINT: begin \
00167:            foreach (this._name[i]) begin \
00168:               $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00169:                        this._name[i].psdisplay(`vmm_sformatf("%s%s[%0d]: ", \
00170:                                                              this.__vmm_prefix, \
00171:                                                              `"_name`", i))); \
00172:            end \
00173:         end \
00174:       endcase
     : 
00175: 
00176: 
00177: `define vmm_xactor_member_vmm_data_aa_scalar(_name, _do) \
00178:   \
00179:    `vmm_xactor_member_vmm_data_array(_name, _do)
     : 
00180: 
00181: 
00182: `define vmm_xactor_member_vmm_data_aa_string(_name, _do) \
00183:   \
00184:       case (do_what & _do) \
00185:         DO_PRINT: begin \
00186:            foreach (this._name[i]) begin \
00187:               $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00188:                        this._name[i].psdisplay(`vmm_sformatf("%s%s[%s]: ", \
00189:                                                              this.__vmm_prefix, \
00190:                                                              `"_name`", i))); \
00191:            end \
00192:         end \
00193:       endcase
     : 
00194: 
00195: 
00196: `define vmm_xactor_member_channel(_name, _do) \
00197:   \
00198:       case (do_what & _do) \
00199:         DO_PRINT: begin \
00200:            $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00201:                     this._name.psdisplay({this.__vmm_prefix, `"_name: `"})); \
00202:         end \
00203:         DO_RESET: begin \
00204:            this._name.flush(); \
00205:         end \
00206:         DO_KILL: begin \
00207:            this._name.kill(); \
00208:         end \
00209:       endcase
     : 
00210: 
00211: 
00212: `define vmm_xactor_member_channel_array(_name, _do) \
00213:   \
00214:       case (do_what & _do) \
00215:         DO_PRINT: begin \
00216:            foreach (this._name[i]) begin \
00217:               $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00218:                        this._name[i].psdisplay(`vmm_sformatf("%s%s[%0d]: ", \
00219:                                                              this.__vmm_prefix, \
00220:                                                              `"_name`", i))); \
00221:            end \
00222:         end \
00223:         DO_RESET: begin \
00224:            foreach (this._name[i]) begin \
00225:               this._name[i].flush(); \
00226:            end \
00227:         end \
00228:         DO_KILL: begin \
00229:            foreach (this._name[i]) begin \
00230:               this._name[i].kill(); \
00231:            end \
00232:         end \
00233:       endcase
     : 
00234: 
00235: 
00236: `define vmm_xactor_member_channel_aa_scalar(_name, _do) \
00237:   \
00238:    `vmm_xactor_member_channel_array(_name, _do)
     : 
00239: 
00240: 
00241: `define vmm_xactor_member_channel_aa_string(_name, _do) \
00242:   \
00243:       case (do_what & _do) \
00244:         DO_PRINT: begin \
00245:            foreach (this._name[i]) begin \
00246:               $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00247:                        this._name[i].psdisplay(`vmm_sformatf("%s%s[%s]: ", \
00248:                                                              this.__vmm_prefix, \
00249:                                                              `"_name`", i))); \
00250:            end \
00251:         end \
00252:         DO_RESET: begin \
00253:            foreach (this._name[i]) begin \
00254:               this._name[i].flush(); \
00255:            end \
00256:         end \
00257:         DO_KILL: begin \
00258:            foreach (this._name[i]) begin \
00259:               this._name[i].kill(); \
00260:            end \
00261:         end \
00262:       endcase
     : 
00263: 
00264: 
00265: `define vmm_xactor_member_xactor(_name, _do) \
00266:   \
00267:       case (do_what & _do) \
00268:         DO_PRINT: begin \
00269:            string _prefix = this.__vmm_prefix; \
00270:            $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00271:                     this._name.psdisplay({this.__vmm_prefix, `"_name: `"})); \
00272:            this.__vmm_prefix = _prefix; \
00273:         end \
00274:         DO_START: begin \
00275:            this._name.start_xactor(); \
00276:         end \
00277:         DO_STOP: begin \
00278:            this._name.stop_xactor(); \
00279:         end \
00280:         DO_RESET: begin \
00281:            this._name.reset_xactor(rst_typ); \
00282:         end \
00283:         DO_KILL: begin \
00284:            this._name.kill(); \
00285:         end \
00286:       endcase
     : 
00287: 
00288: 
00289: `define vmm_xactor_member_xactor_array(_name, _do) \
00290:   \
00291:       case (do_what & _do) \
00292:         DO_PRINT: begin \
00293:            string _prefix = this.__vmm_prefix; \
00294:            foreach (this._name[i]) begin \
00295:               $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00296:                        this._name[i].psdisplay(`vmm_sformatf("%s%s[%0d]: ", \
00297:                                                              _prefix, \
00298:                                                              `"_name`", i))); \
00299:            end \
00300:            this.__vmm_prefix = _prefix; \
00301:         end \
00302:         DO_START: begin \
00303:            foreach (this._name[i]) begin \
00304:               this._name[i].start_xactor(); \
00305:            end \
00306:         end \
00307:         DO_STOP: begin \
00308:            foreach (this._name[i]) begin \
00309:               this._name[i].stop_xactor(); \
00310:            end \
00311:         end \
00312:         DO_RESET: begin \
00313:            foreach (this._name[i]) begin \
00314:               this._name[i].reset_xactor(rst_typ); \
00315:            end \
00316:         end \
00317:         DO_KILL: begin \
00318:            foreach (this._name[i]) begin \
00319:               this._name[i].kill(); \
00320:            end \
00321:         end \
00322:       endcase
     : 
00323: 
00324: 
00325: `define vmm_xactor_member_xactor_aa_scalar(_name, _do) \
00326:   \
00327:    `vmm_xactor_member_xactor_array(_name, _do)
     : 
00328: 
00329: 
00330: `define vmm_xactor_member_xactor_aa_string(_name, _do) \
00331:   \
00332:       case (do_what & _do) \
00333:         DO_PRINT: begin \
00334:            string _prefix = this.__vmm_prefix; \
00335:            foreach (this._name[i]) begin \
00336:               $sformat(this.__vmm_image, `"%s\n%s`", this.__vmm_image, \
00337:                        this._name[i].psdisplay(`vmm_sformatf("%s%s[%s]: ", \
00338:                                                              _prefix, \
00339:                                                              `"_name`", i))); \
00340:            end \
00341:            this.__vmm_prefix = _prefix; \
00342:         end \
00343:         DO_START: begin \
00344:            foreach (this._name[i]) begin \
00345:               this._name[i].start_xactor(); \
00346:            end \
00347:         end \
00348:         DO_STOP: begin \
00349:            foreach (this._name[i]) begin \
00350:               this._name[i].stop_xactor(); \
00351:            end \
00352:         end \
00353:         DO_RESET: begin \
00354:            foreach (this._name[i]) begin \
00355:               this._name[i].reset_xactor(rst_typ); \
00356:            end \
00357:         end \
00358:         DO_KILL: begin \
00359:            foreach (this._name[i]) begin \
00360:               this._name[i].kill(); \
00361:            end \
00362:         end \
00363:       endcase
     : 
00364: 
00365: 
00366: `define vmm_xactor_member_user_defined(_name) \
00367:  \
00368:       void'(this.do_``_name(do_what, rst_typ));
     : 
00369: 
00370: 
00371: `define vmm_xactor_member_end(_class) \
00372:    endfunction \
00373:  \
00374:    virtual function string psdisplay(string prefix = `"`"); \
00375:       this.__vmm_done_user = 1; \
00376:       psdisplay = this.do_psdisplay(prefix); \
00377:       if (this.__vmm_done_user) return psdisplay; \
00378:  \
00379:       this.__vmm_image = super.psdisplay(prefix); \
00380:       this.__vmm_prefix = prefix; \
00381:       if (`vmm_str_match(prefix, ": $")) begin \
00382:          this.__vmm_prefix = {`vmm_str_prematch(prefix), "."}; \
00383:       end \
00384:       this.do_all(DO_PRINT); \
00385:       return this.__vmm_image; \
00386:    endfunction \
00387:  \
00388:    virtual function void start_xactor(); \
00389:       super.start_xactor(); \
00390:       this.__vmm_done_user = 1; \
00391:       this.do_start_xactor(); \
00392:       if (this.__vmm_done_user) return; \
00393:  \
00394:       this.do_all(DO_START); \
00395:    endfunction \
00396:  \
00397:    virtual function void stop_xactor(); \
00398:       super.stop_xactor(); \
00399:       this.__vmm_done_user = 1; \
00400:       this.do_stop_xactor(); \
00401:       if (this.__vmm_done_user) return; \
00402:  \
00403:       this.do_all(DO_STOP); \
00404:    endfunction \
00405:  \
00406:    virtual function void reset_xactor(vmm_xactor::reset_e rst_typ = SOFT_RST); \
00407:       super.reset_xactor(rst_typ); \
00408:       this.__vmm_done_user = 1; \
00409:       this.do_reset_xactor(rst_typ); \
00410:       if (this.__vmm_done_user) return; \
00411:  \
00412:       this.do_all(DO_RESET, rst_typ); \
00413:    endfunction \
00414:  \
00415:    virtual function void kill(); \
00416:       super.kill(); \
00417:       this.__vmm_done_user = 1; \
00418:       this.do_kill_xactor(); \
00419:       if (this.__vmm_done_user) return; \
00420:  \
00421:       this.do_all(DO_KILL); \
00422:    endfunction
     :