# Copyright (c) 2015, University of Kaiserslautern
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright notice,
#    this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


# This format supports comments using the '#' symbol as the leading
# character of the line
#
# The file format contains [STATE]+ [INIT] [TRANSITION]+ in any order,
# where the states are the nodes in the graph, init describes what
# state to start in, and transition describes the edges of the graph.
#
# STATE <id> <duration (ticks)> <type>
#
# State IDLE idles
#
# States LINEAR and RANDOM have additional <percent reads> <start addr>
# <end addr> <access size (bytes)> <min period (ticks)> <max period (ticks)>
# <data limit (bytes)>
#
# State TRACE plays back a pre-recorded trace once
#
# Addresses are expressed as decimal numbers. The period in the linear
# and random state is from a uniform random distribution over the
# interval. If a specific value is desired, then the min and max can
# be set to the same value.
STATE 0 1000000 LINEAR 50 0 256 4 5000 5000 64
INIT 0
TRANSITION 0 0 1
