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).
This commit is contained in:
@@ -21,6 +21,7 @@ class MockInternalScheduler: public IInternalScheduler
|
||||
{
|
||||
public:
|
||||
MOCK_METHOD1(scheduleCommand, void (const ScheduledCommand& command));
|
||||
MOCK_METHOD2(scheduleTrigger, void (const Trigger command, sc_time time));
|
||||
};
|
||||
|
||||
TEST(RefreshManager, RefreshIsScheduledAfterStartup)
|
||||
@@ -28,12 +29,14 @@ TEST(RefreshManager, RefreshIsScheduledAfterStartup)
|
||||
Configuration config;
|
||||
MockInternalScheduler internalScheduler;
|
||||
|
||||
tlm::tlm_generic_payload trans;
|
||||
auto init = ScheduledCommand(trans, Command::Refresh, config.Timings.tREF);
|
||||
EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(2);
|
||||
EXPECT_CALL(internalScheduler, scheduleCommand(_));
|
||||
|
||||
EXPECT_CALL(internalScheduler, scheduleCommand(init));
|
||||
//first trigger is scheduled
|
||||
RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler);
|
||||
|
||||
RefreshManager manager(config, internalScheduler);
|
||||
//first refresh is scheduled, second trigger is scheduled
|
||||
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI);//call back from wrapper
|
||||
}
|
||||
|
||||
TEST(RefreshManager, FinishedRefreshTriggersNewRefresh)
|
||||
@@ -43,11 +46,14 @@ TEST(RefreshManager, FinishedRefreshTriggersNewRefresh)
|
||||
|
||||
EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(2);
|
||||
|
||||
//schedule first refresh in constructor
|
||||
RefreshManager manager(config, internalScheduler);
|
||||
//schedule second refresh in callback (end_refresh)
|
||||
tlm::tlm_generic_payload trans;
|
||||
manager.cb_refreshFinished(trans, config.Timings.tREF + config.Timings.tREFA);
|
||||
//first trigger is scheduled
|
||||
RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler);
|
||||
|
||||
//first refresh is scheduled at tREFI (wrapper triggers), second trigger is scheduled
|
||||
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI);//call back from wrapper
|
||||
|
||||
//second trigger should schedule second refresh (wrapper triggers)
|
||||
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI * 2);
|
||||
}
|
||||
|
||||
} /* namespace controller */
|
||||
|
||||
Reference in New Issue
Block a user