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:
fzeder
2018-04-05 16:28:33 +02:00
committed by GitHub Enterprise
20 changed files with 35 additions and 35 deletions

View File

@@ -25,7 +25,8 @@ CREATE TABLE GeneralInfo(
Traces TEXT,
WindowSize INTEGER,
FlexibleRefresh INTEGER,
MaxRefBurst INTEGER
MaxRefBurst INTEGER,
ControllerThread INTEGER
);
CREATE TABLE Power(

View File

@@ -40,7 +40,6 @@
#include <systemc.h>
#include <string>
#include <set>
#include "Utils.h"
class DebugManager

View File

@@ -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);
}

View File

@@ -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!!!
}

View File

@@ -47,7 +47,6 @@
#include "dramExtension.h"
#include "third_party/tinyxml2/tinyxml2.h"
#define DEF_SINGLETON( NAME ) \
public: \
static NAME& getInstance() \

View File

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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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");

View File

@@ -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();

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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)
{
}

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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();

View File

@@ -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())}));

View File

@@ -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 &timespan);
void AppendPhase(QTreeWidgetItem *parent, const Phase &phase);
};
};
#endif // TRANSACTIONTREEWIDGET_H