blob: 128500ba0543c19b07747bb92dcec84ca89fd530 [file] [log] [blame]
// 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_