Ruby: enable multiple sequencers in one controller.
authorLisa Hsu <Lisa.Hsu@amd.com>
Fri, 1 Apr 2011 00:17:49 +0000 (17:17 -0700)
committerLisa Hsu <Lisa.Hsu@amd.com>
Fri, 1 Apr 2011 00:17:49 +0000 (17:17 -0700)
src/mem/slicc/symbols/StateMachine.py

index e66dcd7dca9aecde604dd067af104fbedc5bf84e..71b7866168ec8580e6842e34ec05fe63b7406418 100644 (file)
@@ -30,6 +30,7 @@ from m5.util import orderdict
 from slicc.symbols.Symbol import Symbol
 from slicc.symbols.Var import Var
 import slicc.generate.html as html
+import re
 
 python_class_map = {"int": "Int",
                     "std::string": "String",
@@ -473,10 +474,13 @@ $c_ident::$c_ident(const Params *p)
         # params include a sequencer.  This information will be used later for
         # contecting the sequencer back to the L1 cache controller.
         #
-        contains_sequencer = False
+        contains_dma_sequencer = False
+        sequencers = []
         for param in self.config_parameters:
-            if param.name == "sequencer" or param.name == "dma_sequencer":
-                contains_sequencer = True
+            if param.name == "dma_sequencer":
+                contains_dma_sequencer = True
+            elif re.compile("sequencer").search(param.name):
+                sequencers.append(param.name)
             if param.pointer:
                 code('m_${{param.name}}_ptr = p->${{param.name}};')
             else:
@@ -487,19 +491,20 @@ $c_ident::$c_ident(const Params *p)
         # includes passing the sequencer a pointer to the controller.
         #
         if self.ident == "L1Cache":
-            if not contains_sequencer:
+            if not sequencers:
                 self.error("The L1Cache controller must include the sequencer " \
                            "configuration parameter")
 
-            code('''
-m_sequencer_ptr->setController(this);
-''')
+            for seq in sequencers:
+                code('''
+m_${{seq}}_ptr->setController(this);
+    ''')
         #
         # For the DMA controller, pass the sequencer a pointer to the
         # controller.
         #
         if self.ident == "DMA":
-            if not contains_sequencer:
+            if not contains_dma_sequencer:
                 self.error("The DMA controller must include the sequencer " \
                            "configuration parameter")