random_gen.hh revision 12396:3d04ea44fafb
18914Sandreas.hansson@arm.com/* 210713Sandreas.hansson@arm.com * Copyright (c) 2012-2013, 2017 ARM Limited 38914Sandreas.hansson@arm.com * All rights reserved 48914Sandreas.hansson@arm.com * 58914Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 68914Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 78914Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 88914Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 98914Sandreas.hansson@arm.com * licensed here under. You may use the software subject to the license 108914Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 118914Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 128914Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 138914Sandreas.hansson@arm.com * 148914Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 158914Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 168914Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 178914Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 188914Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 198914Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 208914Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 218914Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 228914Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 238914Sandreas.hansson@arm.com * this software without specific prior written permission. 248914Sandreas.hansson@arm.com * 258914Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 268914Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 278914Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 288914Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 298914Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 308914Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 318914Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 328914Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 338914Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 348914Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 358914Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 368914Sandreas.hansson@arm.com * 378914Sandreas.hansson@arm.com * Authors: Thomas Grass 388914Sandreas.hansson@arm.com * Andreas Hansson 398914Sandreas.hansson@arm.com * Sascha Bischoff 408914Sandreas.hansson@arm.com * Neha Agarwal 418914Sandreas.hansson@arm.com */ 428914Sandreas.hansson@arm.com 438914Sandreas.hansson@arm.com/** 448914Sandreas.hansson@arm.com * @file 458914Sandreas.hansson@arm.com * Declaration of the random generator that randomly selects 468914Sandreas.hansson@arm.com * addresses within a range. 478914Sandreas.hansson@arm.com */ 488914Sandreas.hansson@arm.com 498914Sandreas.hansson@arm.com#ifndef __CPU_TRAFFIC_GEN_RANDOM_GEN_HH__ 508914Sandreas.hansson@arm.com#define __CPU_TRAFFIC_GEN_RANDOM_GEN_HH__ 518914Sandreas.hansson@arm.com 528914Sandreas.hansson@arm.com#include "base/bitfield.hh" 538914Sandreas.hansson@arm.com#include "base/intmath.hh" 548914Sandreas.hansson@arm.com#include "base_gen.hh" 558914Sandreas.hansson@arm.com#include "mem/packet.hh" 568914Sandreas.hansson@arm.com#include "proto/protoio.hh" 578914Sandreas.hansson@arm.com 588914Sandreas.hansson@arm.com/** 598922Swilliam.wang@arm.com * The random generator is similar to the linear one, but does 608914Sandreas.hansson@arm.com * not generate sequential addresses. Instead it randomly 618914Sandreas.hansson@arm.com * picks an address in the range, aligned to the block size. 628914Sandreas.hansson@arm.com */ 638914Sandreas.hansson@arm.comclass RandomGen : public BaseGen 6410713Sandreas.hansson@arm.com{ 6510713Sandreas.hansson@arm.com 668914Sandreas.hansson@arm.com public: 6710713Sandreas.hansson@arm.com 688914Sandreas.hansson@arm.com /** 698922Swilliam.wang@arm.com * Create a random address sequence generator. Set 708922Swilliam.wang@arm.com * min_period == max_period for a fixed inter-transaction 718922Swilliam.wang@arm.com * time. 728922Swilliam.wang@arm.com * 738922Swilliam.wang@arm.com * @param _name Name to use for status and debug 748922Swilliam.wang@arm.com * @param master_id MasterID set on each request 758922Swilliam.wang@arm.com * @param _duration duration of this state before transitioning 768922Swilliam.wang@arm.com * @param start_addr Start address 778922Swilliam.wang@arm.com * @param end_addr End address 788922Swilliam.wang@arm.com * @param _blocksize Size used for transactions injected 7910713Sandreas.hansson@arm.com * @param min_period Lower limit of random inter-transaction time 8010713Sandreas.hansson@arm.com * @param max_period Upper limit of random inter-transaction time 818922Swilliam.wang@arm.com * @param read_percent Percent of transactions that are reads 828922Swilliam.wang@arm.com * @param data_limit Upper limit on how much data to read/write 838922Swilliam.wang@arm.com */ 848922Swilliam.wang@arm.com RandomGen(const std::string& _name, MasterID master_id, Tick _duration, 859163Sandreas.hansson@arm.com Addr start_addr, Addr end_addr, Addr _blocksize, 869163Sandreas.hansson@arm.com Tick min_period, Tick max_period, 879163Sandreas.hansson@arm.com uint8_t read_percent, Addr data_limit) 889163Sandreas.hansson@arm.com : BaseGen(_name, master_id, _duration), 899163Sandreas.hansson@arm.com startAddr(start_addr), endAddr(end_addr), 909163Sandreas.hansson@arm.com blocksize(_blocksize), minPeriod(min_period), 919163Sandreas.hansson@arm.com maxPeriod(max_period), readPercent(read_percent), 9210713Sandreas.hansson@arm.com dataLimit(data_limit), dataManipulated(0) 939163Sandreas.hansson@arm.com { } 948922Swilliam.wang@arm.com 958922Swilliam.wang@arm.com void enter(); 9610713Sandreas.hansson@arm.com 9710713Sandreas.hansson@arm.com PacketPtr getNextPacket(); 988922Swilliam.wang@arm.com 9910713Sandreas.hansson@arm.com Tick nextPacketTick(bool elastic, Tick delay) const; 1008922Swilliam.wang@arm.com 1018922Swilliam.wang@arm.com protected: 10210713Sandreas.hansson@arm.com 10310713Sandreas.hansson@arm.com /** Start of address range */ 10410713Sandreas.hansson@arm.com const Addr startAddr; 10510713Sandreas.hansson@arm.com 10610713Sandreas.hansson@arm.com /** End of address range */ 10710713Sandreas.hansson@arm.com const Addr endAddr; 10810713Sandreas.hansson@arm.com 1098922Swilliam.wang@arm.com /** Block size */ 1108922Swilliam.wang@arm.com const Addr blocksize; 1118922Swilliam.wang@arm.com 1128922Swilliam.wang@arm.com /** Request generation period */ 1138922Swilliam.wang@arm.com const Tick minPeriod; 11410713Sandreas.hansson@arm.com const Tick maxPeriod; 11510713Sandreas.hansson@arm.com 1168922Swilliam.wang@arm.com /** 11710713Sandreas.hansson@arm.com * Percent of generated transactions that should be reads 11810713Sandreas.hansson@arm.com */ 11910713Sandreas.hansson@arm.com const uint8_t readPercent; 12010713Sandreas.hansson@arm.com 12110713Sandreas.hansson@arm.com /** Maximum amount of data to manipulate */ 12210713Sandreas.hansson@arm.com const Addr dataLimit; 1238914Sandreas.hansson@arm.com 1248914Sandreas.hansson@arm.com /** 1258914Sandreas.hansson@arm.com * Counter to determine the amount of data 1268914Sandreas.hansson@arm.com * manipulated. Used to determine if we should continue 1278914Sandreas.hansson@arm.com * generating requests. 12810713Sandreas.hansson@arm.com */ 12910713Sandreas.hansson@arm.com Addr dataManipulated; 1308914Sandreas.hansson@arm.com}; 1318914Sandreas.hansson@arm.com 1328914Sandreas.hansson@arm.com#endif 1338922Swilliam.wang@arm.com