vmm_ral_mem.svh

Go to the documentation of this file.
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 [`VMM_RW_ADDR_WIDTH-1:0] start_offset;
00026    rand bit [`VMM_RW_ADDR_WIDTH-1:0] incr_offset;
00027    rand bit [`VMM_RW_ADDR_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-1:0] offset,
00036                           ref bit [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-1:0] offset,
00043                            bit [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-1:0] offset,
00057                           ref   bit [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-1:0] offset,
00087                              input  bit [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-1:0] offset,
00093                             output bit [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_DATA_WIDTH-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 [`VMM_RAL_ADDR_WIDTH-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 bit no_cover;
00141    local bit cover_on;
00142 
00143    /*local*/ vmm_ral_vreg XvregsX[$]; //Virtual registers implemented here
00144 
00145    extern function new(vmm_ral_block                 parent,
00146                        string                        name,
00147                        vmm_ral::access_e             access,
00148                        longint unsigned              size,
00149                        int unsigned                  n_bits,
00150                        bit [`VMM_RAL_ADDR_WIDTH-1:0] base_addr,
00151                        string                        domain   = "",
00152                        bit                           cover_on = 1,
00153                        bit [1:0]                     rights   = 2'b11,
00154                        bit                           unmapped = 0);
00155 
00156    /*local*/ extern function void Xlock_modelX();
00157    /*local*/ extern function void add_domain(bit [`VMM_RAL_ADDR_WIDTH-1:0] base_addr,
00158                                              string                        domain,
00159                                              bit [1:0]                     rights,
00160                                              bit                           unmapped = 0);
00161 
00162    /*local*/ extern function void Xregister_ral_accessX(vmm_ral_access access);
00163 
00164    extern virtual function string get_name();
00165    extern virtual function string get_fullname();
00166    extern virtual function int get_n_domains();
00167    extern virtual function void get_domains(ref string domains[]);
00168    extern virtual function vmm_ral::access_e get_access(string domain = "");
00169    extern /*local*/ function vmm_ral_access Xget_ral_accessX();
00170    extern virtual function vmm_ral::access_e get_rights(string domain = "");
00171    extern virtual function void get_virtual_fields(ref vmm_ral_vfield fields[]);
00172    extern virtual function vmm_ral_vfield get_virtual_field_by_name(string name);
00173    extern virtual function void get_virtual_registers(ref vmm_ral_vreg regs[]);
00174    extern virtual function vmm_ral_vreg get_vreg_by_name(string name);
00175    extern virtual function vmm_ral_vreg get_vreg_by_offset(bit [63:0] offset,
00176                                                            string domain = "");
00177    extern virtual function vmm_ral_block get_block();
00178    extern virtual function bit [`VMM_RAL_ADDR_WIDTH-1:0] get_offset_in_block(bit [`VMM_RAL_ADDR_WIDTH-1:0] mem_addr = 0,
00179                                                                              string                        domain   = "");
00180    extern virtual function bit [`VMM_RAL_ADDR_WIDTH-1:0] get_address_in_system(bit [`VMM_RAL_ADDR_WIDTH-1:0] mem_addr = 0,
00181                                                             string                                           domain   = "");
00182    extern virtual function longint unsigned get_size();
00183    extern virtual function int unsigned get_n_bits();
00184    extern         function int unsigned get_n_bytes();
00185 
00186    extern virtual function void display(string prefix = "",
00187                                         string domain = "");
00188    extern virtual function string psdisplay(string prefix = "",
00189                                             string domain = "");
00190 
00191    extern virtual function bit set_cover(bit is_on);
00192    extern virtual function bit is_cover_on();
00193 
00194    extern virtual task init(output bit                           is_ok,
00195                             input  init_e                        pattern,
00196                             input  bit [`VMM_RAL_DATA_WIDTH-1:0] data);
00197 
00198    extern virtual task write(output vmm_rw::status_e              status,
00199                              input  bit [`VMM_RAL_ADDR_WIDTH-1:0] mem_addr,
00200                              input  bit [`VMM_RAL_DATA_WIDTH-1:0] value,
00201                              input  vmm_ral::path_e               path   = vmm_ral::DEFAULT,
00202                              input  string                        domain = "",
00203                              input  int                           data_id = -1,
00204                              input  int                           scenario_id = -1,
00205                              input  int                           stream_id = -1);
00206 
00207    extern virtual task read(output vmm_rw::status_e              status,
00208                             input  bit [`VMM_RAL_ADDR_WIDTH-1:0] mem_addr,
00209                             output bit [`VMM_RAL_DATA_WIDTH-1:0] value,
00210                             input  vmm_ral::path_e               path   = vmm_ral::DEFAULT,
00211                             input  string                        domain = "",
00212                             input  int                           data_id = -1,
00213                             input  int                           scenario_id = -1,
00214                             input  int                           stream_id = -1);
00215 
00216    extern local function bit validate_burst(vmm_ral_mem_burst burst);
00217 
00218    extern virtual task burst_write(output vmm_rw::status_e              status,
00219                                    input  vmm_ral_mem_burst             burst,
00220                                    input  bit [`VMM_RAL_DATA_WIDTH-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 burst_read(output vmm_rw::status_e              status,
00228                                   input  vmm_ral_mem_burst             burst,
00229                                   output bit [`VMM_RAL_DATA_WIDTH-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 virtual task poke(output vmm_rw::status_e              status,
00237                             input  bit [`VMM_RAL_ADDR_WIDTH-1:0] mem_addr,
00238                             input  bit [`VMM_RAL_DATA_WIDTH-1:0] value,
00239                             input  int                           data_id = -1,
00240                             input  int                           scenario_id = -1,
00241                             input  int                           stream_id = -1);
00242 
00243    extern virtual task peek(output vmm_rw::status_e              status,
00244                             input  bit [`VMM_RAL_ADDR_WIDTH-1:0] mem_addr,
00245                             output bit [`VMM_RAL_DATA_WIDTH-1:0] value,
00246                             input  int                           data_id = -1,
00247                             input  int                           scenario_id = -1,
00248                             input  int                           stream_id = -1);
00249 
00250    extern virtual task readmemh(string filename);
00251    extern virtual task writememh(string filename);
00252 
00253    extern function void set_frontdoor(vmm_ral_mem_frontdoor ftdr,
00254                                       string                domain = "");
00255    extern function vmm_ral_mem_frontdoor get_frontdoor(string domain = "");
00256    extern function void set_backdoor(vmm_ral_mem_backdoor bkdr);
00257    extern function vmm_ral_mem_backdoor get_backdoor();
00258 
00259    extern function void prepend_callback(vmm_ral_mem_callbacks cb);
00260    extern function void append_callback(vmm_ral_mem_callbacks cb);
00261    extern function void unregister_callback(vmm_ral_mem_callbacks cb);
00262 
00263    extern local function int get_domain_index(string domain);
00264 endclass: vmm_ral_mem

Intelligent Design Verification
Intelligent Design Verification
Project: VMM, Revision: 1.0.0
Copyright (c) 2008 Intelligent Design Verification.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included here:
http://www.intelligentdv.com/licenses/fdl.txt
doxygen
Doxygen Version: 1.5.6
Sat Oct 18 11:38:21 2008
Find a documentation bug? Report bugs to: bugs.intelligentdv.com Project: DoxygenFilterSV