fixed small bux - dont know what it was though
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?fileVersion 4.0.0?>
|
||||
|
||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1370040858">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1370040858" moduleId="org.eclipse.cdt.core.settings" name="standalone">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
@@ -85,11 +83,11 @@
|
||||
</externalSetting>
|
||||
</externalSettings>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-908217774480930773" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11">
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-64906255729110141" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
@@ -14,7 +14,7 @@
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-908217774480930773" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11">
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-64906255729110141" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
|
||||
@@ -14,10 +14,9 @@
|
||||
|
||||
namespace core {
|
||||
|
||||
DramController::DramController(IControllerWrapper& wrapper) :
|
||||
config(), state(config.numberOfBanks), commandSequenceGenerator(state), commandChecker(), commandSequenceScheduler(
|
||||
commandChecker), refreshManager(config.Timings.refreshTimings[0], bus), bus(config, state,
|
||||
allCommandChecker, wrapper)
|
||||
DramController::DramController(IControllerWrapper& wrapper):
|
||||
config(),state(config.numberOfBanks), commandSequenceGenerator(state), commandChecker(),allCommandChecker(),commandSequenceScheduler(
|
||||
commandChecker), bus(config, state, allCommandChecker, wrapper), refreshManager(config.Timings.refreshTimings[0], bus)
|
||||
{
|
||||
addCommandChecker(Activate, new ActivateChecker(config, bus));
|
||||
addCommandChecker(Precharge, new PrechargeChecker(config, bus));
|
||||
@@ -25,35 +24,44 @@ DramController::DramController(IControllerWrapper& wrapper) :
|
||||
addCommandChecker(Write, new WriteChecker(config, bus));
|
||||
}
|
||||
|
||||
|
||||
DramController::~DramController()
|
||||
{
|
||||
for (std::vector<ICommandChecker*>::iterator it = allCommandChecker.begin(); it != allCommandChecker.end();++it)
|
||||
{
|
||||
delete *it;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DramController::scheduleRefresh(sc_time time)
|
||||
{
|
||||
refreshManager.scheduleRefresh(time);
|
||||
}
|
||||
|
||||
void DramController::addCommandChecker(Command command, ICommandChecker* checker)
|
||||
{
|
||||
commandChecker[command] = checker;
|
||||
allCommandChecker.push_back(checker);
|
||||
}
|
||||
|
||||
DramController::~DramController()
|
||||
{
|
||||
std::map<Command, ICommandChecker*>::iterator it = commandChecker.begin();
|
||||
while (it != commandChecker.end())
|
||||
{
|
||||
delete it->second;
|
||||
}
|
||||
commandChecker.clear();
|
||||
}
|
||||
|
||||
void DramController::schedule(sc_time currentTime, tlm::tlm_generic_payload& externalTransaction)
|
||||
{
|
||||
bus.cleanUpBus(currentTime);
|
||||
|
||||
CommandSequence sequence = commandSequenceGenerator.generateCommandSequence(externalTransaction);
|
||||
CommandSchedule schedule = commandSequenceScheduler.prepareSchedule(currentTime, externalTransaction, sequence);
|
||||
CommandSequence sequence = commandSequenceGenerator.generateCommandSequence(
|
||||
externalTransaction);
|
||||
CommandSchedule schedule = commandSequenceScheduler.prepareSchedule(currentTime,
|
||||
externalTransaction, sequence);
|
||||
|
||||
while(refreshManager.hasCollision(schedule))
|
||||
while (refreshManager.hasCollision(schedule))
|
||||
{
|
||||
refreshManager.scheduleRefresh(currentTime);
|
||||
sequence = commandSequenceGenerator.generateCommandSequence(externalTransaction);
|
||||
schedule = commandSequenceScheduler.prepareSchedule(currentTime, externalTransaction, sequence);
|
||||
assert(schedule.getExecutionTime() < config.Timings.refreshTimings[0].tREFI);//TODO make nice
|
||||
schedule = commandSequenceScheduler.prepareSchedule(currentTime, externalTransaction,
|
||||
sequence);
|
||||
assert(schedule.getExecutionTime() < config.Timings.refreshTimings[0].tREFI); //TODO make nice
|
||||
}
|
||||
|
||||
bus.schedule(schedule);
|
||||
|
||||
@@ -25,13 +25,12 @@ class DramController
|
||||
{
|
||||
public:
|
||||
DramController(IControllerWrapper& wrapper);
|
||||
virtual ~DramController();
|
||||
virtual ~DramController() ;
|
||||
|
||||
void schedule(sc_time currentTime, tlm::tlm_generic_payload& externalTransaction);
|
||||
void scheduleRefresh(sc_time time);
|
||||
const ICommandChecker& getChecker(Command command) const;
|
||||
|
||||
Configuration config;
|
||||
RefreshManager refreshManager;
|
||||
|
||||
private:
|
||||
ControllerState state;
|
||||
@@ -41,6 +40,8 @@ private:
|
||||
CommandSequenceScheduler commandSequenceScheduler;
|
||||
//PowerDownManager powerDownManager;
|
||||
CommandBus bus;
|
||||
RefreshManager refreshManager;
|
||||
|
||||
|
||||
void addCommandChecker(Command command, ICommandChecker* checker);
|
||||
};
|
||||
|
||||
@@ -1,116 +1,125 @@
|
||||
///*
|
||||
// * CommandBus_test.cpp
|
||||
// *
|
||||
// * Created on: Mar 13, 2014
|
||||
// * Author: jonny
|
||||
// */
|
||||
//#include <gtest/gtest.h>
|
||||
//#include <gmock/gmock.h>
|
||||
//#include "testUtils.h"
|
||||
//#include "core/scheduling/ScheduledCommand.h"
|
||||
//#include "core/Configuration.h"
|
||||
//#include "core/ControllerState.h"
|
||||
//#include "core/CommandBus.h"
|
||||
//
|
||||
//using ::testing::_;
|
||||
//using ::testing::AtLeast;
|
||||
//using ::testing::Expectation;
|
||||
//using namespace testing;
|
||||
//using namespace std;
|
||||
//
|
||||
//namespace core {
|
||||
//
|
||||
//class CommandBusTest: public Test
|
||||
//{
|
||||
//public:
|
||||
// CommandBusTest() : config(), state(config.numberOfBanks), bus(config, state, checker), clk(config.Timings.clk){}
|
||||
//
|
||||
// Configuration config;
|
||||
// ControllerState state;
|
||||
// CommandBus bus;
|
||||
//
|
||||
// std::vector<ICommandChecker*> checker;
|
||||
// sc_time clk;
|
||||
//};
|
||||
//
|
||||
//TEST_F(CommandBusTest, cleanUpBusWorks)
|
||||
//{
|
||||
// shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload();
|
||||
// ScheduledCommand cmd1(*dummy.get(), Read, 2*clk, clk);
|
||||
// ScheduledCommand cmd2(*dummy.get(), Read, 3*clk, clk);
|
||||
// ScheduledCommand cmd3(*dummy.get(), Read, 5*clk, clk);
|
||||
// ScheduledCommand cmd4(*dummy.get(), Read, 7*clk, clk);
|
||||
//
|
||||
// bus.scheduleCommand(cmd1);
|
||||
// bus.scheduleCommand(cmd2);
|
||||
// bus.scheduleCommand(cmd3);
|
||||
// bus.scheduleCommand(cmd4);
|
||||
//
|
||||
// EXPECT_EQ(4, bus.getPendingBusCommands().size());
|
||||
//
|
||||
// bus.cleanUpBus(5*clk);
|
||||
//
|
||||
// EXPECT_EQ(2, bus.getPendingBusCommands().size());
|
||||
//}
|
||||
//
|
||||
//
|
||||
//TEST_F(CommandBusTest, getEarliestStartTimeWorks)
|
||||
//{
|
||||
// shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload();
|
||||
// ScheduledCommand cmd1(*dummy.get(), Read, 2*clk, clk);
|
||||
// ScheduledCommand cmd2(*dummy.get(), Read, 3*clk, clk);
|
||||
// ScheduledCommand cmd3(*dummy.get(), Read, 5*clk, clk);
|
||||
// ScheduledCommand cmd4(*dummy.get(), Read, 7*clk, clk);
|
||||
//
|
||||
// ScheduledCommand collision(*dummy.get(), Read, 3*clk, clk);
|
||||
// ScheduledCommand noCollision(*dummy.get(), Read, 6*clk, clk);
|
||||
//
|
||||
// bus.scheduleCommand(cmd1);
|
||||
// bus.scheduleCommand(cmd2);
|
||||
// bus.scheduleCommand(cmd3);
|
||||
// bus.scheduleCommand(cmd4);
|
||||
//
|
||||
// EXPECT_EQ(4*clk, bus.getEarliestStartTime(collision));
|
||||
// EXPECT_EQ(6*clk, bus.getEarliestStartTime(noCollision));
|
||||
//}
|
||||
//
|
||||
//
|
||||
//TEST_F(CommandBusTest, getESTDiesWithNotClkAligned)
|
||||
//{
|
||||
// shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload();
|
||||
// ScheduledCommand notAligned(*dummy.get(), Read, 2.5*clk, clk);
|
||||
//
|
||||
// EXPECT_DEATH(bus.getEarliestStartTime(notAligned), ".*");
|
||||
//}
|
||||
//
|
||||
//TEST_F(CommandBusTest, getLastCommandWorks)
|
||||
//{
|
||||
// shared_ptr<tlm::tlm_generic_payload> dummy0 = createDummyPayload(Thread(0), Bank(0));
|
||||
// shared_ptr<tlm::tlm_generic_payload> dummy2 = createDummyPayload(Thread(0), Bank(2));
|
||||
//
|
||||
// ScheduledCommand read0(*dummy0.get(), Read, 2*clk, clk);
|
||||
// ScheduledCommand read2(*dummy2.get(), Read, 3*clk, clk);
|
||||
// bus.scheduleCommand(read0);
|
||||
// bus.scheduleCommand(read2);
|
||||
//
|
||||
// EXPECT_EQ(read0, bus.getLastCommand(Read, read0.getBank()));
|
||||
// EXPECT_EQ(read2, bus.getLastCommand(Read, read2.getBank()));
|
||||
// EXPECT_EQ(read2.getStart(), bus.getLastCommand(Read).getStart());
|
||||
//}
|
||||
//
|
||||
//TEST_F(CommandBusTest, notYetScheduledWorks)
|
||||
//{
|
||||
// shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload(Thread(0), Bank(0));
|
||||
// ScheduledCommand read(*dummy.get(), Read, 2*clk, clk);
|
||||
//
|
||||
// EXPECT_TRUE(bus.notYetScheduled(Read));
|
||||
// bus.scheduleCommand(read);
|
||||
// EXPECT_FALSE(bus.notYetScheduled(Read));
|
||||
//}
|
||||
//
|
||||
//
|
||||
//} /* namespace controller */
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
/*
|
||||
* CommandBus_test.cpp
|
||||
*
|
||||
* Created on: Mar 13, 2014
|
||||
* Author: jonny
|
||||
*/
|
||||
#include <gtest/gtest.h>
|
||||
#include <gmock/gmock.h>
|
||||
#include "testUtils.h"
|
||||
#include "core/scheduling/ScheduledCommand.h"
|
||||
#include "core/Configuration.h"
|
||||
#include "core/ControllerState.h"
|
||||
#include "core/CommandBus.h"
|
||||
|
||||
using ::testing::_;
|
||||
using ::testing::AtLeast;
|
||||
using ::testing::Expectation;
|
||||
using namespace testing;
|
||||
using namespace std;
|
||||
|
||||
namespace core {
|
||||
|
||||
class MockWrapper: public IControllerWrapper
|
||||
{
|
||||
public:
|
||||
MOCK_METHOD3(sendCommand, void (sc_time time, tlm::tlm_generic_payload& payload, Command command));
|
||||
MOCK_METHOD2(sendTrigger, void (sc_time time, Trigger trigger));
|
||||
};
|
||||
|
||||
|
||||
class CommandBusTest: public Test
|
||||
{
|
||||
public:
|
||||
CommandBusTest() : config(), state(config.numberOfBanks), bus(config, state, checker, mockControllerWrapper), clk(config.Timings.clk){}
|
||||
|
||||
Configuration config;
|
||||
ControllerState state;
|
||||
MockWrapper mockControllerWrapper;
|
||||
CommandBus bus;
|
||||
|
||||
std::vector<ICommandChecker*> checker;
|
||||
sc_time clk;
|
||||
};
|
||||
|
||||
TEST_F(CommandBusTest, cleanUpBusWorks)
|
||||
{
|
||||
shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload();
|
||||
ScheduledCommand cmd1(*dummy.get(), Read, 2*clk, clk);
|
||||
ScheduledCommand cmd2(*dummy.get(), Read, 3*clk, clk);
|
||||
ScheduledCommand cmd3(*dummy.get(), Read, 5*clk, clk);
|
||||
ScheduledCommand cmd4(*dummy.get(), Read, 7*clk, clk);
|
||||
|
||||
bus.scheduleCommand(cmd1);
|
||||
bus.scheduleCommand(cmd2);
|
||||
bus.scheduleCommand(cmd3);
|
||||
bus.scheduleCommand(cmd4);
|
||||
|
||||
EXPECT_EQ(4, bus.getPendingBusCommands().size());
|
||||
|
||||
bus.cleanUpBus(5*clk);
|
||||
|
||||
EXPECT_EQ(2, bus.getPendingBusCommands().size());
|
||||
}
|
||||
|
||||
|
||||
TEST_F(CommandBusTest, getEarliestStartTimeWorks)
|
||||
{
|
||||
shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload();
|
||||
ScheduledCommand cmd1(*dummy.get(), Read, 2*clk, clk);
|
||||
ScheduledCommand cmd2(*dummy.get(), Read, 3*clk, clk);
|
||||
ScheduledCommand cmd3(*dummy.get(), Read, 5*clk, clk);
|
||||
ScheduledCommand cmd4(*dummy.get(), Read, 7*clk, clk);
|
||||
|
||||
ScheduledCommand collision(*dummy.get(), Read, 3*clk, clk);
|
||||
ScheduledCommand noCollision(*dummy.get(), Read, 6*clk, clk);
|
||||
|
||||
bus.scheduleCommand(cmd1);
|
||||
bus.scheduleCommand(cmd2);
|
||||
bus.scheduleCommand(cmd3);
|
||||
bus.scheduleCommand(cmd4);
|
||||
|
||||
EXPECT_EQ(4*clk, bus.getEarliestStartTime(collision));
|
||||
EXPECT_EQ(6*clk, bus.getEarliestStartTime(noCollision));
|
||||
}
|
||||
|
||||
|
||||
TEST_F(CommandBusTest, getESTDiesWithNotClkAligned)
|
||||
{
|
||||
shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload();
|
||||
ScheduledCommand notAligned(*dummy.get(), Read, 2.5*clk, clk);
|
||||
|
||||
EXPECT_DEATH(bus.getEarliestStartTime(notAligned), ".*");
|
||||
}
|
||||
|
||||
TEST_F(CommandBusTest, getLastCommandWorks)
|
||||
{
|
||||
shared_ptr<tlm::tlm_generic_payload> dummy0 = createDummyPayload(Thread(0), Bank(0));
|
||||
shared_ptr<tlm::tlm_generic_payload> dummy2 = createDummyPayload(Thread(0), Bank(2));
|
||||
|
||||
ScheduledCommand read0(*dummy0.get(), Read, 2*clk, clk);
|
||||
ScheduledCommand read2(*dummy2.get(), Read, 3*clk, clk);
|
||||
bus.scheduleCommand(read0);
|
||||
bus.scheduleCommand(read2);
|
||||
|
||||
EXPECT_EQ(read0, bus.getLastCommand(Read, read0.getBank()));
|
||||
EXPECT_EQ(read2, bus.getLastCommand(Read, read2.getBank()));
|
||||
EXPECT_EQ(read2.getStart(), bus.getLastCommand(Read).getStart());
|
||||
}
|
||||
|
||||
TEST_F(CommandBusTest, notYetScheduledWorks)
|
||||
{
|
||||
shared_ptr<tlm::tlm_generic_payload> dummy = createDummyPayload(Thread(0), Bank(0));
|
||||
ScheduledCommand read(*dummy.get(), Read, 2*clk, clk);
|
||||
|
||||
EXPECT_TRUE(bus.notYetScheduled(Read));
|
||||
bus.scheduleCommand(read);
|
||||
EXPECT_FALSE(bus.notYetScheduled(Read));
|
||||
}
|
||||
|
||||
|
||||
} /* namespace controller */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user