random_gen.hh (12804:f47e75dce5c6) random_gen.hh (12811:269967d5b4e4)
1/*
1/*
2 * Copyright (c) 2012-2013, 2017 ARM Limited
2 * Copyright (c) 2012-2013, 2017-2018 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed here under. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 43 unchanged lines hidden (view full) ---

54#include "base_gen.hh"
55#include "mem/packet.hh"
56
57/**
58 * The random generator is similar to the linear one, but does
59 * not generate sequential addresses. Instead it randomly
60 * picks an address in the range, aligned to the block size.
61 */
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed here under. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 43 unchanged lines hidden (view full) ---

54#include "base_gen.hh"
55#include "mem/packet.hh"
56
57/**
58 * The random generator is similar to the linear one, but does
59 * not generate sequential addresses. Instead it randomly
60 * picks an address in the range, aligned to the block size.
61 */
62class RandomGen : public BaseGen
62class RandomGen : public StochasticGen
63{
64
65 public:
66
67 /**
68 * Create a random address sequence generator. Set
69 * min_period == max_period for a fixed inter-transaction
70 * time.
71 *
63{
64
65 public:
66
67 /**
68 * Create a random address sequence generator. Set
69 * min_period == max_period for a fixed inter-transaction
70 * time.
71 *
72 * @param _name Name to use for status and debug
73 * @param master_id MasterID set on each request
72 * @param gen Traffic generator owning this sequence generator
74 * @param _duration duration of this state before transitioning
75 * @param start_addr Start address
76 * @param end_addr End address
77 * @param _blocksize Size used for transactions injected
78 * @param min_period Lower limit of random inter-transaction time
79 * @param max_period Upper limit of random inter-transaction time
80 * @param read_percent Percent of transactions that are reads
81 * @param data_limit Upper limit on how much data to read/write
82 */
73 * @param _duration duration of this state before transitioning
74 * @param start_addr Start address
75 * @param end_addr End address
76 * @param _blocksize Size used for transactions injected
77 * @param min_period Lower limit of random inter-transaction time
78 * @param max_period Upper limit of random inter-transaction time
79 * @param read_percent Percent of transactions that are reads
80 * @param data_limit Upper limit on how much data to read/write
81 */
83 RandomGen(const std::string& _name, MasterID master_id, Tick _duration,
82 RandomGen(BaseTrafficGen &gen, Tick _duration,
84 Addr start_addr, Addr end_addr, Addr _blocksize,
85 Tick min_period, Tick max_period,
86 uint8_t read_percent, Addr data_limit)
83 Addr start_addr, Addr end_addr, Addr _blocksize,
84 Tick min_period, Tick max_period,
85 uint8_t read_percent, Addr data_limit)
87 : BaseGen(_name, master_id, _duration),
88 startAddr(start_addr), endAddr(end_addr),
89 blocksize(_blocksize), minPeriod(min_period),
90 maxPeriod(max_period), readPercent(read_percent),
91 dataLimit(data_limit), dataManipulated(0)
86 : StochasticGen(gen, _duration, start_addr, end_addr, _blocksize,
87 min_period, max_period, read_percent, data_limit),
88 dataManipulated(0)
92 { }
93
94 void enter();
95
96 PacketPtr getNextPacket();
97
98 Tick nextPacketTick(bool elastic, Tick delay) const;
99
100 protected:
89 { }
90
91 void enter();
92
93 PacketPtr getNextPacket();
94
95 Tick nextPacketTick(bool elastic, Tick delay) const;
96
97 protected:
101
102 /** Start of address range */
103 const Addr startAddr;
104
105 /** End of address range */
106 const Addr endAddr;
107
108 /** Block size */
109 const Addr blocksize;
110
111 /** Request generation period */
112 const Tick minPeriod;
113 const Tick maxPeriod;
114
115 /**
98 /**
116 * Percent of generated transactions that should be reads
117 */
118 const uint8_t readPercent;
119
120 /** Maximum amount of data to manipulate */
121 const Addr dataLimit;
122
123 /**
124 * Counter to determine the amount of data
125 * manipulated. Used to determine if we should continue
126 * generating requests.
127 */
128 Addr dataManipulated;
129};
130
131#endif
99 * Counter to determine the amount of data
100 * manipulated. Used to determine if we should continue
101 * generating requests.
102 */
103 Addr dataManipulated;
104};
105
106#endif