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