Files
DRAMSys/DRAM/testing/CommandGenerator_test.cpp
Janik Schlemminger 4dbc9b8a78 New RefreshManager logic. A refresh trigger is introduced, which is
scheduled in the future to trigger a schedule of a refresh command. This
allows for more sophisticated refresh logics in the futurer
(postponing).
2014-03-12 05:12:41 -07:00

68 lines
2.3 KiB
C++

#include <gtest/gtest.h>
#include "core/scheduling/CommandSequenceGenerator.h"
#include "testUtils.h"
#include <vector>
using namespace controller;
using namespace common;
using namespace std;
constexpr unsigned int numberOfBanks = 8;
constexpr tlm::tlm_command READ = tlm::tlm_command::TLM_READ_COMMAND;
constexpr tlm::tlm_command WRITE = tlm::tlm_command::TLM_WRITE_COMMAND;
TEST(CommandSequenceGenerator, ReadAndWriteWithRowHit)
{
ControllerState state(numberOfBanks);
CommandSequenceGenerator generator(state);
state.bankStates.openRowInRowBuffer(Bank(0), Row(3));
auto hit_read = createDummyPayload(Thread(0), Bank(0), Row(3), Column(1), READ);
auto hit_write = createDummyPayload(Thread(0), Bank(0), Row(3), Column(1), WRITE);
vector<Command> expected_read ({Command::Read});
vector<Command> expected_write ({Command::Write});
EXPECT_EQ(expected_read, generator.generateCommandSequence(hit_read.get()));
EXPECT_EQ(expected_write, generator.generateCommandSequence(hit_write.get()));
}
TEST(CommandSequenceGenerator, ReadAndWriteWithRowMiss)
{
ControllerState state(numberOfBanks);
CommandSequenceGenerator generator(state);
state.bankStates.openRowInRowBuffer(Bank(0), Row(3));
auto miss_read = createDummyPayload(Thread(0), Bank(0), Row(4), Column(1), READ);
auto miss_write = createDummyPayload(Thread(0), Bank(0), Row(4), Column(1), WRITE);
vector<Command> expected_read ({Command::Precharge, Command::Activate, Command::Read});
vector<Command> expected_write ({Command::Precharge, Command::Activate, Command::Write});
EXPECT_EQ(expected_read, generator.generateCommandSequence(miss_read.get()));
EXPECT_EQ(expected_write, generator.generateCommandSequence(miss_write.get()));
}
TEST(CommandSequenceGenerator, ReadAndWriteWithBankMiss)
{
ControllerState state(numberOfBanks);
CommandSequenceGenerator generator(state);
state.bankStates.openRowInRowBuffer(Bank(0), Row(3));
auto miss_read = createDummyPayload(Thread(0), Bank(1), Row(4), Column(1), READ);
auto miss_write = createDummyPayload(Thread(0), Bank(1), Row(4), Column(1), WRITE);
vector<Command> expected_read ({Command::Activate, Command::Read});
vector<Command> expected_write ({Command::Activate, Command::Write});
EXPECT_EQ(expected_read, generator.generateCommandSequence(miss_read.get()));
EXPECT_EQ(expected_write, generator.generateCommandSequence(miss_write.get()));
}