| // Copyright lowRISC contributors. | 
 | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 | #ifndef OPENTITAN_HW_DV_VERILATOR_CPP_VERILATOR_MEMUTIL_H_ | 
 | #define OPENTITAN_HW_DV_VERILATOR_CPP_VERILATOR_MEMUTIL_H_ | 
 |  | 
 | // | 
 | // A wrapper class that converts a DpiMemutil into a SimCtrlExtension | 
 | // | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "dpi_memutil.h" | 
 | #include "sim_ctrl_extension.h" | 
 |  | 
 | class VerilatorMemUtil : public SimCtrlExtension { | 
 |  public: | 
 |   // No-argument constructor makes a VerilatorMemUtil. Single-argument | 
 |   // constructor wraps its mem_util argument (but does not take ownership). | 
 |   VerilatorMemUtil(); | 
 |   explicit VerilatorMemUtil(DpiMemUtil *mem_util); | 
 |  | 
 |   // Declared in SimCtrlExtension | 
 |   bool ParseCLIArguments(int argc, char **argv, bool &exit_app) override; | 
 |  | 
 |   // Get underlying DpiMemUtil object | 
 |   DpiMemUtil *GetUnderlying() { return mem_util_; } | 
 |  | 
 |   // Pass-thru function to underlying object | 
 |   void RegisterMemoryArea(const std::string &name, uint32_t base, | 
 |                           const MemArea *mem_area) { | 
 |     return mem_util_->RegisterMemoryArea(name, base, mem_area); | 
 |   } | 
 |  | 
 |  private: | 
 |   DpiMemUtil *mem_util_; | 
 |   std::unique_ptr<DpiMemUtil> allocation_; | 
 | }; | 
 |  | 
 | #endif  // OPENTITAN_HW_DV_VERILATOR_CPP_VERILATOR_MEMUTIL_H_ |