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