VMM OpenSource - (expanded) sv/RAL/vmm_ral_mem.svh

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/RAL/vmm_ral_mem.svh 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: 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