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: class vmm_ral_mem_burst;
00024: rand int unsigned n_beats;
00025: rand bit [64-1:0] start_offset;
00026: rand bit [64-1:0] incr_offset;
00027: rand bit [64-1:0] max_offset;
00028: vmm_data user_data;
00029: endclass
00030:
00031:
00032: class vmm_ral_mem_callbacks extends vmm_ral_callbacks;
00033:
00034: virtual task pre_write(vmm_ral_mem mem,
00035: ref bit [64-1:0] offset,
00036: ref bit [64-1:0] wdat,
00037: ref vmm_ral::path_e path,
00038: ref string domain);
00039: endtask: pre_write
00040:
00041: virtual task post_write(vmm_ral_mem mem,
00042: bit [64-1:0] offset,
00043: bit [64-1:0] wdat,
00044: vmm_ral::path_e path,
00045: string domain,
00046: ref vmm_rw::status_e status);
00047: endtask: post_write
00048:
00049: virtual task pre_read(vmm_ral_mem mem,
00050: ref bit [64-1:0] offset,
00051: ref vmm_ral::path_e path,
00052: ref string domain);
00053: endtask: pre_read
00054:
00055: virtual task post_read(input vmm_ral_mem mem,
00056: input bit [64-1:0] offset,
00057: ref bit [64-1:0] rdat,
00058: input vmm_ral::path_e path,
00059: input string domain,
00060: ref vmm_rw::status_e status);
00061: endtask: post_read
00062:
00063: virtual task pre_burst(vmm_ral_mem mem,
00064: vmm_rw::kind_e kind,
00065: vmm_ral_mem_burst burst,
00066: ref bit [64-1:0] wdat[],
00067: ref vmm_ral::path_e path,
00068: ref string domain);
00069: endtask: pre_burst
00070:
00071: virtual task post_burst(input vmm_ral_mem mem,
00072: input vmm_rw::kind_e kind,
00073: input vmm_ral_mem_burst burst,
00074: ref bit [64-1:0] data[],
00075: input vmm_ral::path_e path,
00076: input string domain,
00077: ref vmm_rw::status_e status);
00078: endtask: post_burst
00079: endclass: vmm_ral_mem_callbacks
00080:
00081:
00082: virtual class vmm_ral_mem_frontdoor;
00083: static vmm_log log = new("vmm_ral_mem_frontdoor", "class");
00084:
00085: extern virtual task write(output vmm_rw::status_e status,
00086: input bit [64-1:0] offset,
00087: input bit [64-1:0] data,
00088: input int data_id = -1,
00089: input int scenario_id = -1,
00090: input int stream_id = -1);
00091: extern virtual task read(output vmm_rw::status_e status,
00092: input bit [64-1:0] offset,
00093: output bit [64-1:0] data,
00094: input int data_id = -1,
00095: input int scenario_id = -1,
00096: input int stream_id = -1);
00097: extern virtual task burst_write(output vmm_rw::status_e status,
00098: input vmm_ral_mem_burst burst,
00099: input bit [64-1:0] data[],
00100: input int data_id = -1,
00101: input int scenario_id = -1,
00102: input int stream_id = -1);
00103: extern virtual task burst_read(output vmm_rw::status_e status,
00104: input vmm_ral_mem_burst burst,
00105: output bit [64-1:0] data[],
00106: input int data_id = -1,
00107: input int scenario_id = -1,
00108: input int stream_id = -1);
00109: endclass: vmm_ral_mem_frontdoor
00110:
00111:
00112: class vmm_ral_mem;
00113: static vmm_log log = new("RAL", "memory");
00114:
00115: vmm_mam mam;
00116:
00117: typedef enum {UNKNOWNS, ZEROES, ONES, ADDRESS, VALUE, INCR, DECR} init_e;
00118:
00119: local string name;
00120: local bit locked;
00121:
00122: local vmm_ral::access_e access;
00123: local longint unsigned size;
00124:
00125: local vmm_ral_block parent;
00126:
00127: local logic [64-1:0] offset_in_block[];
00128: local string domains[];
00129: local vmm_ral::access_e rights[];
00130:
00131: local int unsigned n_bits;
00132: local string constraint_block_names[];
00133:
00134: local vmm_ral_access ral_access;
00135: local vmm_ral_mem_frontdoor frontdoor[];
00136: local vmm_ral_mem_backdoor backdoor;
00137:
00138: local vmm_ral_mem_callbacks callbacks[$];
00139:
00140: local string attributes[string];
00141:
00142: local bit is_powered_down;
00143:
00144: local int has_cover;
00145: local int cover_on;
00146:
00147: static vmm_ral_mem all_mems[*]; // Keeps track of all memories in the RAL Model
00148: static local int unsigned mem_id_factory = 0;
00149: local int unsigned mem_id = 0;
00150:
00151: /*local*/ vmm_ral_vreg XvregsX[$]; //Virtual registers implemented here
00152:
00153: extern function new(vmm_ral_block parent,
00154: string name,
00155: vmm_ral::access_e access,
00156: longint unsigned size,
00157: int unsigned n_bits,
00158: bit [64-1:0] base_addr,
00159: string domain = "",
00160: int cover_on = vmm_ral::NO_COVERAGE,
00161: bit [1:0] rights = 2'b11,
00162: bit unmapped = 0,
00163: int has_cover = vmm_ral::NO_COVERAGE);
00164:
00165: /*local*/ extern function void Xlock_modelX();
00166: /*local*/ extern function void add_domain(bit [64-1:0] base_addr,
00167: string domain,
00168: bit [1:0] rights,
00169: bit unmapped = 0);
00170:
00171: /*local*/ extern function void Xregister_ral_accessX(vmm_ral_access access);
00172:
00173: extern virtual function string get_name();
00174: extern virtual function string get_fullname();
00175: extern virtual function int get_n_domains();
00176: extern virtual function void get_domains(ref string domains[]);
00177: extern virtual function vmm_ral::access_e get_access(string domain = "");
00178: extern /*local*/ function vmm_ral_access Xget_ral_accessX();
00179: extern virtual function vmm_ral::access_e get_rights(string domain = "");
00180: extern virtual function void get_virtual_fields(ref vmm_ral_vfield fields[]);
00181: extern virtual function vmm_ral_vfield get_virtual_field_by_name(string name);
00182: extern virtual function void get_virtual_registers(ref vmm_ral_vreg regs[]);
00183: extern virtual function vmm_ral_vreg get_vreg_by_name(string name);
00184: extern virtual function vmm_ral_vreg get_vreg_by_offset(bit [63:0] offset,
00185: string domain = "");
00186: extern virtual function vmm_ral_block get_block();
00187: extern virtual function bit [64-1:0] get_offset_in_block(bit [64-1:0] mem_addr = 0,
00188: string domain = "");
00189: extern virtual function bit [64-1:0] get_address_in_system(bit [64-1:0] mem_addr = 0,
00190: string domain = "");
00191: extern virtual function longint unsigned get_size();
00192: extern virtual function int unsigned get_n_bits();
00193: extern function int unsigned get_n_bytes();
00194:
00195: extern virtual function void display(string prefix = "",
00196: string domain = "");
00197: extern virtual function string psdisplay(string prefix = "",
00198: string domain = "");
00199:
00200: extern virtual function void set_attribute(string name,
00201: string value);
00202: extern virtual function string get_attribute(string name,
00203: bit inherited = 1);
00204: extern virtual function void get_all_attributes(ref string names[],
00205: input bit inherited = 1);
00206:
00207: extern virtual function void power_down();
00208: extern virtual function void power_up();
00209:
00210: extern virtual function bit can_cover(int models);
00211: extern virtual function int set_cover(int is_on);
00212: extern virtual function bit is_cover_on(int is_on = vmm_ral::ALL_COVERAGE);
00213:
00214: extern virtual task init(output bit is_ok,
00215: input init_e pattern,
00216: input bit [64-1:0] data);
00217:
00218: extern virtual task write(output vmm_rw::status_e status,
00219: input bit [64-1:0] mem_addr,
00220: input bit [64-1:0] value,
00221: input vmm_ral::path_e path = vmm_ral::DEFAULT,
00222: input string domain = "",
00223: input int data_id = -1,
00224: input int scenario_id = -1,
00225: input int stream_id = -1);
00226:
00227: extern virtual task read(output vmm_rw::status_e status,
00228: input bit [64-1:0] mem_addr,
00229: output bit [64-1:0] value,
00230: input vmm_ral::path_e path = vmm_ral::DEFAULT,
00231: input string domain = "",
00232: input int data_id = -1,
00233: input int scenario_id = -1,
00234: input int stream_id = -1);
00235:
00236: extern local function bit validate_burst(vmm_ral_mem_burst burst);
00237:
00238: extern virtual task burst_write(output vmm_rw::status_e status,
00239: input vmm_ral_mem_burst burst,
00240: input bit [64-1:0] value[],
00241: input vmm_ral::path_e path = vmm_ral::DEFAULT,
00242: input string domain = "",
00243: input int data_id = -1,
00244: input int scenario_id = -1,
00245: input int stream_id = -1);
00246:
00247: extern virtual task burst_read(output vmm_rw::status_e status,
00248: input vmm_ral_mem_burst burst,
00249: output bit [64-1:0] value[],
00250: input vmm_ral::path_e path = vmm_ral::DEFAULT,
00251: input string domain = "",
00252: input int data_id = -1,
00253: input int scenario_id = -1,
00254: input int stream_id = -1);
00255:
00256: extern virtual task poke(output vmm_rw::status_e status,
00257: input bit [64-1:0] mem_addr,
00258: input bit [64-1:0] value,
00259: input int data_id = -1,
00260: input int scenario_id = -1,
00261: input int stream_id = -1);
00262:
00263: extern virtual task peek(output vmm_rw::status_e status,
00264: input bit [64-1:0] mem_addr,
00265: output bit [64-1:0] value,
00266: input int data_id = -1,
00267: input int scenario_id = -1,
00268: input int stream_id = -1);
00269:
00270: extern virtual task readmemh(string filename);
00271: extern virtual task writememh(string filename);
00272:
00273: extern function void set_frontdoor(vmm_ral_mem_frontdoor ftdr,
00274: string domain = "");
00275: extern function vmm_ral_mem_frontdoor get_frontdoor(string domain = "");
00276: extern function void set_backdoor(vmm_ral_mem_backdoor bkdr);
00277: extern function vmm_ral_mem_backdoor get_backdoor();
00278:
00279: extern function void prepend_callback(vmm_ral_mem_callbacks cb);
00280: extern function void append_callback(vmm_ral_mem_callbacks cb);
00281: extern function void unregister_callback(vmm_ral_mem_callbacks cb);
00282:
00283: extern local function int get_domain_index(string domain);
00284:
00285: extern function int unsigned get_mem_ID();
00286: endclass: vmm_ral_mem