| // 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_ |