ruby: slicc: change the way configurable members are specified
authorNilay Vaish <nilay@cs.wisc.edu>
Mon, 1 Sep 2014 21:55:45 +0000 (16:55 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Mon, 1 Sep 2014 21:55:45 +0000 (16:55 -0500)
There are two changes this patch makes to the way configurable members of a
state machine are specified in SLICC.  The first change is that the data
member declarations will need to be separated by a semi-colon instead of a
comma.  Secondly, the default value to be assigned would now use SLICC's
assignment operator i.e. ':='.

26 files changed:
src/mem/protocol/MESI_Three_Level-L0cache.sm
src/mem/protocol/MESI_Three_Level-L1cache.sm
src/mem/protocol/MESI_Two_Level-L1cache.sm
src/mem/protocol/MESI_Two_Level-L2cache.sm
src/mem/protocol/MESI_Two_Level-dir.sm
src/mem/protocol/MESI_Two_Level-dma.sm
src/mem/protocol/MI_example-cache.sm
src/mem/protocol/MI_example-dir.sm
src/mem/protocol/MI_example-dma.sm
src/mem/protocol/MOESI_CMP_directory-L1cache.sm
src/mem/protocol/MOESI_CMP_directory-L2cache.sm
src/mem/protocol/MOESI_CMP_directory-dir.sm
src/mem/protocol/MOESI_CMP_directory-dma.sm
src/mem/protocol/MOESI_CMP_token-L1cache.sm
src/mem/protocol/MOESI_CMP_token-L2cache.sm
src/mem/protocol/MOESI_CMP_token-dir.sm
src/mem/protocol/MOESI_CMP_token-dma.sm
src/mem/protocol/MOESI_hammer-cache.sm
src/mem/protocol/MOESI_hammer-dir.sm
src/mem/protocol/MOESI_hammer-dma.sm
src/mem/protocol/Network_test-cache.sm
src/mem/slicc/ast/FormalParamAST.py
src/mem/slicc/ast/ObjDeclAST.py
src/mem/slicc/ast/StallAndWaitStatementAST.py
src/mem/slicc/parser.py
src/mem/slicc/symbols/StateMachine.py

index 5e49d5b136694a78f42b5458a8f3a7335d732614..f707ba96338d6f9c4477cca0f0bc7bca15190a6f 100644 (file)
  */
 
 machine(L0Cache, "MESI Directory L0 Cache")
- : Sequencer * sequencer,
-   CacheMemory * Icache,
-   CacheMemory * Dcache,
-   Cycles request_latency = 2,
-   Cycles response_latency = 2,
-   bool send_evictions,
+ : Sequencer * sequencer;
+   CacheMemory * Icache;
+   CacheMemory * Dcache;
+   Cycles request_latency := 2;
+   Cycles response_latency := 2;
+   bool send_evictions;
 {
   // NODE L0 CACHE
   // From this node's L0 cache to the network
index 43daa04634d7c94adb281b6615a09b38399847ce..170599a51852242ee1f806ce863a2dbe500ef24f 100644 (file)
  */
 
 machine(L1Cache, "MESI Directory L1 Cache CMP")
- : CacheMemory * cache,
-   int l2_select_num_bits,
-   Cycles l1_request_latency = 2,
-   Cycles l1_response_latency = 2,
-   Cycles to_l2_latency = 1,
+ : CacheMemory * cache;
+   int l2_select_num_bits;
+   Cycles l1_request_latency := 2;
+   Cycles l1_response_latency := 2;
+   Cycles to_l2_latency := 1;
 {
   // From this node's L1 cache TO the network
   // a local L1 -> this L2 bank, currently ordered with directory forwarded requests
@@ -40,7 +40,6 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
   MessageBuffer responseToL2, network="To", virtual_network="1", ordered="false", vnet_type="response";
   MessageBuffer unblockToL2, network="To", virtual_network="2", ordered="false", vnet_type="unblock";
 
-
   // To this node's L1 cache FROM the network
   // a L2 bank -> this L1
   MessageBuffer requestFromL2, network="From", virtual_network="0", ordered="false", vnet_type="request";
index a202a8debd5a9046d1aeb5050d46417fff3efe82..96c1699b73cd4d93ff5b2ec8b2173db7784228fe 100644 (file)
  */
 
 machine(L1Cache, "MESI Directory L1 Cache CMP")
- : Sequencer * sequencer,
-   CacheMemory * L1Icache,
-   CacheMemory * L1Dcache,
-   Prefetcher * prefetcher = 'NULL',
-   int l2_select_num_bits,
-   Cycles l1_request_latency = 2,
-   Cycles l1_response_latency = 2,
-   Cycles to_l2_latency = 1,
-   bool send_evictions,
-   bool enable_prefetch = "False"
+ : Sequencer * sequencer;
+   CacheMemory * L1Icache;
+   CacheMemory * L1Dcache;
+   Prefetcher * prefetcher;
+   int l2_select_num_bits;
+   Cycles l1_request_latency := 2;
+   Cycles l1_response_latency := 2;
+   Cycles to_l2_latency := 1;
+   bool send_evictions;
+   bool enable_prefetch := "False";
 {
   // NODE L1 CACHE
   // From this node's L1 cache TO the network
index f69eaa9a9df78012c113d30c25a73c7f00e00b71..f191ddccbdf298444b85efaa5efa5d85a8558669 100644 (file)
  */
 
 machine(L2Cache, "MESI Directory L2 Cache CMP")
- : CacheMemory * L2cache,
-   Cycles l2_request_latency = 2,
-   Cycles l2_response_latency = 2,
-   Cycles to_l1_latency = 1
+ : CacheMemory * L2cache;
+   Cycles l2_request_latency := 2;
+   Cycles l2_response_latency := 2;
+   Cycles to_l1_latency := 1;
 {
   // L2 BANK QUEUES
   // From local bank of L2 cache TO the network
index bfd4fc475e4704180f4cea397ea4c4bf0c6fd214..679f2dee75afd336f3f679d1c567efd4c1138b47 100644 (file)
 
 
 machine(Directory, "MESI Two Level directory protocol")
- : DirectoryMemory * directory,
-   MemoryControl * memBuffer,
-   Cycles to_mem_ctrl_latency = 1,
-   Cycles directory_latency = 6,
+ : DirectoryMemory * directory;
+   MemoryControl * memBuffer;
+   Cycles to_mem_ctrl_latency := 1;
+   Cycles directory_latency := 6;
 {
   MessageBuffer requestToDir, network="From", virtual_network="0",
         ordered="false", vnet_type="request";
index b9bb68cbde26dfeb0c9e98cdfa0180b46af080b0..80c70c80ac8ce7e95e2a7247b001294798784510 100644 (file)
@@ -28,8 +28,8 @@
  */
 
 machine(DMA, "DMA Controller")
-: DMASequencer * dma_sequencer,
-  Cycles request_latency = 6
+: DMASequencer * dma_sequencer;
+  Cycles request_latency := 6;
 {
 
   MessageBuffer responseFromDir, network="From", virtual_network="1", ordered="true", vnet_type="response";
index 561de239716e42666b943ac835a3f80ac31b4847..9b0c18bc82e7618f464b07c55eb8f19725f38c7d 100644 (file)
  */
 
 machine(L1Cache, "MI Example L1 Cache")
-: Sequencer * sequencer,
-  CacheMemory * cacheMemory,
-  Cycles cache_response_latency = 12,
-  Cycles issue_latency = 2,
-  bool send_evictions
+: Sequencer * sequencer;
+  CacheMemory * cacheMemory;
+  Cycles cache_response_latency := 12;
+  Cycles issue_latency := 2;
+  bool send_evictions;
 {
 
   // NETWORK BUFFERS
index 87ed57919cdf09e265cdf7015271ff42d3ffaa23..f0d85cba8d95bc29529585ca2a3a92696f2233ed 100644 (file)
@@ -28,9 +28,9 @@
  */
 
 machine(Directory, "Directory protocol") 
-: DirectoryMemory * directory,
-  MemoryControl * memBuffer,
-  Cycles directory_latency = 12
+: DirectoryMemory * directory;
+  MemoryControl * memBuffer;
+  Cycles directory_latency := 12;
 {
 
   MessageBuffer forwardFromDir, network="To", virtual_network="3", ordered="false", vnet_type="forward";
index c9da54f85b5c3e53dd6f9d26c45c249633ca1560..14b8c4e4a274b20a95f3a64fea4944413d68dbc3 100644 (file)
@@ -28,8 +28,8 @@
  */
 
 machine(DMA, "DMA Controller") 
-: DMASequencer * dma_sequencer,
-  Cycles request_latency = 6
+: DMASequencer * dma_sequencer;
+  Cycles request_latency := 6;
 {
 
   MessageBuffer responseFromDir, network="From", virtual_network="1", ordered="true", vnet_type="response";
index bf935ab658e3d68d5d21b5c04285d96655a605ed..fb74a67e4dce3204aae9fc95221ab184257cc01a 100644 (file)
  */
 
 machine(L1Cache, "Directory protocol")
- : Sequencer * sequencer,
-   CacheMemory * L1Icache,
-   CacheMemory * L1Dcache,
-   int l2_select_num_bits,
-   Cycles request_latency = 2,
-   Cycles use_timeout_latency = 50,
-   bool send_evictions
+ : Sequencer * sequencer;
+   CacheMemory * L1Icache;
+   CacheMemory * L1Dcache;
+   int l2_select_num_bits;
+   Cycles request_latency := 2;
+   Cycles use_timeout_latency := 50;
+   bool send_evictions;
 {
 
   // NODE L1 CACHE
index 5974321b726a995e3ea54b8296f14d83143173e3..7d81f41644c277396f4deaa5bec6c9858d123c0a 100644 (file)
@@ -27,9 +27,9 @@
  */
 
 machine(L2Cache, "Token protocol")
-: CacheMemory * L2cache,
-  Cycles response_latency = 2,
-  Cycles request_latency = 2
+: CacheMemory * L2cache;
+  Cycles response_latency := 2;
+  Cycles request_latency := 2;
 {
 
   // L2 BANK QUEUES
index 336bb80ee4910df58f3f7eab1ff783cf2afba866..b403bc91c6f1be8749cea0745e69bc5c1d9cbef0 100644 (file)
@@ -27,9 +27,9 @@
  */
 
 machine(Directory, "Directory protocol")
-:  DirectoryMemory * directory,
-   MemoryControl * memBuffer,
-   Cycles directory_latency = 6
+:  DirectoryMemory * directory;
+   MemoryControl * memBuffer;
+   Cycles directory_latency := 6;
 {
 
   // ** IN QUEUES **
index fd1ab6f6c261c9a46533bd5287bdf2292c96bc3d..1a8b3aea94732600171de8e94636eb664363d4ca 100644 (file)
@@ -28,9 +28,9 @@
  */
 
 machine(DMA, "DMA Controller") 
-: DMASequencer * dma_sequencer,
-  Cycles request_latency = 14,
-  Cycles response_latency = 14
+: DMASequencer * dma_sequencer;
+  Cycles request_latency := 14;
+  Cycles response_latency := 14;
 {
   MessageBuffer responseFromDir, network="From", virtual_network="2", ordered="false", vnet_type="response";
 
index 238689efa7fdce57017e6b5808944efe904efd93..b1197780f718dee9f4c3b8c98e2fe7c0ee6e247c 100644 (file)
  */
 
 machine(L1Cache, "Token protocol")
- : Sequencer * sequencer,
-   CacheMemory * L1Icache,
-   CacheMemory * L1Dcache,
-   int l2_select_num_bits,
-   int N_tokens,
-
-   Cycles l1_request_latency = 2,
-   Cycles l1_response_latency = 2,
-   int retry_threshold = 1,
-   Cycles fixed_timeout_latency = 100,
-   Cycles reissue_wakeup_latency = 10,
-   Cycles use_timeout_latency = 50,
-
-   bool dynamic_timeout_enabled = true,
-   bool no_mig_atomic = true,
-   bool send_evictions
+ : Sequencer * sequencer;
+   CacheMemory * L1Icache;
+   CacheMemory * L1Dcache;
+   int l2_select_num_bits;
+   int N_tokens;
+
+   Cycles l1_request_latency := 2;
+   Cycles l1_response_latency := 2;
+   int retry_threshold := 1;
+   Cycles fixed_timeout_latency := 100;
+   Cycles reissue_wakeup_latency := 10;
+   Cycles use_timeout_latency := 50;
+
+   bool dynamic_timeout_enabled := "True";
+   bool no_mig_atomic := "True";
+   bool send_evictions;
 {
 
   // From this node's L1 cache TO the network
@@ -206,7 +206,6 @@ machine(L1Cache, "Token protocol")
   Cycles averageLatencyEstimate() {
     DPRINTF(RubySlicc, "%d\n",
             (averageLatencyCounter >> averageLatencyHysteresis));
-    //profile_average_latency_estimate( (averageLatencyCounter >> averageLatencyHysteresis) );
     return averageLatencyCounter >> averageLatencyHysteresis;
   }
 
index f0fa8227d94e534e90cfbbda12044dcbddda7316..f8bd0169595885e7cb0194b30c83b7f9caa35cf0 100644 (file)
  */
 
 machine(L2Cache, "Token protocol")
- : CacheMemory * L2cache,
-   int N_tokens,
-   Cycles l2_request_latency = 5,
-   Cycles l2_response_latency = 5,
-   bool filtering_enabled = true
+ : CacheMemory * L2cache;
+   int N_tokens;
+   Cycles l2_request_latency := 5;
+   Cycles l2_response_latency := 5;
+   bool filtering_enabled := "True";
 {
 
   // L2 BANK QUEUES
index 4354d7c4c8244cec313dffce300a0671f6d372c4..5cb29fcc241920e1ca2706419380d6bdb2d1482a 100644 (file)
  */
 
 machine(Directory, "Token protocol")
- : DirectoryMemory * directory,
-   MemoryControl * memBuffer,
-   int l2_select_num_bits,
-   Cycles directory_latency = 5,
-   bool distributed_persistent = true,
-   Cycles fixed_timeout_latency = 100,
-   Cycles reissue_wakeup_latency = 10
+ : DirectoryMemory * directory;
+   MemoryControl * memBuffer;
+   int l2_select_num_bits;
+   Cycles directory_latency := 5;
+   bool distributed_persistent := "True";
+   Cycles fixed_timeout_latency := 100;
+   Cycles reissue_wakeup_latency := 10;
 {
 
   MessageBuffer dmaResponseFromDir, network="To", virtual_network="5", ordered="true", vnet_type="response";
index 812017acd11579eb014079cfe5b1a414d2dd9396..441a001fc58104607589cf42981fd32f4744249a 100644 (file)
@@ -28,8 +28,8 @@
 
 
 machine(DMA, "DMA Controller")
-: DMASequencer * dma_sequencer,
-  Cycles request_latency = 6
+: DMASequencer * dma_sequencer;
+  Cycles request_latency := 6;
 {
 
   MessageBuffer responseFromDir, network="From", virtual_network="5", ordered="true", vnet_type="response";
index 5144881155f2f14f8494e4103c453a1adeca7083..7c150bda0ff57218718024dbdcf9b296443c85b7 100644 (file)
  */
 
 machine({L1Cache, L2Cache}, "AMD Hammer-like protocol")
-: Sequencer * sequencer,
-  CacheMemory * L1Icache,
-  CacheMemory * L1Dcache,
-  CacheMemory * L2cache,
-  Cycles cache_response_latency = 10,
-  Cycles issue_latency = 2,
-  Cycles l2_cache_hit_latency = 10,
-  bool no_mig_atomic = true,
-  bool send_evictions
+: Sequencer * sequencer;
+  CacheMemory * L1Icache;
+  CacheMemory * L1Dcache;
+  CacheMemory * L2cache;
+  Cycles cache_response_latency := 10;
+  Cycles issue_latency := 2;
+  Cycles l2_cache_hit_latency := 10;
+  bool no_mig_atomic := "True";
+  bool send_evictions;
 {
 
   // NETWORK BUFFERS
index 58e4d73469db163ffbe2aca06687cd32bb6f2808..4e2f846e26178bde8bd80e9beb8bd047ef79de92 100644 (file)
  */
 
 machine(Directory, "AMD Hammer-like protocol") 
-: DirectoryMemory * directory,
-  CacheMemory * probeFilter,
-  MemoryControl * memBuffer,
-  Cycles memory_controller_latency = 2,
-  bool probe_filter_enabled = false,
-  bool full_bit_dir_enabled = false
+: DirectoryMemory * directory;
+  CacheMemory * probeFilter;
+  MemoryControl * memBuffer;
+  Cycles memory_controller_latency := 2;
+  bool probe_filter_enabled := "False";
+  bool full_bit_dir_enabled := "False";
 {
 
   MessageBuffer forwardFromDir, network="To", virtual_network="3", ordered="false", vnet_type="forward";
index 1d0f67881142090d69e6c768c22b7b498631b864..e4d26bb48be08251b84fdaa1b23e7b4d46b59c09 100644 (file)
@@ -28,8 +28,8 @@
 
 
 machine(DMA, "DMA Controller") 
-: DMASequencer * dma_sequencer,
-  Cycles request_latency = 6
+: DMASequencer * dma_sequencer;
+  Cycles request_latency := 6;
 {
 
   MessageBuffer responseFromDir, network="From", virtual_network="1", ordered="true", vnet_type="response";
index 885bbacbe432297fe606f2fe9338d21c42c1ea1a..f69aecd933330407be8196d3ba3695988f327dfe 100644 (file)
@@ -32,8 +32,8 @@
 
 
 machine(L1Cache, "Network_test L1 Cache")
-: Sequencer * sequencer,
-  Cycles issue_latency = 2
+: Sequencer * sequencer;
+  Cycles issue_latency := 2;
 {
 
   // NETWORK BUFFERS
index 6ed5bca0a9fb9db1a16ec6d062bdec227982ce58..ce73304f120cc51f48d8f8f2d4d6dd965f959ee2 100644 (file)
@@ -51,6 +51,7 @@ class FormalParamAST(AST):
         v = Var(self.symtab, self.ident, self.location, type, param,
                 self.pairs)
         self.symtab.newSymbol(v)
+
         if self.pointer or str(type) == "TBE" or (
            "interface" in type and (
                type["interface"] == "AbstractCacheEntry" or
index ffd71bbb137dfad8d5996cd7c34788cfee7a0276..92ff15d521341b3179ede2458746034c0aa10bc3 100644 (file)
@@ -29,12 +29,13 @@ from slicc.ast.DeclAST import DeclAST
 from slicc.symbols import Var
 
 class ObjDeclAST(DeclAST):
-    def __init__(self, slicc, type_ast, ident, pairs, rvalue):
+    def __init__(self, slicc, type_ast, ident, pairs, rvalue, pointer):
         super(ObjDeclAST, self).__init__(slicc, pairs)
 
         self.type_ast = type_ast
         self.ident = ident
         self.rvalue = rvalue
+        self.pointer = pointer
 
     def __repr__(self):
         return "[ObjDecl: %r]" % self.ident
index b87726c6a94df1942bcc42fa9fa2f3c7ee186ad9..08b0e340c71d7b0faadca174e298bc08b2166770 100644 (file)
@@ -35,7 +35,7 @@ class StallAndWaitStatementAST(StatementAST):
         self.address = address
         
     def __repr__(self):
-        return "[StallAndWaitStatementAst: %r]" % self.variable
+        return "[StallAndWaitStatementAst: %r]" % self.in_port
 
     def generate(self, code, return_type):
         self.in_port.assertType("InPort")
index 04ba4640ca52f130e2459465a0fabf2d00a3574c..10dd99ecefd2e6c71e6d791a270e79712a61f117 100644 (file)
@@ -258,11 +258,11 @@ class SLICC(Grammar):
         p[0] = self.parse_file(filename)
 
     def p_decl__machine0(self, p):
-        "decl : MACHINE '(' idents ')' ':' params '{' decls '}'"
+        "decl : MACHINE '(' idents ')' ':' obj_decls '{' decls '}'"
         p[0] = ast.MachineAST(self, p[3], [], p[7], p[9])
 
     def p_decl__machine1(self, p):
-        "decl : MACHINE '(' idents pairs ')' ':' params '{' decls '}'"
+        "decl : MACHINE '(' idents pairs ')' ':' obj_decls '{' decls '}'"
         p[0] = ast.MachineAST(self, p[3], p[4], p[7], p[9])
 
     def p_decl__action(self, p):
@@ -319,6 +319,14 @@ class SLICC(Grammar):
         p[0] = ast.StateDeclAST(self, p[3], p[4], p[7])
 
     # Type fields
+    def p_obj_decls__list(self, p):
+        "obj_decls : obj_decl obj_decls"
+        p[0] = [ p[1] ] + p[2]
+
+    def p_obj_decls__empty(self, p):
+        "obj_decls : empty"
+        p[0] = []
+
     def p_type_members__list(self, p):
         "type_members : type_member type_members"
         p[0] = [ p[1] ] + p[2]
@@ -340,19 +348,21 @@ class SLICC(Grammar):
 
     def p_obj_decl__0(self, p):
         "obj_decl : type ident pairs SEMI"
-        p[0] = ast.ObjDeclAST(self, p[1], p[2], p[3], None)
+        p[0] = ast.ObjDeclAST(self, p[1], p[2], p[3], None, False)
 
     def p_obj_decl__1(self, p):
         "obj_decl : type STAR ident pairs SEMI"
-        p[0] = ast.ObjDeclAST(self, p[1], p[3], p[4], None)
+        p[0] = ast.ObjDeclAST(self, p[1], p[3], p[4], None, True)
 
     def p_obj_decl__2(self, p):
         "obj_decl : type ident ASSIGN expr SEMI"
-        p[0] = ast.ObjDeclAST(self, p[1], p[2], ast.PairListAST(self), p[4])
+        p[0] = ast.ObjDeclAST(self, p[1], p[2], ast.PairListAST(self), p[4],
+                False)
 
     def p_obj_decl__3(self, p):
         "obj_decl : type STAR ident ASSIGN expr SEMI"
-        p[0] = ast.ObjDeclAST(self, p[1], p[3], ast.PairListAST(self), p[5])
+        p[0] = ast.ObjDeclAST(self, p[1], p[3], ast.PairListAST(self), p[5],
+                True)
 
     # Function definition and declaration
     def p_decl__func_decl(self, p):
@@ -426,19 +436,19 @@ class SLICC(Grammar):
         p[0] = ast.FormalParamAST(self, p[1], p[3], None, True)
 
     def p_param__pointer_default(self, p):
-        "param : type STAR ident '=' STRING"
+        "param : type STAR ident ASSIGN STRING"
         p[0] = ast.FormalParamAST(self, p[1], p[3], p[5], True)
 
     def p_param__default_number(self, p):
-        "param : type ident '=' NUMBER"
+        "param : type ident ASSIGN NUMBER"
         p[0] = ast.FormalParamAST(self, p[1], p[2], p[4])
 
     def p_param__default_bool(self, p):
-        "param : type ident '=' LIT_BOOL"
+        "param : type ident ASSIGN LIT_BOOL"
         p[0] = ast.FormalParamAST(self, p[1], p[2], p[4])
 
     def p_param__default_string(self, p):
-        "param : type ident '=' STRING"
+        "param : type ident ASSIGN STRING"
         p[0] = ast.FormalParamAST(self, p[1], p[2], p[4])
 
     # Type
index 2cda3a49d78f55139b2ade100d7110af00b20124..71fcc053fe9edd597e5d3d7566de46a6b581ac86 100644 (file)
@@ -56,12 +56,14 @@ class StateMachine(Symbol):
 
         for param in config_parameters:
             if param.pointer:
-                var = Var(symtab, param.name, location, param.type_ast.type,
-                          "(*m_%s_ptr)" % param.name, {}, self)
+                var = Var(symtab, param.ident, location, param.type_ast.type,
+                          "(*m_%s_ptr)" % param.ident, {}, self)
             else:
-                var = Var(symtab, param.name, location, param.type_ast.type,
-                          "m_%s" % param.name, {}, self)
-            self.symtab.registerSym(param.name, var)
+                var = Var(symtab, param.ident, location, param.type_ast.type,
+                          "m_%s" % param.ident, {}, self)
+
+            self.symtab.registerSym(param.ident, var)
+
             if str(param.type_ast.type) == "Prefetcher":
                 self.prefetchers.append(var)
 
@@ -178,8 +180,10 @@ class StateMachine(Symbol):
     def printControllerPython(self, path):
         code = self.symtab.codeFormatter()
         ident = self.ident
+
         py_ident = "%s_Controller" % ident
         c_ident = "%s_Controller" % self.ident
+
         code('''
 from m5.params import *
 from m5.SimObject import SimObject
@@ -192,11 +196,14 @@ class $py_ident(RubyController):
         code.indent()
         for param in self.config_parameters:
             dflt_str = ''
-            if param.default is not None:
-                dflt_str = str(param.default) + ', '
+
+            if param.rvalue is not None:
+                dflt_str = str(param.rvalue.inline()) + ', '
+
             if python_class_map.has_key(param.type_ast.type.c_ident):
                 python_type = python_class_map[param.type_ast.type.c_ident]
-                code('${{param.name}} = Param.${{python_type}}(${dflt_str}"")')
+                code('${{param.ident}} = Param.${{python_type}}(${dflt_str}"")')
+
             else:
                 self.error("Unknown c++ to python class conversion for c++ " \
                            "type: '%s'. Please update the python_class_map " \
@@ -480,11 +487,11 @@ $c_ident::$c_ident(const Params *p)
         #
         for param in self.config_parameters:
             if param.pointer:
-                code('m_${{param.name}}_ptr = p->${{param.name}};')
+                code('m_${{param.ident}}_ptr = p->${{param.ident}};')
             else:
-                code('m_${{param.name}} = p->${{param.name}};')
-            if re.compile("sequencer").search(param.name):
-                code('m_${{param.name}}_ptr->setController(this);')
+                code('m_${{param.ident}} = p->${{param.ident}};')
+            if re.compile("sequencer").search(param.ident):
+                code('m_${{param.ident}}_ptr->setController(this);')
             
         for var in self.objects:
             if var.ident.find("mandatoryQueue") >= 0:
@@ -679,9 +686,9 @@ $vid->setDescription("[Version " + to_string(m_version) + ", ${ident}, name=${{v
 
         seq_ident = "NULL"
         for param in self.config_parameters:
-            if param.name == "sequencer":
+            if param.ident == "sequencer":
                 assert(param.pointer)
-                seq_ident = "m_%s_ptr" % param.name
+                seq_ident = "m_%s_ptr" % param.ident
 
         code('''