228 lines
7.1 KiB
Ruby
228 lines
7.1 KiB
Ruby
#!/usr/bin/ruby
|
|
|
|
class NetPort < LibRubyObject
|
|
# number of transitions a SLICC state machine can transition per
|
|
# cycle
|
|
default_param :transitions_per_cycle, Integer, 32
|
|
|
|
# buffer_size limits the size of all other buffers connecting to
|
|
# SLICC Controllers. When 0, infinite buffering is used.
|
|
default_param :buffer_size, Integer, 32
|
|
|
|
default_param :number_of_TBEs, Integer, 256
|
|
|
|
default_param :recycle_latency, Integer, 10
|
|
end
|
|
|
|
class Sequencer < IfacePort
|
|
# Maximum number of requests (including prefetches) outstanding from
|
|
# the sequencer
|
|
default_param :max_outstanding_requests, Integer, 16
|
|
|
|
# Maximum number of cycles a request is can be outstanding before
|
|
# the Sequencer declares we're in deadlock/livelock
|
|
default_param :deadlock_threshold, Integer, 500000
|
|
|
|
end
|
|
|
|
class Debug < LibRubyObject
|
|
# For debugging purposes, one can enable a trace of all the protocol
|
|
# state machine changes. Unfortunately, the code to generate the
|
|
# trace is protocol specific. To enable the code for some of the
|
|
# standard protocols,
|
|
# 1. change protocol_trace = true
|
|
# 2. enable debug in the Ruby Makefile
|
|
# 3. set start_time = 1
|
|
default_param :protocol_trace, Boolean, false
|
|
|
|
# a string for filtering debugging output (for all g_debug vars see Debug.h)
|
|
default_param :filter_string, String, "none"
|
|
|
|
# filters debugging messages based on priority (none, low, med, high)
|
|
default_param :verbosity_string, String, "none"
|
|
|
|
# filters debugging messages based on a ruby time
|
|
default_param :start_time, Integer, 1
|
|
|
|
# sends debugging messages to a output filename
|
|
default_param :output_filename, String, ""
|
|
end
|
|
|
|
class Topology < LibRubyObject
|
|
# The default link latency between all nodes (internal and external)
|
|
# in the toplogy
|
|
default_param :link_latency, Integer, 1
|
|
|
|
# the bandwidth from an external network port to it's corresponding
|
|
# internal switch
|
|
default_param :external_bw, Integer, 64
|
|
|
|
# the bandwitch between internal switches in the network
|
|
default_param :internal_bw, Integer, 16
|
|
|
|
# indicates whether the topology config will be displayed in the
|
|
# stats file
|
|
default_param :print_config, Boolean, false
|
|
end
|
|
|
|
class Network < LibRubyObject
|
|
default_param :endpoint_bandwidth, Integer, 10000
|
|
default_param :adaptive_routing, Boolean, true
|
|
default_param :number_of_virtual_networks, Integer, 10
|
|
default_param :fan_out_degree, Integer, 4
|
|
|
|
# default buffer size. Setting to 0 indicates infinite buffering
|
|
default_param :buffer_size, Integer, 0
|
|
|
|
# local memory latency ?? NetworkLinkLatency
|
|
default_param :link_latency, Integer, 1
|
|
|
|
# on chip latency
|
|
default_param :on_chip_latency, Integer, 1
|
|
|
|
default_param :control_msg_size, Integer, 8
|
|
end
|
|
|
|
class GarnetNetwork < Network
|
|
default_param :flit_size, Integer, 16
|
|
default_param :number_of_pipe_stages, Integer, 4
|
|
default_param :vcs_per_class, Integer, 4
|
|
default_param :buffer_size, Integer, 4
|
|
default_param :using_network_testing, Boolean, false
|
|
end
|
|
|
|
class Tracer < LibRubyObject
|
|
default_param :warmup_length, Integer, 1000000
|
|
end
|
|
|
|
class Profiler < LibRubyObject
|
|
default_param :hot_lines, Boolean, false
|
|
default_param :all_instructions, Boolean, false
|
|
end
|
|
|
|
class MemoryControl < LibRubyObject
|
|
|
|
default_param :mem_bus_cycle_multiplier, Integer, 10
|
|
default_param :banks_per_rank, Integer, 8
|
|
default_param :ranks_per_dimm, Integer, 2
|
|
default_param :dimms_per_channel, Integer, 2
|
|
default_param :bank_bit_0, Integer, 8
|
|
default_param :rank_bit_0, Integer, 11
|
|
default_param :dimm_bit_0, Integer, 12
|
|
default_param :bank_queue_size, Integer, 12
|
|
default_param :bank_busy_time, Integer, 11
|
|
default_param :rank_rank_delay, Integer, 1
|
|
default_param :read_write_delay, Integer, 2
|
|
default_param :basic_bus_busy_time, Integer, 2
|
|
default_param :mem_ctl_latency, Integer, 12
|
|
default_param :refresh_period, Integer, 1560
|
|
default_param :tFaw, Integer, 0
|
|
default_param :mem_random_arbitrate, Integer, 0
|
|
default_param :mem_fixed_delay, Integer, 0
|
|
|
|
end
|
|
|
|
###### Protocols #######
|
|
|
|
## MI_example protocol
|
|
|
|
class MI_example_CacheController < L1CacheController
|
|
default_param :issue_latency, Integer, 2
|
|
default_param :cache_response_latency, Integer, 12
|
|
end
|
|
|
|
class MI_example_DirectoryController < DirectoryController
|
|
default_param :directory_latency, Integer, 6
|
|
end
|
|
|
|
class MI_example_DMAController < DMAController
|
|
default_param :request_latency, Integer, 6
|
|
end
|
|
|
|
## MOESI_CMP_directory protocol
|
|
|
|
class MOESI_CMP_directory_L1CacheController < L1CacheController
|
|
default_param :request_latency, Integer, 2
|
|
end
|
|
|
|
class MOESI_CMP_directory_L2CacheController < CacheController
|
|
default_param :request_latency, Integer, 2
|
|
default_param :response_latency, Integer, 2
|
|
end
|
|
|
|
class MOESI_CMP_directory_DirectoryController < DirectoryController
|
|
default_param :directory_latency, Integer, 6
|
|
end
|
|
|
|
class MOESI_CMP_directory_DMAController < DMAController
|
|
default_param :request_latency, Integer, 14
|
|
default_param :response_latency, Integer, 14
|
|
end
|
|
|
|
class MESI_CMP_directory_L2CacheController < CacheController
|
|
default_param :l2_request_latency, Integer, 2
|
|
default_param :l2_response_latency, Integer, 2
|
|
default_param :to_L1_latency, Integer, 1
|
|
|
|
#if 0 then automatically calculated
|
|
default_param :lowest_bit, Integer, 0
|
|
default_param :highest_bit, Integer, 0
|
|
end
|
|
|
|
class MESI_CMP_directory_L1CacheController < L1CacheController
|
|
default_param :l1_request_latency, Integer, 2
|
|
default_param :l1_response_latency, Integer, 2
|
|
default_param :to_L2_latency, Integer, 1
|
|
end
|
|
|
|
|
|
class MESI_CMP_directory_DirectoryController < DirectoryController
|
|
default_param :to_mem_ctrl_latency, Integer, 1
|
|
default_param :directory_latency, Integer, 6
|
|
end
|
|
|
|
class MESI_CMP_directory_DMAController < DMAController
|
|
default_param :request_latency, Integer, 6
|
|
end
|
|
|
|
class RubySystem
|
|
|
|
# Random seed used by the simulation. If set to "rand", the seed
|
|
# will be set to the current wall clock at libruby
|
|
# initialization. Otherwise, set this to an integer.
|
|
default_param :random_seed, Object, 1234 #"rand"
|
|
|
|
# When set to true, the simulation will insert random delays on
|
|
# message enqueue times. Note that even if this is set to false,
|
|
# you can still have a non-deterministic simulation if random seed
|
|
# is set to "rand". This is because the Ruby swtiches use random
|
|
# link priority elevation
|
|
default_param :randomization, Boolean, true
|
|
|
|
# tech_nm is the device size used to calculate latency and area
|
|
# information about system components
|
|
default_param :tech_nm, Integer, 45
|
|
|
|
# default frequency for the system
|
|
default_param :freq_mhz, Integer, 3000
|
|
|
|
# the default cache block size in the system
|
|
# libruby does not currently support different block sizes
|
|
# among different caches
|
|
# Must be a power of two
|
|
default_param :block_size_bytes, Integer, 64
|
|
|
|
# The default debug object. There shouldn't be a reason to ever
|
|
# change this line. To adjust debug paramters statically, adjust
|
|
# them in the Debug class above. To adjust these fields
|
|
# dynamically, access this RubySystem object,
|
|
# e.g. RubySystem.debug.protocol_trace = true
|
|
default_param :debug, Debug, Debug.new("dbg0")
|
|
default_param :tracer, Tracer, Tracer.new("tracer0")
|
|
|
|
default_param :profiler, Profiler, Profiler.new("profiler0")
|
|
end
|
|
|
|
|
|
|