Merge pull request #191 from sprado/master
Controller Thread ID set to INT_MAX. No need to add or subtract 1 to the stimuli threads' ID anymore.
This commit is contained in:
@@ -25,7 +25,8 @@ CREATE TABLE GeneralInfo(
|
||||
Traces TEXT,
|
||||
WindowSize INTEGER,
|
||||
FlexibleRefresh INTEGER,
|
||||
MaxRefBurst INTEGER
|
||||
MaxRefBurst INTEGER,
|
||||
ControllerThread INTEGER
|
||||
);
|
||||
|
||||
CREATE TABLE Power(
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
#include <systemc.h>
|
||||
#include <string>
|
||||
#include <set>
|
||||
|
||||
#include "Utils.h"
|
||||
|
||||
class DebugManager
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "dramExtension.h"
|
||||
#include "xmlAddressdecoder.h"
|
||||
#include "../controller/core/configuration/Configuration.h"
|
||||
#include "../controller/Controller.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -154,7 +155,7 @@ void TlmRecorder::introduceTransactionSystem(tlm::tlm_generic_payload& trans)
|
||||
currentTransactionsInSystem[&trans].burstlength = trans.get_streaming_width();
|
||||
currentTransactionsInSystem[&trans].dramExtension = DramExtension::getExtension(trans);
|
||||
|
||||
if(DramExtension::getExtension(trans).getThread().ID() == 0)
|
||||
if(DramExtension::getExtension(trans).getThread().ID() == Controller::ControllerThreadId())
|
||||
currentTransactionsInSystem[&trans].timeOfGeneration = SC_ZERO_TIME;
|
||||
else
|
||||
currentTransactionsInSystem[&trans].timeOfGeneration = GenerationExtension::getExtension(&trans).TimeOfGeneration();
|
||||
@@ -285,8 +286,8 @@ void TlmRecorder::prepareSqlStatements()
|
||||
updatePhaseString =
|
||||
"UPDATE Phases SET PhaseEnd = :end WHERE Transact = :trans AND PhaseName = :name";
|
||||
insertGeneralInfoString =
|
||||
"INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,clk,UnitOfTime,MCconfig,Memspec,Traces, WindowSize, FlexibleRefresh, MaxRefBurst) VALUES"
|
||||
"(:numberOfTransactions,:end,:numberOfBanks,:clk,:unitOfTime,:mcconfig,:memspec,:traces,:windowSize, :flexibleRefresh, :maxRefBurst)";
|
||||
"INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,clk,UnitOfTime,MCconfig,Memspec,Traces, WindowSize, FlexibleRefresh, MaxRefBurst, ControllerThread) VALUES"
|
||||
"(:numberOfTransactions,:end,:numberOfBanks,:clk,:unitOfTime,:mcconfig,:memspec,:traces,:windowSize, :flexibleRefresh, :maxRefBurst, :controllerThread)";
|
||||
insertDebugMessageString = "INSERT INTO DebugMessages (Time,Message) Values (:time,:message)";
|
||||
insertPowerString = "INSERT INTO Power VALUES (:time,:averagePower)";
|
||||
|
||||
@@ -333,6 +334,7 @@ void TlmRecorder::insertGeneralInfo()
|
||||
sqlite3_bind_int(insertGeneralInfoStatement, 10, 0);
|
||||
sqlite3_bind_int(insertGeneralInfoStatement, 11, 0);
|
||||
}
|
||||
sqlite3_bind_int(insertGeneralInfoStatement, 12, Controller::ControllerThreadId()); ;
|
||||
executeSqlStatement(insertGeneralInfoStatement);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <tlm.h>
|
||||
#include <fstream>
|
||||
#include "dramExtension.h"
|
||||
#include "../controller/Controller.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace tinyxml2;
|
||||
@@ -232,7 +233,7 @@ void setUpDummy(tlm::tlm_generic_payload& payload, Bank& bank)
|
||||
payload.set_dmi_allowed(false);
|
||||
payload.set_byte_enable_length(0);
|
||||
payload.set_streaming_width(0);
|
||||
payload.set_extension(new DramExtension(Thread(0), bank, BankGroup(0), Row(0), Column(0))); //payload takes ownership
|
||||
payload.set_extension(new DramExtension(Thread(Controller::ControllerThreadId()), bank, BankGroup(0), Row(0), Column(0))); //payload takes ownership
|
||||
//TODO .. Dummies muessen noch banggruppe und rank sauber bekommen .. noch was ueberlegen!!!
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
#include "dramExtension.h"
|
||||
#include "third_party/tinyxml2/tinyxml2.h"
|
||||
|
||||
|
||||
#define DEF_SINGLETON( NAME ) \
|
||||
public: \
|
||||
static NAME& getInstance() \
|
||||
|
||||
@@ -111,6 +111,8 @@ public:
|
||||
unsigned int getTotalNumberOfPayloadsInSystem();
|
||||
void scheduleNextFromScheduler(Bank bank) override;
|
||||
|
||||
static unsigned int ControllerThreadId() {return controllerThreadId;}
|
||||
|
||||
private:
|
||||
void buildScheduler();
|
||||
void payloadEntersSystem(tlm_generic_payload& payload);
|
||||
@@ -161,6 +163,7 @@ private:
|
||||
// SystemC related:
|
||||
virtual void end_of_simulation() override;
|
||||
|
||||
static const unsigned int controllerThreadId = INT_MAX;
|
||||
};
|
||||
|
||||
#endif /* CONTROLLERWRAPPER_H_ */
|
||||
|
||||
@@ -60,7 +60,7 @@ pair<Command, tlm::tlm_generic_payload*> Fifo::getNextRequest(Bank bank)
|
||||
return pair<Command, tlm::tlm_generic_payload*>(Command::NOP, NULL);
|
||||
}
|
||||
|
||||
gp* Fifo::getPendingRequest(Bank bank)
|
||||
gp* Fifo::getPendingRequest(Bank /*bank*/)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ std::pair<Command, tlm::tlm_generic_payload *> FifoStrict::getNextRequest(Bank b
|
||||
return pair<Command, tlm::tlm_generic_payload*>(Command::NOP, NULL);
|
||||
}
|
||||
|
||||
gp* FifoStrict::getPendingRequest(Bank bank)
|
||||
gp* FifoStrict::getPendingRequest(Bank /*bank*/)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ deque<gp*>::iterator FR_FCFS::FindRowHit(Bank bank)
|
||||
return queue.end();
|
||||
}
|
||||
|
||||
gp* FR_FCFS::getPendingRequest(Bank bank)
|
||||
gp* FR_FCFS::getPendingRequest(Bank /*bank*/)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ void CWord::Resize(unsigned nsize)
|
||||
m_nBitLength = nsize;
|
||||
}
|
||||
|
||||
bool CWord::PartShiftRight(unsigned nPos, unsigned nShift)
|
||||
bool CWord::PartShiftRight(unsigned nPos, unsigned /*nShift*/)
|
||||
{
|
||||
if(nPos >= m_nBitLength)
|
||||
return false;
|
||||
|
||||
@@ -157,7 +157,7 @@ private:
|
||||
|
||||
void peqCallback(tlm_generic_payload& payload, const tlm_phase& phase)
|
||||
{
|
||||
unsigned int initiatorSocket = DramExtension::getExtension(payload).getThread().ID()-1;
|
||||
unsigned int initiatorSocket = DramExtension::getExtension(payload).getThread().ID();
|
||||
unsigned int channelId = DramExtension::getExtension(payload).getChannel().ID();
|
||||
|
||||
// Check the valid range of initiatorSocket ID and channel Id
|
||||
@@ -251,7 +251,7 @@ private:
|
||||
DecodedAddress decodedAddress = xmlAddressDecoder::getInstance().decodeAddress(payload.get_address());
|
||||
// Check the valid range of decodedAddress
|
||||
if (addressIsValid(decodedAddress)) {
|
||||
DramExtension* extension = new DramExtension(Thread(socketId+1), Channel(decodedAddress.channel), Bank(decodedAddress.bank), BankGroup(decodedAddress.bankgroup), Row(decodedAddress.row), Column(decodedAddress.column),burstlength);
|
||||
DramExtension* extension = new DramExtension(Thread(socketId), Channel(decodedAddress.channel), Bank(decodedAddress.bank), BankGroup(decodedAddress.bankgroup), Row(decodedAddress.row), Column(decodedAddress.column),burstlength);
|
||||
payload.set_auto_extension(extension);
|
||||
} else {
|
||||
SC_REPORT_FATAL("Arbiter", "Decoded Address are not inside the valid range");
|
||||
|
||||
@@ -566,7 +566,7 @@ struct Dram : sc_module
|
||||
else
|
||||
{
|
||||
tlm::tlm_command cmd = trans.get_command();
|
||||
sc_dt::uint64 adr = trans.get_address(); // TODO: - offset;
|
||||
//sc_dt::uint64 adr = trans.get_address(); // TODO: - offset;
|
||||
unsigned char* ptr = trans.get_data_ptr();
|
||||
unsigned int len = trans.get_data_length();
|
||||
//unsigned int bank = DramExtension::getExtension(trans).getBank().ID();
|
||||
|
||||
@@ -110,7 +110,7 @@ protected:
|
||||
{
|
||||
tlmRecorder->recordPhase(payload, phase, bwDelay + sc_time_stamp());
|
||||
|
||||
tSocket[DramExtension::getThread(payload).ID()-1]->nb_transport_bw(payload, TPhase, bwDelay);
|
||||
tSocket[DramExtension::getThread(payload).ID()]->nb_transport_bw(payload, TPhase, bwDelay);
|
||||
|
||||
if(phase == BEGIN_RESP)
|
||||
{
|
||||
|
||||
@@ -41,9 +41,9 @@
|
||||
TracePlayer::TracePlayer(TracePlayerListener* listener) :
|
||||
payloadEventQueue(this, &TracePlayer::peqCallback),
|
||||
transactionsSent(0),
|
||||
transactionsReceived(0),
|
||||
listener(listener),
|
||||
transactionsReceived(0),
|
||||
numberOfTransactions(0),
|
||||
listener(listener),
|
||||
finished(false)
|
||||
{
|
||||
iSocket.register_nb_transport_bw(this, &TracePlayer::nb_transport_bw);
|
||||
|
||||
@@ -50,10 +50,11 @@ struct GeneralInfo
|
||||
QString unitOfTime;
|
||||
unsigned int clkPeriod;
|
||||
unsigned int windowSize;
|
||||
unsigned int controllerThread;
|
||||
|
||||
public:
|
||||
GeneralInfo(unsigned int numberOfTransactions,unsigned int numberOfPhases,Timespan span,unsigned int numberOfBanks,const QString& description, QString unitOfTime,unsigned int clkPeriod, unsigned int windowSize) :
|
||||
numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases),span(span), numberOfBanks(numberOfBanks), description(description), unitOfTime(unitOfTime), clkPeriod(clkPeriod), windowSize(windowSize)
|
||||
GeneralInfo(unsigned int numberOfTransactions,unsigned int numberOfPhases,Timespan span,unsigned int numberOfBanks,const QString& description, QString unitOfTime,unsigned int clkPeriod, unsigned int windowSize, unsigned int controllerThread) :
|
||||
numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases),span(span), numberOfBanks(numberOfBanks), description(description), unitOfTime(unitOfTime), clkPeriod(clkPeriod), windowSize(windowSize), controllerThread(controllerThread)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
using namespace std;
|
||||
Transaction::Transaction(ID id,unsigned int address,unsigned int burstlength,int thread, unsigned int channel, unsigned int bank,unsigned int bankgroup, unsigned int row, unsigned int column, Timespan span, Timespan spanOnDataStrobe)
|
||||
:address(address),burstlength(burstlength),channel(channel), bank(bank),bankgroup(bankgroup), row(row), column(column),thread(thread),span(span),spanOnDataStrobe(spanOnDataStrobe),id(id){}
|
||||
:address(address), burstlength(burstlength), thread(thread), channel(channel), bank(bank),bankgroup(bankgroup), row(row), column(column),span(span),spanOnDataStrobe(spanOnDataStrobe),id(id){}
|
||||
|
||||
void Transaction::addPhase(shared_ptr<Phase> phase)
|
||||
{
|
||||
|
||||
@@ -48,8 +48,7 @@ typedef unsigned int ID;
|
||||
class Transaction
|
||||
{
|
||||
private:
|
||||
unsigned int address,burstlength,channel,bank,bankgroup,row,column;
|
||||
int thread;
|
||||
unsigned int address,burstlength,thread,channel,bank,bankgroup,row,column;
|
||||
Timespan span;
|
||||
Timespan spanOnDataStrobe;
|
||||
ID id;
|
||||
@@ -62,7 +61,6 @@ public:
|
||||
void addPhase(std::shared_ptr<Phase> phase);
|
||||
|
||||
bool isSelected(traceTime time,double yVal, const TraceDrawingProperties& drawingproperties) const;
|
||||
bool isControllerInternal(){return thread==0;}
|
||||
|
||||
unsigned int Address() const{return address;}
|
||||
unsigned int Burstlength() const{return burstlength;}
|
||||
@@ -76,7 +74,6 @@ public:
|
||||
const Timespan& Span() const{return span;}
|
||||
const Timespan& SpanOnDataStrobe() {return spanOnDataStrobe;}
|
||||
const std::vector<std::shared_ptr<Phase>>& Phases() const{return phases;}
|
||||
|
||||
};
|
||||
|
||||
#endif // TRANSACTION_H
|
||||
|
||||
@@ -199,7 +199,7 @@ ID TraceDB::getTransactionIDFromPhaseID(ID phaseID)
|
||||
GeneralInfo TraceDB::getGeneralInfoFromDB()
|
||||
{
|
||||
QSqlQuery query(database);
|
||||
query.prepare("SELECT NumberOfTransactions,TraceEnd,NumberOfBanks,Clk,UnitOfTime,Traces,Memspec,MCconfig, WindowSize FROM GeneralInfo");
|
||||
query.prepare("SELECT NumberOfTransactions,TraceEnd,NumberOfBanks,Clk,UnitOfTime,Traces,Memspec,MCconfig, WindowSize, ControllerThread FROM GeneralInfo");
|
||||
executeQuery(query);
|
||||
|
||||
if(query.next())
|
||||
@@ -215,6 +215,7 @@ GeneralInfo TraceDB::getGeneralInfoFromDB()
|
||||
QString memspec = "Memspec: " + query.value(6).toString();
|
||||
QString mcconfig = "MCconfig: " + query.value(7).toString();
|
||||
unsigned int windowSize = query.value(8).toInt();
|
||||
unsigned int controllerThread = query.value(9).toUInt();
|
||||
|
||||
QString description = (traces + "\n");
|
||||
description += mcconfig + "\n";
|
||||
@@ -224,7 +225,7 @@ GeneralInfo TraceDB::getGeneralInfoFromDB()
|
||||
description += "Length of trace: " + prettyFormatTime(traceEnd) + "\n";
|
||||
description += "Window size:" + QString::number(windowSize) + "\n";
|
||||
|
||||
return GeneralInfo(numberOfTransactions, numberOfPhases, Timespan(0,traceEnd),numberOfBanks,description,unitOfTime,clkPeriod, windowSize);
|
||||
return GeneralInfo(numberOfTransactions, numberOfPhases, Timespan(0,traceEnd),numberOfBanks,description,unitOfTime,clkPeriod, windowSize, controllerThread);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -306,7 +307,7 @@ vector<shared_ptr<Transaction>> TraceDB::parseTransactionsFromQuery(QSqlQuery &q
|
||||
Timespan spanOnStrobe(query.value(3).toLongLong(),query.value(4).toLongLong());
|
||||
unsigned int address = query.value(5).toInt();
|
||||
unsigned int burstlength = query.value(6).toInt();
|
||||
int thread= query.value(7).toInt();
|
||||
unsigned int thread= query.value(7).toInt();
|
||||
unsigned int channel = query.value(8).toInt();
|
||||
unsigned int bank = query.value(9).toInt();
|
||||
unsigned int bankgroup = query.value(10).toInt();
|
||||
|
||||
@@ -62,11 +62,10 @@ void TransactionTreeWidget::init(TraceNavigator *navigator)
|
||||
|
||||
void TransactionTreeWidget::AppendTransaction(const shared_ptr<Transaction> &transaction)
|
||||
{
|
||||
QTreeWidgetItem *node = new TransactionTreeItem(this,transaction);
|
||||
QTreeWidgetItem *node = new TransactionTreeItem(this,transaction, navigator->GeneralTraceInfo().controllerThread);
|
||||
addTopLevelItem(node);
|
||||
}
|
||||
|
||||
|
||||
void TransactionTreeWidget::ContextMenuRequested(QPoint point)
|
||||
{
|
||||
if(selectedItems().count() > 0 && selectedItems().at(0)->type() == TransactionTreeWidget::TransactionTreeItem::transactionTreeItemType)
|
||||
@@ -83,7 +82,7 @@ void TransactionTreeWidget::ContextMenuRequested(QPoint point)
|
||||
}
|
||||
}
|
||||
|
||||
TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(QTreeWidget *parent, const shared_ptr<Transaction> &transaction) : QTreeWidgetItem(parent,transactionTreeItemType)
|
||||
TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(QTreeWidget *parent, const shared_ptr<Transaction> &transaction, unsigned int controllerThread) : QTreeWidgetItem(parent,transactionTreeItemType)
|
||||
{
|
||||
this->setText(0, QString::number(transaction->Id()));
|
||||
this->id = transaction->Id();
|
||||
@@ -100,7 +99,7 @@ TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(QTreeWidget *par
|
||||
this->addChild(new QTreeWidgetItem( {"Column", QString::number(transaction->Column())} ));
|
||||
this->addChild(new QTreeWidgetItem( {"Address", QString("0x") + QString::number(transaction->Address(),16)} ));
|
||||
|
||||
if(!transaction->isControllerInternal())
|
||||
if(!transaction->Thread() != controllerThread)
|
||||
{
|
||||
this->addChild(new QTreeWidgetItem( {"Burstlength", QString::number(transaction->Burstlength())}));
|
||||
this->addChild(new QTreeWidgetItem( {"Thread", QString::number(transaction->Thread())}));
|
||||
|
||||
@@ -70,16 +70,13 @@ private:
|
||||
{
|
||||
public:
|
||||
static constexpr int transactionTreeItemType = 1001;
|
||||
TransactionTreeItem(QTreeWidget *parent, const std::shared_ptr<Transaction> &trans);
|
||||
TransactionTreeItem(QTreeWidget *parent, const std::shared_ptr<Transaction> &trans, unsigned int controllerThread);
|
||||
ID Id(){return id;}
|
||||
private:
|
||||
ID id;
|
||||
void AppendTimespan(QTreeWidgetItem *parent, const Timespan ×pan);
|
||||
void AppendPhase(QTreeWidgetItem *parent, const Phase &phase);
|
||||
};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // TRANSACTIONTREEWIDGET_H
|
||||
|
||||
Reference in New Issue
Block a user