#include #include #include #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 expected_read ({Read}); vector 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 expected_read ({Precharge, Activate, Read}); vector 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 expected_read ({Activate, Read}); vector expected_write ({Activate, Write}); EXPECT_EQ(expected_read, generator.generateCommandSequence(miss_read.get())); EXPECT_EQ(expected_write, generator.generateCommandSequence(miss_write.get())); }