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

Reply via email to