#!/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, 11 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 :request_latency, Integer, 2 default_param :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 used mainly to debug protocols by forcing # really strange interleavings and should not be used for # performance runs. default_param :randomization, Boolean, false # 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