GarnetSyntheticTraffic.hh revision 13799
15612Sgblack@eecs.umich.edu/* 27087Snate@binkert.org * Copyright (c) 2016 Georgia Institute of Technology 37087Snate@binkert.org * All rights reserved. 47087Snate@binkert.org * 57087Snate@binkert.org * Redistribution and use in source and binary forms, with or without 67087Snate@binkert.org * modification, are permitted provided that the following conditions are 77087Snate@binkert.org * met: redistributions of source code must retain the above copyright 87087Snate@binkert.org * notice, this list of conditions and the following disclaimer; 97087Snate@binkert.org * redistributions in binary form must reproduce the above copyright 107087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 117087Snate@binkert.org * documentation and/or other materials provided with the distribution; 127087Snate@binkert.org * neither the name of the copyright holders nor the names of its 137087Snate@binkert.org * contributors may be used to endorse or promote products derived from 145612Sgblack@eecs.umich.edu * this software without specific prior written permission. 155612Sgblack@eecs.umich.edu * 165612Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175612Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185612Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195612Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205612Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215612Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225612Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235612Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245612Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255612Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265612Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275612Sgblack@eecs.umich.edu * 285612Sgblack@eecs.umich.edu * Authors: Tushar Krishna 295612Sgblack@eecs.umich.edu */ 305612Sgblack@eecs.umich.edu 315612Sgblack@eecs.umich.edu#ifndef __CPU_GARNET_SYNTHETIC_TRAFFIC_HH__ 325612Sgblack@eecs.umich.edu#define __CPU_GARNET_SYNTHETIC_TRAFFIC_HH__ 335612Sgblack@eecs.umich.edu 345612Sgblack@eecs.umich.edu#include <set> 355612Sgblack@eecs.umich.edu 365612Sgblack@eecs.umich.edu#include "base/statistics.hh" 375612Sgblack@eecs.umich.edu#include "mem/mem_object.hh" 385612Sgblack@eecs.umich.edu#include "mem/port.hh" 395612Sgblack@eecs.umich.edu#include "params/GarnetSyntheticTraffic.hh" 405612Sgblack@eecs.umich.edu#include "sim/eventq.hh" 415612Sgblack@eecs.umich.edu#include "sim/sim_exit.hh" 425612Sgblack@eecs.umich.edu#include "sim/sim_object.hh" 435612Sgblack@eecs.umich.edu#include "sim/stats.hh" 445612Sgblack@eecs.umich.edu 456216Snate@binkert.orgenum TrafficType {BIT_COMPLEMENT_ = 0, 468706Sandreas.hansson@arm.com BIT_REVERSE_ = 1, 475615Sgblack@eecs.umich.edu BIT_ROTATION_ = 2, 485615Sgblack@eecs.umich.edu NEIGHBOR_ = 3, 495615Sgblack@eecs.umich.edu SHUFFLE_ = 4, 505612Sgblack@eecs.umich.edu TORNADO_ = 5, 515612Sgblack@eecs.umich.edu TRANSPOSE_ = 6, 525615Sgblack@eecs.umich.edu UNIFORM_RANDOM_ = 7, 535615Sgblack@eecs.umich.edu NUM_TRAFFIC_PATTERNS_}; 545612Sgblack@eecs.umich.edu 555612Sgblack@eecs.umich.educlass Packet; 565612Sgblack@eecs.umich.educlass GarnetSyntheticTraffic : public MemObject 575612Sgblack@eecs.umich.edu{ 585612Sgblack@eecs.umich.edu public: 595612Sgblack@eecs.umich.edu typedef GarnetSyntheticTrafficParams Params; 605612Sgblack@eecs.umich.edu GarnetSyntheticTraffic(const Params *p); 615612Sgblack@eecs.umich.edu 625612Sgblack@eecs.umich.edu void init() override; 635612Sgblack@eecs.umich.edu 645615Sgblack@eecs.umich.edu // main simulation loop (one cycle) 655615Sgblack@eecs.umich.edu void tick(); 665615Sgblack@eecs.umich.edu 675615Sgblack@eecs.umich.edu Port &getPort(const std::string &if_name, 685615Sgblack@eecs.umich.edu PortID idx=InvalidPortID) override; 695615Sgblack@eecs.umich.edu 705615Sgblack@eecs.umich.edu /** 715615Sgblack@eecs.umich.edu * Print state of address in memory system via PrintReq (for 725615Sgblack@eecs.umich.edu * debugging). 735615Sgblack@eecs.umich.edu */ 745615Sgblack@eecs.umich.edu void printAddr(Addr a); 755615Sgblack@eecs.umich.edu 765615Sgblack@eecs.umich.edu protected: 778706Sandreas.hansson@arm.com EventFunctionWrapper tickEvent; 785615Sgblack@eecs.umich.edu 798706Sandreas.hansson@arm.com class CpuPort : public MasterPort 805615Sgblack@eecs.umich.edu { 815615Sgblack@eecs.umich.edu GarnetSyntheticTraffic *tester; 828706Sandreas.hansson@arm.com 835615Sgblack@eecs.umich.edu public: 845615Sgblack@eecs.umich.edu 858706Sandreas.hansson@arm.com CpuPort(const std::string &_name, GarnetSyntheticTraffic *_tester) 865615Sgblack@eecs.umich.edu : MasterPort(_name, _tester), tester(_tester) 875615Sgblack@eecs.umich.edu { } 885615Sgblack@eecs.umich.edu 895615Sgblack@eecs.umich.edu protected: 905615Sgblack@eecs.umich.edu 915615Sgblack@eecs.umich.edu virtual bool recvTimingResp(PacketPtr pkt); 925615Sgblack@eecs.umich.edu 935615Sgblack@eecs.umich.edu virtual void recvReqRetry(); 945615Sgblack@eecs.umich.edu }; 955615Sgblack@eecs.umich.edu 968706Sandreas.hansson@arm.com CpuPort cachePort; 975615Sgblack@eecs.umich.edu 985615Sgblack@eecs.umich.edu class GarnetSyntheticTrafficSenderState : public Packet::SenderState 995615Sgblack@eecs.umich.edu { 1005615Sgblack@eecs.umich.edu public: 1015615Sgblack@eecs.umich.edu /** Constructor. */ 1025615Sgblack@eecs.umich.edu GarnetSyntheticTrafficSenderState(uint8_t *_data) 1035615Sgblack@eecs.umich.edu : data(_data) 1045615Sgblack@eecs.umich.edu { } 1055615Sgblack@eecs.umich.edu 1068706Sandreas.hansson@arm.com // Hold onto data pointer 1075615Sgblack@eecs.umich.edu uint8_t *data; 1085615Sgblack@eecs.umich.edu }; 1095615Sgblack@eecs.umich.edu 1108706Sandreas.hansson@arm.com PacketPtr retryPkt; 1115615Sgblack@eecs.umich.edu unsigned size; 1125615Sgblack@eecs.umich.edu int id; 1135615Sgblack@eecs.umich.edu 1145615Sgblack@eecs.umich.edu std::map<std::string, TrafficType> trafficStringToEnum; 1158706Sandreas.hansson@arm.com 1165615Sgblack@eecs.umich.edu unsigned blockSizeBits; 1175615Sgblack@eecs.umich.edu 1185615Sgblack@eecs.umich.edu Tick noResponseCycles; 1195615Sgblack@eecs.umich.edu 1205615Sgblack@eecs.umich.edu int numDestinations; 1215615Sgblack@eecs.umich.edu Tick simCycles; 1225615Sgblack@eecs.umich.edu int numPacketsMax; 1235615Sgblack@eecs.umich.edu int numPacketsSent; 1245615Sgblack@eecs.umich.edu int singleSender; 1255615Sgblack@eecs.umich.edu int singleDest; 1265615Sgblack@eecs.umich.edu 1275615Sgblack@eecs.umich.edu std::string trafficType; // string 1285615Sgblack@eecs.umich.edu TrafficType traffic; // enum from string 1295615Sgblack@eecs.umich.edu double injRate; 1305615Sgblack@eecs.umich.edu int injVnet; 1315615Sgblack@eecs.umich.edu int precision; 1325615Sgblack@eecs.umich.edu 1335615Sgblack@eecs.umich.edu const Cycles responseLimit; 1345615Sgblack@eecs.umich.edu 1355615Sgblack@eecs.umich.edu MasterID masterId; 1365615Sgblack@eecs.umich.edu 1375615Sgblack@eecs.umich.edu void completeRequest(PacketPtr pkt); 1385615Sgblack@eecs.umich.edu 1395615Sgblack@eecs.umich.edu void generatePkt(); 1405615Sgblack@eecs.umich.edu void sendPkt(PacketPtr pkt); 1415615Sgblack@eecs.umich.edu void initTrafficType(); 1425615Sgblack@eecs.umich.edu 1435615Sgblack@eecs.umich.edu void doRetry(); 1445615Sgblack@eecs.umich.edu 1455615Sgblack@eecs.umich.edu friend class MemCompleteEvent; 1465615Sgblack@eecs.umich.edu}; 1475615Sgblack@eecs.umich.edu 1485615Sgblack@eecs.umich.edu#endif // __CPU_GARNET_SYNTHETIC_TRAFFIC_HH__ 1495615Sgblack@eecs.umich.edu