RubyDirectedTester.hh revision 11061
12115Shsul@eecs.umich.edu/* 21881Sbinkertn@umich.edu * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 31881Sbinkertn@umich.edu * Copyright (c) 2009-2010 Advanced Micro Devices, Inc. 41881Sbinkertn@umich.edu * All rights reserved. 51881Sbinkertn@umich.edu * 61881Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without 71881Sbinkertn@umich.edu * modification, are permitted provided that the following conditions are 81881Sbinkertn@umich.edu * met: redistributions of source code must retain the above copyright 91881Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer; 101881Sbinkertn@umich.edu * redistributions in binary form must reproduce the above copyright 111881Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the 121881Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution; 131881Sbinkertn@umich.edu * neither the name of the copyright holders nor the names of its 141881Sbinkertn@umich.edu * contributors may be used to endorse or promote products derived from 151881Sbinkertn@umich.edu * this software without specific prior written permission. 161881Sbinkertn@umich.edu * 171881Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 181881Sbinkertn@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 191881Sbinkertn@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 201881Sbinkertn@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 211881Sbinkertn@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 221881Sbinkertn@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 231881Sbinkertn@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 241881Sbinkertn@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 251881Sbinkertn@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 261881Sbinkertn@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 271881Sbinkertn@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 281881Sbinkertn@umich.edu */ 291881Sbinkertn@umich.edu 301881Sbinkertn@umich.edu#ifndef __CPU_DIRECTEDTEST_RUBYDIRECTEDTESTER_HH__ 312006Sbinkertn@umich.edu#define __CPU_DIRECTEDTEST_RUBYDIRECTEDTESTER_HH__ 321881Sbinkertn@umich.edu 331881Sbinkertn@umich.edu#include <iostream> 341881Sbinkertn@umich.edu#include <string> 351881Sbinkertn@umich.edu#include <vector> 361881Sbinkertn@umich.edu 372006Sbinkertn@umich.edu#include "mem/ruby/common/DataBlock.hh" 381881Sbinkertn@umich.edu#include "mem/ruby/common/SubBlock.hh" 392006Sbinkertn@umich.edu#include "mem/ruby/common/TypeDefines.hh" 402006Sbinkertn@umich.edu#include "mem/mem_object.hh" 412006Sbinkertn@umich.edu#include "mem/packet.hh" 421881Sbinkertn@umich.edu#include "params/RubyDirectedTester.hh" 431881Sbinkertn@umich.edu 441881Sbinkertn@umich.educlass DirectedGenerator; 451881Sbinkertn@umich.edu 461881Sbinkertn@umich.educlass RubyDirectedTester : public MemObject 471881Sbinkertn@umich.edu{ 481881Sbinkertn@umich.edu public: 491881Sbinkertn@umich.edu class CpuPort : public MasterPort 501881Sbinkertn@umich.edu { 511881Sbinkertn@umich.edu private: 521881Sbinkertn@umich.edu RubyDirectedTester *tester; 531881Sbinkertn@umich.edu 541881Sbinkertn@umich.edu public: 551881Sbinkertn@umich.edu CpuPort(const std::string &_name, RubyDirectedTester *_tester, 561881Sbinkertn@umich.edu PortID _id) 571881Sbinkertn@umich.edu : MasterPort(_name, _tester, _id), tester(_tester) 581881Sbinkertn@umich.edu {} 591881Sbinkertn@umich.edu 601881Sbinkertn@umich.edu protected: 611881Sbinkertn@umich.edu virtual bool recvTimingResp(PacketPtr pkt); 621881Sbinkertn@umich.edu virtual void recvReqRetry() 631881Sbinkertn@umich.edu { panic("%s does not expect a retry\n", name()); } 641881Sbinkertn@umich.edu }; 651881Sbinkertn@umich.edu 661881Sbinkertn@umich.edu typedef RubyDirectedTesterParams Params; 671881Sbinkertn@umich.edu RubyDirectedTester(const Params *p); 681881Sbinkertn@umich.edu ~RubyDirectedTester(); 691881Sbinkertn@umich.edu 701881Sbinkertn@umich.edu virtual BaseMasterPort &getMasterPort(const std::string &if_name, 711881Sbinkertn@umich.edu PortID idx = InvalidPortID); 721881Sbinkertn@umich.edu 731881Sbinkertn@umich.edu MasterPort* getCpuPort(int idx); 741881Sbinkertn@umich.edu 751881Sbinkertn@umich.edu virtual void init(); 761881Sbinkertn@umich.edu 771881Sbinkertn@umich.edu void wakeup(); 781881Sbinkertn@umich.edu 792115Shsul@eecs.umich.edu void incrementCycleCompletions() { m_requests_completed++; } 801881Sbinkertn@umich.edu 811881Sbinkertn@umich.edu void printStats(std::ostream& out) const {} 821881Sbinkertn@umich.edu void clearStats() {} 831881Sbinkertn@umich.edu void printConfig(std::ostream& out) const {} 841881Sbinkertn@umich.edu 851881Sbinkertn@umich.edu void print(std::ostream& out) const; 862115Shsul@eecs.umich.edu 871881Sbinkertn@umich.edu protected: 881881Sbinkertn@umich.edu class DirectedStartEvent : public Event 891881Sbinkertn@umich.edu { 901881Sbinkertn@umich.edu private: 911881Sbinkertn@umich.edu RubyDirectedTester *tester; 921881Sbinkertn@umich.edu 931881Sbinkertn@umich.edu public: 941881Sbinkertn@umich.edu DirectedStartEvent(RubyDirectedTester *_tester) 951881Sbinkertn@umich.edu : Event(CPU_Tick_Pri), tester(_tester) 961881Sbinkertn@umich.edu {} 971881Sbinkertn@umich.edu void process() { tester->wakeup(); } 981881Sbinkertn@umich.edu virtual const char *description() const { return "Directed tick"; } 991881Sbinkertn@umich.edu }; 1001881Sbinkertn@umich.edu 1011881Sbinkertn@umich.edu DirectedStartEvent directedStartEvent; 1021881Sbinkertn@umich.edu 1031881Sbinkertn@umich.edu private: 1041881Sbinkertn@umich.edu void hitCallback(NodeID proc, Addr addr); 1051881Sbinkertn@umich.edu 1061881Sbinkertn@umich.edu void checkForDeadlock(); 1071881Sbinkertn@umich.edu 1081881Sbinkertn@umich.edu // Private copy constructor and assignment operator 1091881Sbinkertn@umich.edu RubyDirectedTester(const RubyDirectedTester& obj); 1101881Sbinkertn@umich.edu RubyDirectedTester& operator=(const RubyDirectedTester& obj); 1111881Sbinkertn@umich.edu 1121881Sbinkertn@umich.edu uint64_t m_requests_completed; 1131881Sbinkertn@umich.edu std::vector<MasterPort*> ports; 1141881Sbinkertn@umich.edu uint64_t m_requests_to_complete; 1151881Sbinkertn@umich.edu DirectedGenerator* generator; 1161881Sbinkertn@umich.edu}; 1171881Sbinkertn@umich.edu 1181881Sbinkertn@umich.edu#endif // __CPU_DIRECTEDTEST_RUBYDIRECTEDTESTER_HH__ 1191881Sbinkertn@umich.edu