69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
#include <gtest/gtest.h>
|
|
#include <vector>
|
|
#include <tlm.h>
|
|
#include "core/scheduling/CommandSequenceGenerator.h"
|
|
#include "testUtils.h"
|
|
|
|
using namespace core;
|
|
|
|
using namespace std;
|
|
|
|
constexpr unsigned int numberOfBanks = 8;
|
|
|
|
constexpr tlm::tlm_command READ = tlm::TLM_READ_COMMAND;
|
|
constexpr tlm::tlm_command WRITE = tlm::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 ({Read});
|
|
vector<Command> expected_write ({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 ({Precharge, Activate, Read});
|
|
vector<Command> expected_write ({Precharge, Activate, 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 ({Activate, Read});
|
|
vector<Command> expected_write ({Activate, Write});
|
|
|
|
EXPECT_EQ(expected_read, generator.generateCommandSequence(miss_read.get()));
|
|
EXPECT_EQ(expected_write, generator.generateCommandSequence(miss_write.get()));
|
|
}
|