Add new dram extensions.
This commit is contained in:
@@ -41,6 +41,153 @@
|
||||
using namespace sc_core;
|
||||
using namespace tlm;
|
||||
|
||||
ArbiterExtension::ArbiterExtension(Thread thread, Channel channel, uint64_t threadPayloadID,
|
||||
const sc_core::sc_time& timeOfGeneration) :
|
||||
thread(thread), channel(channel), threadPayloadID(threadPayloadID), timeOfGeneration(timeOfGeneration)
|
||||
{}
|
||||
|
||||
void ArbiterExtension::setExtension(tlm::tlm_generic_payload& trans, Thread thread, Channel channel)
|
||||
{
|
||||
auto* extension = trans.get_extension<ArbiterExtension>();
|
||||
|
||||
if (extension != nullptr)
|
||||
{
|
||||
extension->thread = thread;
|
||||
extension->channel = channel;
|
||||
extension->threadPayloadID = 0;
|
||||
extension->timeOfGeneration = SC_ZERO_TIME;
|
||||
}
|
||||
else
|
||||
{
|
||||
extension = new ArbiterExtension(thread, channel, 0, SC_ZERO_TIME);
|
||||
trans.set_auto_extension(extension);
|
||||
}
|
||||
}
|
||||
|
||||
void ArbiterExtension::setIDAndTimeOfGeneration(tlm::tlm_generic_payload& trans, uint64_t threadPayloadID,
|
||||
const sc_core::sc_time& timeOfGeneration)
|
||||
{
|
||||
assert(trans.get_extension<ArbiterExtension>() != nullptr);
|
||||
|
||||
auto* extension = trans.get_extension<ArbiterExtension>();
|
||||
extension->threadPayloadID = threadPayloadID;
|
||||
extension->timeOfGeneration = timeOfGeneration;
|
||||
}
|
||||
|
||||
tlm_extension_base* ArbiterExtension::clone() const
|
||||
{
|
||||
return new ArbiterExtension(thread, channel, threadPayloadID, timeOfGeneration);
|
||||
}
|
||||
|
||||
void ArbiterExtension::copy_from(const tlm_extension_base& ext)
|
||||
{
|
||||
const auto& cpyFrom = dynamic_cast<const ArbiterExtension&>(ext);
|
||||
thread = cpyFrom.thread;
|
||||
channel = cpyFrom.channel;
|
||||
threadPayloadID = cpyFrom.threadPayloadID;
|
||||
timeOfGeneration = cpyFrom.timeOfGeneration;
|
||||
}
|
||||
|
||||
Thread ArbiterExtension::getThread(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ArbiterExtension>()->thread;
|
||||
}
|
||||
|
||||
Channel ArbiterExtension::getChannel(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ArbiterExtension>()->channel;
|
||||
}
|
||||
|
||||
uint64_t ArbiterExtension::getThreadPayloadID(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ArbiterExtension>()->threadPayloadID;
|
||||
}
|
||||
|
||||
sc_time ArbiterExtension::getTimeOfGeneration(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ArbiterExtension>()->timeOfGeneration;
|
||||
}
|
||||
|
||||
ControllerExtension::ControllerExtension(uint64_t channelPayloadID, Rank rank, BankGroup bankGroup, Bank bank, Row row,
|
||||
Column column, unsigned int burstLength) :
|
||||
channelPayloadID(channelPayloadID), rank(rank), bankGroup(bankGroup), bank(bank), row(row), column(column),
|
||||
burstLength(burstLength)
|
||||
{}
|
||||
|
||||
void ControllerExtension::setExtension(tlm::tlm_generic_payload& trans, uint64_t channelPayloadID, Rank rank,
|
||||
BankGroup bankGroup, Bank bank, Row row, Column column, unsigned int burstLength)
|
||||
{
|
||||
auto* extension = trans.get_extension<ControllerExtension>();
|
||||
|
||||
if (extension != nullptr)
|
||||
{
|
||||
extension->channelPayloadID = channelPayloadID;
|
||||
extension->rank = rank;
|
||||
extension->bankGroup = bankGroup;
|
||||
extension->bank = bank;
|
||||
extension->row = row;
|
||||
extension->column = column;
|
||||
extension->burstLength = burstLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
extension = new ControllerExtension(channelPayloadID, rank, bankGroup, bank, row, column, burstLength);
|
||||
trans.set_auto_extension(extension);
|
||||
}
|
||||
}
|
||||
|
||||
tlm_extension_base* ControllerExtension::clone() const
|
||||
{
|
||||
return new ControllerExtension(channelPayloadID, rank, bankGroup, bank, row, column, burstLength);
|
||||
}
|
||||
|
||||
void ControllerExtension::copy_from(const tlm_extension_base& ext)
|
||||
{
|
||||
const auto& cpyFrom = dynamic_cast<const ControllerExtension&>(ext);
|
||||
channelPayloadID = cpyFrom.channelPayloadID;
|
||||
rank = cpyFrom.rank;
|
||||
bankGroup = cpyFrom.bankGroup;
|
||||
bank = cpyFrom.bank;
|
||||
row = cpyFrom.row;
|
||||
column = cpyFrom.column;
|
||||
burstLength = cpyFrom.burstLength;
|
||||
}
|
||||
|
||||
uint64_t ControllerExtension::getChannelPayloadID(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->channelPayloadID;
|
||||
}
|
||||
|
||||
Rank ControllerExtension::getRank(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->rank;
|
||||
}
|
||||
|
||||
BankGroup ControllerExtension::getBankGroup(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->bankGroup;
|
||||
}
|
||||
|
||||
Bank ControllerExtension::getBank(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->bank;
|
||||
}
|
||||
|
||||
Row ControllerExtension::getRow(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->row;
|
||||
}
|
||||
|
||||
Column ControllerExtension::getColumn(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->column;
|
||||
}
|
||||
|
||||
unsigned ControllerExtension::getBurstLength(const tlm::tlm_generic_payload& trans)
|
||||
{
|
||||
return trans.get_extension<ControllerExtension>()->burstLength;
|
||||
}
|
||||
|
||||
DramExtension::DramExtension() :
|
||||
thread(0), channel(0), rank(0), bankGroup(0), bank(0),
|
||||
row(0), column(0), burstLength(0),
|
||||
|
||||
@@ -154,6 +154,60 @@ private:
|
||||
unsigned int id;
|
||||
};
|
||||
|
||||
class ArbiterExtension : public tlm::tlm_extension<ArbiterExtension>
|
||||
{
|
||||
public:
|
||||
static void setExtension(tlm::tlm_generic_payload& trans, Thread thread, Channel channel);
|
||||
static void setIDAndTimeOfGeneration(tlm::tlm_generic_payload& trans, uint64_t threadPayloadID,
|
||||
const sc_core::sc_time& timeOfGeneration);
|
||||
|
||||
tlm::tlm_extension_base* clone() const override;
|
||||
void copy_from(const tlm::tlm_extension_base& ext) override;
|
||||
|
||||
static Thread getThread(const tlm::tlm_generic_payload& trans);
|
||||
static Channel getChannel(const tlm::tlm_generic_payload& trans);
|
||||
static uint64_t getThreadPayloadID(const tlm::tlm_generic_payload& trans);
|
||||
static sc_core::sc_time getTimeOfGeneration(const tlm::tlm_generic_payload& trans);
|
||||
|
||||
private:
|
||||
ArbiterExtension(Thread thread, Channel channel, uint64_t threadPayloadID, const sc_core::sc_time& timeOfGeneration);
|
||||
Thread thread;
|
||||
Channel channel;
|
||||
uint64_t threadPayloadID;
|
||||
sc_core::sc_time timeOfGeneration;
|
||||
};
|
||||
|
||||
class ControllerExtension : public tlm::tlm_extension<ControllerExtension>
|
||||
{
|
||||
public:
|
||||
static void setExtension(tlm::tlm_generic_payload& trans, uint64_t channelPayloadID, Rank rank, BankGroup bankGroup,
|
||||
Bank bank, Row row, Column column, unsigned burstLength);
|
||||
|
||||
//static ControllerExtension& getExtension(const tlm::tlm_generic_payload& trans);
|
||||
|
||||
tlm::tlm_extension_base* clone() const override;
|
||||
void copy_from(const tlm::tlm_extension_base& ext) override;
|
||||
|
||||
static uint64_t getChannelPayloadID(const tlm::tlm_generic_payload& trans);
|
||||
static Rank getRank(const tlm::tlm_generic_payload& trans);
|
||||
static BankGroup getBankGroup(const tlm::tlm_generic_payload& trans);
|
||||
static Bank getBank(const tlm::tlm_generic_payload& trans);
|
||||
static Row getRow(const tlm::tlm_generic_payload& trans);
|
||||
static Column getColumn(const tlm::tlm_generic_payload& trans);
|
||||
static unsigned getBurstLength(const tlm::tlm_generic_payload& trans);
|
||||
|
||||
private:
|
||||
ControllerExtension(uint64_t channelPayloadID, Rank rank, BankGroup bankGroup, Bank bank, Row row, Column column,
|
||||
unsigned burstLength);
|
||||
uint64_t channelPayloadID;
|
||||
Rank rank;
|
||||
BankGroup bankGroup;
|
||||
Bank bank;
|
||||
Row row;
|
||||
Column column;
|
||||
unsigned burstLength;
|
||||
};
|
||||
|
||||
|
||||
class DramExtension : public tlm::tlm_extension<DramExtension>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user