changeset 7561088131f9 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=7561088131f9
description:
ruby: cleaned up ruby-lang configuration
diffstat:
7 files changed, 144 insertions(+), 203 deletions(-)
src/mem/protocol/MESI_CMP_directory-mem.sm | 4
src/mem/protocol/MI_example-dir.sm | 4
src/mem/protocol/MOESI_CMP_directory-dir.sm | 4
src/mem/ruby/config/cfg.rb | 299 +++++++++------------------
src/mem/ruby/config/defaults.rb | 32 ++
src/mem/ruby/system/DirectoryMemory.cc | 2
src/mem/ruby/system/DirectoryMemory.hh | 2
diffs (truncated from 672 to 300 lines):
diff -r db0e6c92a442 -r 7561088131f9 src/mem/protocol/MESI_CMP_directory-mem.sm
--- a/src/mem/protocol/MESI_CMP_directory-mem.sm Wed Nov 18 11:55:42
2009 -0600
+++ b/src/mem/protocol/MESI_CMP_directory-mem.sm Fri Dec 04 13:12:40
2009 -0600
@@ -116,9 +116,9 @@
// DirectoryMemory directory, constructor_hack="i";
// MemoryControl memBuffer, constructor_hack="i";
- DirectoryMemory directory,
factory='RubySystem::getDirectory(m_cfg["directory_name"])';
+ DirectoryMemory directory,
factory='RubySystem::getDirectory(m_cfg["directory"])';
- MemoryControl memBuffer,
factory='RubySystem::getMemoryControl(m_cfg["memory_controller_name"])';
+ MemoryControl memBuffer,
factory='RubySystem::getMemoryControl(m_cfg["memory_control"])';
TBETable TBEs, template_hack="<Directory_TBE>";
diff -r db0e6c92a442 -r 7561088131f9 src/mem/protocol/MI_example-dir.sm
--- a/src/mem/protocol/MI_example-dir.sm Wed Nov 18 11:55:42 2009 -0600
+++ b/src/mem/protocol/MI_example-dir.sm Fri Dec 04 13:12:40 2009 -0600
@@ -84,9 +84,9 @@
}
// ** OBJECTS **
- DirectoryMemory directory,
factory='RubySystem::getDirectory(m_cfg["directory_name"])';
+ DirectoryMemory directory,
factory='RubySystem::getDirectory(m_cfg["directory"])';
- MemoryControl memBuffer,
factory='RubySystem::getMemoryControl(m_cfg["memory_controller_name"])';
+ MemoryControl memBuffer,
factory='RubySystem::getMemoryControl(m_cfg["memory_control"])';
TBETable TBEs, template_hack="<Directory_TBE>";
diff -r db0e6c92a442 -r 7561088131f9 src/mem/protocol/MOESI_CMP_directory-dir.sm
--- a/src/mem/protocol/MOESI_CMP_directory-dir.sm Wed Nov 18 11:55:42
2009 -0600
+++ b/src/mem/protocol/MOESI_CMP_directory-dir.sm Fri Dec 04 13:12:40
2009 -0600
@@ -127,8 +127,8 @@
// ** OBJECTS **
- DirectoryMemory directory,
factory='RubySystem::getDirectory(m_cfg["directory_name"])';
- MemoryControl memBuffer,
factory='RubySystem::getMemoryControl(m_cfg["memory_controller_name"])';
+ DirectoryMemory directory,
factory='RubySystem::getDirectory(m_cfg["directory"])';
+ MemoryControl memBuffer,
factory='RubySystem::getMemoryControl(m_cfg["memory_control"])';
TBETable TBEs, template_hack="<Directory_TBE>";
State getState(Address addr) {
diff -r db0e6c92a442 -r 7561088131f9 src/mem/ruby/config/cfg.rb
--- a/src/mem/ruby/config/cfg.rb Wed Nov 18 11:55:42 2009 -0600
+++ b/src/mem/ruby/config/cfg.rb Fri Dec 04 13:12:40 2009 -0600
@@ -11,14 +11,44 @@
class LibRubyObject
@@all_objs = Array.new
+ @@default_params = Hash.new
+ @@param_types = Hash.new
+
attr_reader :obj_name
- @@default_params = Hash.new
def initialize(obj_name)
assert obj_name.is_a?(String), "Obj_Name must be a string"
@obj_name = obj_name
@@all_objs << self
@params = Hash.new
+
+ # add all parent parameter accessors if they don't exist
+ self.class.ancestors.each { |ancestor|
+ if @@default_params.key?(ancestor.name.to_sym)
+ @@default_params[ancestor.name.to_sym].each { |p, default|
+ p = p.to_sym
+ @params[p] = default
+ if ! respond_to?(p)
+ self.class.send(:define_method, p) {
+ @params[p] = @@default_params[ancestor.name.to_sym][p] if !
@params.key?(p)
+ return @params[p]
+ }
+ end
+ setter_method_name = (p.to_s + "=").to_sym
+ if ! respond_to?(setter_method_name)
+ self.class.send(:define_method, setter_method_name) { |val|
+ type = @@param_types[ancestor.name.to_sym][p]
+ if val.is_a?(FalseClass) || val.is_a?(TrueClass)
+ assert type.is_a?(Boolean), "default value of param \"#{p}\"
must be either true or false"
+ else
+ assert val.is_a?(type), "default value of param \"#{p}\",
which is of type #{val.class.name} does not match expected type #{type}"
+ end
+ @params[p] = val
+ }
+ end
+ }
+ end
+ }
end
def cppClassName()
@@ -29,40 +59,24 @@
idx = self.name.to_sym
@@default_params[idx] = Hash.new if ! @@default_params.key?(idx)
@@default_params[idx][param_name] = nil
- send :define_method, param_name do
- @params[param_name] = @@default_params[idx][param_name] if !
@params.key?(param_name)
- @params[param_name]
- end
- method_name = (param_name.to_s + "=").to_sym
- send :define_method, method_name do |val|
- if val.is_a?(FalseClass) || val.is_a?(TrueClass)
- assert type.is_a?(Boolean), "default value of param \"#{param_name}\"
must be either true or false"
- else
- assert val.is_a?(type), "default value of param \"#{param_name}\" does
not match type #{type}"
- end
-# assert val.is_a?(type), "#{param_name} must be of type #{type}"
- @params[param_name] = val
- end
+ @@param_types[idx] = Hash.new if ! @@param_types.key?(idx)
+ @@param_types[idx][param_name] = type
end
def self.default_param(param_name, type, default)
- idx = self.name.to_sym
- @@default_params[idx] = Hash.new if ! @@default_params.key?(idx)
+
if default.is_a?(FalseClass) || default.is_a?(TrueClass)
assert type.is_a?(Boolean), "default value of param \"#{param_name}\"
must be either true or false"
else
assert default.is_a?(type), "default value of param \"#{param_name}\"
does not match type #{type}"
end
+
+ idx = self.name.to_sym
+ @@default_params[idx] = Hash.new if ! @@default_params.key?(idx)
@@default_params[idx][param_name] = default
- send :define_method, param_name do
- @params[param_name] = @@default_params[idx][param_name] if !
@params.key?(param_name)
- @params[param_name]
- end
- method_name = (param_name.to_s + "=").to_sym
- send :define_method, method_name do |val|
- assert val.is_a?(type), "#{param_name} must be of type #{type}"
- @params[param_name] = val
- end
+ @@param_types[idx] = Hash.new if ! @@param_types.key?(idx)
+ @@param_types[idx][param_name] = type
+
end
def applyDefaults()
@@ -80,6 +94,7 @@
@params.each { |key, val|
str += key.id2name + " "
+ assert(val != nil, "parameter #{key} is nil")
if val.is_a?(LibRubyObject)
str += val.obj_name + " "
else
@@ -117,36 +132,32 @@
class NetPort < LibRubyObject
attr :mach_type
- attr_reader :version
+ param :version, Integer
@@type_cnt = Hash.new
- @type_id
def initialize(obj_name, mach_type)
super(obj_name)
@mach_type = mach_type
@@type_cnt[mach_type] ||= 0
- @type_id = @@type_cnt[mach_type]
+ self.version= @@type_cnt[mach_type] # sets the version parameter
+
@@type_cnt[mach_type] += 1
- idx = "NetPort".to_sym
- @@default_params[idx] = Hash.new if ! @@default_params.key?(idx)
- @@default_params[idx].each { |key, val|
- @params[key] = val if ! @params.key?(key)
- }
end
def port_name
mach_type
end
def port_num
- @type_id
- end
- def cppClassName
- "NetPort"
+ version
end
def self.totalOfType(mach_type)
return @@type_cnt[mach_type]
end
+ def cppClassName()
+ "generated:"+...@mach_type
+ end
+
end
class MemoryVector < LibRubyObject
@@ -155,7 +166,7 @@
end
def cppClassName
- "MemoryController"
+ "MemoryVector"
end
end
@@ -291,33 +302,12 @@
end
class CacheController < NetPort
- @@total_cache_controllers = Hash.new
def initialize(obj_name, mach_type, caches)
super(obj_name, mach_type)
caches.each { |cache|
cache.controller = self
}
-
- if !@@total_cache_controllers.key?(mach_type)
- @@total_cache_controllers[mach_type] = 0
- end
- @version = @@total_cache_controllers[mach_type]
- @@total_cache_controllers[mach_type] += 1
-
- # call inhereted parameters
- transitions_per_cycle
- buffer_size
- number_of_TBEs
- recycle_latency
- end
-
- def argv()
- vec = "version "[email protected]_s
- vec += " transitions_per_cycle "+...@params[:transitions_per_cycle].to_s
- vec += " buffer_size "+...@params[:buffer_size].to_s
- vec += " number_of_TBEs "+...@params[:number_of_TBEs].to_s
- vec += " recycle_latency "+...@params[:recycle_latency].to_s
end
def cppClassName()
@@ -325,89 +315,92 @@
end
end
+class Sequencer < IfacePort
+end
+
class L1CacheController < CacheController
- attr :sequencer
+ param :sequencer, Sequencer
def initialize(obj_name, mach_type, caches, sequencer)
super(obj_name, mach_type, caches)
- @sequencer = sequencer
- @sequencer.controller = self
- @sequencer.version = @version
+ sequencer.controller = self
+ sequencer.version = version
+ self.sequencer= sequencer
end
- def argv()
- vec = super()
- vec += " sequencer "[email protected]_name
- end
+# def argv()
+# vec = super()
+# vec += " sequencer "[email protected]_name
+# end
+end
+
+class DirectoryMemory < LibRubyObject
+end
+class MemoryControl < LibRubyObject
end
class DirectoryController < NetPort
@@total_directory_controllers = 0
- attr :directory
- attr :memory_control
+ param :directory, DirectoryMemory
+ param :memory_control, MemoryControl
def initialize(obj_name, mach_type, directory, memory_control)
super(obj_name, mach_type)
- @directory = directory
directory.controller = self
-
- @memory_control = memory_control
+ directory.version = @@total_directory_controllers
+ self.directory = directory
+ self.memory_control = memory_control
@version = @@total_directory_controllers
@@total_directory_controllers += 1
buffer_size()
end
- def argv()
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev