RubyDirectedTester.hh revision 8854
12391SN/A/* 212218Snikos.nikoleris@arm.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 37733SN/A * Copyright (c) 2009-2010 Advanced Micro Devices, Inc. 47733SN/A * All rights reserved. 57733SN/A * 67733SN/A * Redistribution and use in source and binary forms, with or without 77733SN/A * modification, are permitted provided that the following conditions are 87733SN/A * met: redistributions of source code must retain the above copyright 97733SN/A * notice, this list of conditions and the following disclaimer; 107733SN/A * redistributions in binary form must reproduce the above copyright 117733SN/A * notice, this list of conditions and the following disclaimer in the 127733SN/A * documentation and/or other materials provided with the distribution; 137733SN/A * neither the name of the copyright holders nor the names of its 142391SN/A * contributors may be used to endorse or promote products derived from 152391SN/A * this software without specific prior written permission. 162391SN/A * 172391SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 182391SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 192391SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 202391SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 212391SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 222391SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 232391SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 242391SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 252391SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 262391SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 272391SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282391SN/A */ 292391SN/A 302391SN/A#ifndef __CPU_DIRECTEDTEST_RUBYDIRECTEDTESTER_HH__ 312391SN/A#define __CPU_DIRECTEDTEST_RUBYDIRECTEDTESTER_HH__ 322391SN/A 332391SN/A#include <iostream> 342391SN/A#include <string> 352391SN/A#include <vector> 362391SN/A 372391SN/A#include "mem/ruby/common/DataBlock.hh" 382391SN/A#include "mem/ruby/common/Global.hh" 392665SN/A#include "mem/ruby/common/SubBlock.hh" 402665SN/A#include "mem/ruby/system/RubyPort.hh" 412914SN/A#include "mem/mem_object.hh" 428931Sandreas.hansson@arm.com#include "mem/packet.hh" 432391SN/A#include "params/RubyDirectedTester.hh" 442391SN/A 4511793Sbrandon.potter@amd.comclass DirectedGenerator; 4611793Sbrandon.potter@amd.com 4710466Sandreas.hansson@arm.comclass RubyDirectedTester : public MemObject 4810466Sandreas.hansson@arm.com{ 4912218Snikos.nikoleris@arm.com public: 5010102Sali.saidi@arm.com class CpuPort : public Port 5110102Sali.saidi@arm.com { 528232SN/A private: 538232SN/A RubyDirectedTester *tester; 543879SN/A 559053Sdam.sunwoo@arm.com public: 562394SN/A CpuPort(const std::string &_name, RubyDirectedTester *_tester, 572391SN/A uint32_t _idx) 582391SN/A : Port(_name, _tester), tester(_tester), idx(_idx) 598931Sandreas.hansson@arm.com {} 608931Sandreas.hansson@arm.com 619053Sdam.sunwoo@arm.com uint32_t idx; 6211614Sdavid.j.hashe@gmail.com 632391SN/A protected: 6410466Sandreas.hansson@arm.com virtual bool recvTiming(PacketPtr pkt); 6510466Sandreas.hansson@arm.com virtual Tick recvAtomic(PacketPtr pkt); 6610466Sandreas.hansson@arm.com virtual void recvFunctional(PacketPtr pkt) { } 6710466Sandreas.hansson@arm.com virtual void recvRangeChange() { } 6810466Sandreas.hansson@arm.com }; 6910466Sandreas.hansson@arm.com 7010466Sandreas.hansson@arm.com typedef RubyDirectedTesterParams Params; 7110466Sandreas.hansson@arm.com RubyDirectedTester(const Params *p); 722391SN/A ~RubyDirectedTester(); 732391SN/A 742391SN/A virtual Port *getPort(const std::string &if_name, int idx = -1); 759293Sandreas.hansson@arm.com 769293Sandreas.hansson@arm.com Port* getCpuPort(int idx); 772391SN/A 789293Sandreas.hansson@arm.com virtual void init(); 792391SN/A 802391SN/A void wakeup(); 818719SN/A 828931Sandreas.hansson@arm.com void incrementCycleCompletions() { m_requests_completed++; } 838719SN/A 8411522Sstephan.diestelhorst@arm.com void printStats(std::ostream& out) const {} 8511522Sstephan.diestelhorst@arm.com void clearStats() {} 868719SN/A void printConfig(std::ostream& out) const {} 878719SN/A 889053Sdam.sunwoo@arm.com void print(std::ostream& out) const; 899053Sdam.sunwoo@arm.com 908719SN/A protected: 919053Sdam.sunwoo@arm.com class DirectedStartEvent : public Event 928719SN/A { 938719SN/A private: 949053Sdam.sunwoo@arm.com RubyDirectedTester *tester; 958719SN/A 969053Sdam.sunwoo@arm.com public: 979053Sdam.sunwoo@arm.com DirectedStartEvent(RubyDirectedTester *_tester) 989053Sdam.sunwoo@arm.com : Event(CPU_Tick_Pri), tester(_tester) 998719SN/A {} 1009053Sdam.sunwoo@arm.com void process() { tester->wakeup(); } 1018719SN/A virtual const char *description() const { return "Directed tick"; } 1028719SN/A }; 1039053Sdam.sunwoo@arm.com 1048719SN/A DirectedStartEvent directedStartEvent; 1059053Sdam.sunwoo@arm.com 1069053Sdam.sunwoo@arm.com private: 1079053Sdam.sunwoo@arm.com void hitCallback(NodeID proc, Addr addr); 1088719SN/A 1099053Sdam.sunwoo@arm.com void checkForDeadlock(); 1108719SN/A 1118719SN/A // Private copy constructor and assignment operator 1129053Sdam.sunwoo@arm.com RubyDirectedTester(const RubyDirectedTester& obj); 1138719SN/A RubyDirectedTester& operator=(const RubyDirectedTester& obj); 1149053Sdam.sunwoo@arm.com 1159053Sdam.sunwoo@arm.com uint64 m_requests_completed; 1169053Sdam.sunwoo@arm.com std::vector<CpuPort*> ports; 1178719SN/A uint64 m_requests_to_complete; 1189053Sdam.sunwoo@arm.com DirectedGenerator* generator; 1198719SN/A}; 1208719SN/A 1219053Sdam.sunwoo@arm.com#endif // __CPU_DIRECTEDTEST_RUBYDIRECTEDTESTER_HH__ 1228719SN/A