Merge branch 'push-qkkuztnkoxms' into 'develop'

Fix DRAMSys forward declaration

See merge request ems/astdm/modeling.dram/dram.sys.5!132
This commit is contained in:
2025-08-05 14:28:27 +02:00
3 changed files with 55 additions and 49 deletions

View File

@@ -9,7 +9,6 @@
#include <tlm>
#include <tlm_utils/simple_initiator_socket.h>
#include <tlm_utils/simple_target_socket.h>
#include <vector>
namespace DRAMSys
{

View File

@@ -42,12 +42,10 @@
#include "DRAMSys.h"
#include "DRAMSys/common/DebugManager.h"
#include "DRAMSys/common/DramATRecorder.h"
#include "DRAMSys/common/TlmATRecorder.h"
#include "DRAMSys/common/utils.h"
#include "DRAMSys/simulation/Dram.h"
#include "DRAMSys/config/MemSpec.h"
#include "DRAMSys/configuration/memspec/MemSpecDDR3.h"
#include "DRAMSys/configuration/memspec/MemSpecDDR4.h"
#include "DRAMSys/configuration/memspec/MemSpecGDDR5.h"
@@ -58,6 +56,7 @@
#include "DRAMSys/configuration/memspec/MemSpecSTTMRAM.h"
#include "DRAMSys/configuration/memspec/MemSpecWideIO.h"
#include "DRAMSys/configuration/memspec/MemSpecWideIO2.h"
#include "DRAMSys/simulation/Dram.h"
#ifdef DDR5_SIM
#include "DRAMSys/configuration/memspec/MemSpecDDR5.h"
@@ -72,9 +71,9 @@
#include <cstdlib>
#include <iostream>
#include <memory>
#include <vector>
#include <variant>
#include <type_traits>
#include <variant>
#include <vector>
namespace DRAMSys
{
@@ -310,49 +309,53 @@ void DRAMSys::report()
std::cout << headline << std::endl;
}
std::unique_ptr<const MemSpec> DRAMSys::createMemSpec(const DRAMUtils::MemSpec::MemSpecVariant& memSpec)
std::unique_ptr<const MemSpec>
DRAMSys::createMemSpec(const DRAMUtils::MemSpec::MemSpecVariant& memSpec)
{
return std::visit([](const auto& v) -> std::unique_ptr<const MemSpec> {
using T = std::decay_t<decltype(v)>;
if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecDDR3>)
return std::make_unique<const MemSpecDDR3>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecDDR4>)
return std::make_unique<const MemSpecDDR4>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecLPDDR4>)
return std::make_unique<const MemSpecLPDDR4>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecWideIO>)
return std::make_unique<const MemSpecWideIO>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecWideIO2>)
return std::make_unique<const MemSpecWideIO2>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecHBM2>)
return std::make_unique<const MemSpecHBM2>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecGDDR5>)
return std::make_unique<const MemSpecGDDR5>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecGDDR5X>)
return std::make_unique<const MemSpecGDDR5X>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecGDDR6>)
return std::make_unique<const MemSpecGDDR6>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecSTTMRAM>)
return std::make_unique<const MemSpecSTTMRAM>(v);
return std::visit(
[](const auto& v) -> std::unique_ptr<const MemSpec>
{
using T = std::decay_t<decltype(v)>;
if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecDDR3>)
return std::make_unique<const MemSpecDDR3>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecDDR4>)
return std::make_unique<const MemSpecDDR4>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecLPDDR4>)
return std::make_unique<const MemSpecLPDDR4>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecWideIO>)
return std::make_unique<const MemSpecWideIO>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecWideIO2>)
return std::make_unique<const MemSpecWideIO2>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecHBM2>)
return std::make_unique<const MemSpecHBM2>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecGDDR5>)
return std::make_unique<const MemSpecGDDR5>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecGDDR5X>)
return std::make_unique<const MemSpecGDDR5X>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecGDDR6>)
return std::make_unique<const MemSpecGDDR6>(v);
else if constexpr (std::is_same_v<T, DRAMUtils::MemSpec::MemSpecSTTMRAM>)
return std::make_unique<const MemSpecSTTMRAM>(v);
#ifdef DDR5_SIM
else if constexpr ((std::is_same_v<T, DRAMUtils::MemSpec::MemSpecDDR5>))
return std::make_unique<const MemSpecDDR5>(v);
else if constexpr ((std::is_same_v<T, DRAMUtils::MemSpec::MemSpecDDR5>))
return std::make_unique<const MemSpecDDR5>(v);
#endif
#ifdef LPDDR5_SIM
else if constexpr ((std::is_same_v<T, DRAMUtils::MemSpec::MemSpecLPDDR5>))
return std::make_unique<const MemSpecLPDDR5>(v);
else if constexpr ((std::is_same_v<T, DRAMUtils::MemSpec::MemSpecLPDDR5>))
return std::make_unique<const MemSpecLPDDR5>(v);
#endif
#ifdef HBM3_SIM
else if constexpr ((std::is_same_v<T, DRAMUtils::MemSpec::MemSpecHBM3>))
return std::make_unique<const MemSpecHBM3>(v);
else if constexpr ((std::is_same_v<T, DRAMUtils::MemSpec::MemSpecHBM3>))
return std::make_unique<const MemSpecHBM3>(v);
#endif
else
{
SC_REPORT_FATAL("Configuration", "Unsupported DRAM type");
return nullptr;
}
}, memSpec.getVariant());
else
{
SC_REPORT_FATAL("Configuration", "Unsupported DRAM type");
return nullptr;
}
},
memSpec.getVariant());
}
std::unique_ptr<Arbiter> DRAMSys::createArbiter(const SimConfig& simConfig,

View File

@@ -42,16 +42,12 @@
#ifndef DRAMSYS_H
#define DRAMSYS_H
#include "DRAMSys/common/DramATRecorder.h"
#include "DRAMSys/common/TlmATRecorder.h"
#include "DRAMSys/common/TlmRecorder.h"
#include "DRAMSys/common/tlm2_base_protocol_checker.h"
#include "DRAMSys/config/DRAMSysConfiguration.h"
#include "DRAMSys/controller/Controller.h"
#include "DRAMSys/controller/McConfig.h"
#include "DRAMSys/simulation/AddressDecoder.h"
#include "DRAMSys/simulation/Arbiter.h"
#include "DRAMSys/simulation/Dram.h"
#include "DRAMSys/simulation/SimConfig.h"
#include <DRAMUtils/memspec/MemSpec.h>
@@ -67,6 +63,8 @@ namespace DRAMSys
{
class Dram;
class TlmATRecorder;
class DramATRecorder;
class DRAMSys : public sc_core::sc_module
{
@@ -75,7 +73,12 @@ public:
SC_HAS_PROCESS(DRAMSys);
DRAMSys(const sc_core::sc_module_name& name, const Config::Configuration& config);
~DRAMSys();
~DRAMSys() override;
DRAMSys(const DRAMSys&) = delete;
DRAMSys(DRAMSys&&) = delete;
DRAMSys& operator=(const DRAMSys&) = delete;
DRAMSys& operator=(DRAMSys&&) = delete;
const auto& getSimConfig() const { return simConfig; }
const auto& getMcConfig() const { return mcConfig; }
@@ -95,7 +98,8 @@ public:
private:
static void logo();
static std::unique_ptr<const MemSpec> createMemSpec(const DRAMUtils::MemSpec::MemSpecVariant& memSpec);
static std::unique_ptr<const MemSpec>
createMemSpec(const DRAMUtils::MemSpec::MemSpecVariant& memSpec);
static std::unique_ptr<Arbiter> createArbiter(const SimConfig& simConfig,
const McConfig& mcConfig,
const MemSpec& memSpec,