summaryrefslogtreecommitdiff
path: root/src/mem/ruby/config/MOESI_CMP_token.rb
blob: ba963dc0608698be52dd6e96842997e5de7b5fab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

require "cfg.rb"
require "util.rb"


class MOESI_CMP_token_L1CacheController < L1CacheController
  attr :icache, :dcache
  attr :num_l2_controllers
  attr :n_tokens
  def initialize(obj_name, mach_type, icache, dcache, sequencer, num_l2_controllers, n_tokens)
    super(obj_name, mach_type, [icache, dcache], sequencer)
    @icache = icache
    @dcache = dcache
    @num_l2_controllers = num_l2_controllers
    @n_tokens = n_tokens
  end
  def argv()
    num_select_bits = log_int(num_l2_controllers)
    num_block_bits = log_int(RubySystem.block_size_bytes)

    l2_select_low_bit = num_block_bits

    vec = super()
    vec += " icache " + @icache.obj_name
    vec += " dcache " + @dcache.obj_name
    vec += " l1_request_latency " + l1_request_latency.to_s
    vec += " l1_response_latency " + l1_response_latency.to_s
    vec += " l2_select_low_bit " + l2_select_low_bit.to_s
    vec += " l2_select_num_bits " + num_select_bits.to_s
    vec += " N_tokens " + n_tokens.to_s
    vec += " retry_threshold " + retry_threshold.to_s
    vec += " fixed_timeout_latency " + fixed_timeout_latency.to_s
    vec += " dynamic_timeout_enabled " + dynamic_timeout_enabled.to_s

    return vec
  end
end

class MOESI_CMP_token_L2CacheController < CacheController
  attr :cache
  attr :n_tokens
  def initialize(obj_name, mach_type, cache, n_tokens)
    super(obj_name, mach_type, [cache])
    @cache = cache
    @n_tokens = n_tokens
  end
  def argv()
    vec = super()
    vec += " cache " + @cache.obj_name
    vec += " l2_request_latency " + l2_request_latency.to_s
    vec += " l2_response_latency " + l2_response_latency.to_s
    vec += " N_tokens " + n_tokens.to_s
    vec += " filtering_enabled " + filtering_enabled.to_s
    return vec
  end
end


class MOESI_CMP_token_DirectoryController < DirectoryController
  attr :num_l2_controllers
  def initialize(obj_name, mach_type, directory, memory_control, num_l2_controllers)
    super(obj_name, mach_type, directory, memory_control)
    @num_l2_controllers = num_l2_controllers
  end
  def argv()
    num_select_bits = log_int(num_l2_controllers)
    num_block_bits = log_int(RubySystem.block_size_bytes)

    l2_select_low_bit = num_block_bits

    vec = super()
    vec += " directory_latency "+directory_latency.to_s
    vec += " l2_select_low_bit " + l2_select_low_bit.to_s
    vec += " l2_select_num_bits " + num_select_bits.to_s
    vec += " distributed_persistent "+distributed_persistent.to_s
    vec += " fixed_timeout_latency " + fixed_timeout_latency.to_s
    return vec
  end

end

class MOESI_CMP_token_DMAController < DMAController
  def initialize(obj_name, mach_type, dma_sequencer)
    super(obj_name, mach_type, dma_sequencer)
  end
  def argv()
    vec = super
    vec += " request_latency "+request_latency.to_s
    vec += " response_latency "+response_latency.to_s
    return vec
  end
end