diff options
Diffstat (limited to 'src/mem/slicc')
-rw-r--r-- | src/mem/slicc/ast/EnqueueStatementAST.py | 2 | ||||
-rw-r--r-- | src/mem/slicc/symbols/StateMachine.py | 25 | ||||
-rw-r--r-- | src/mem/slicc/symbols/Type.py | 4 |
3 files changed, 22 insertions, 9 deletions
diff --git a/src/mem/slicc/ast/EnqueueStatementAST.py b/src/mem/slicc/ast/EnqueueStatementAST.py index 329ed30a3..7ad6f00a0 100644 --- a/src/mem/slicc/ast/EnqueueStatementAST.py +++ b/src/mem/slicc/ast/EnqueueStatementAST.py @@ -54,7 +54,7 @@ class EnqueueStatementAST(StatementAST): # Declare message code("${{msg_type.ident}} *out_msg = "\ - "new ${{msg_type.ident}}(curCycle());") + "new ${{msg_type.ident}}(clockEdge());") # The other statements t = self.statements.generate(code, None) diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py index e66743255..ddaa3e440 100644 --- a/src/mem/slicc/symbols/StateMachine.py +++ b/src/mem/slicc/symbols/StateMachine.py @@ -518,7 +518,10 @@ m_dma_sequencer_ptr->setController(this); code('m_num_controllers++;') for var in self.objects: if var.ident.find("mandatoryQueue") >= 0: - code('m_${{var.c_ident}}_ptr = new ${{var.type.c_ident}}();') + code(''' +m_${{var.c_ident}}_ptr = new ${{var.type.c_ident}}(); +m_${{var.c_ident}}_ptr->setReceiver(this); +''') code.dedent() code(''' @@ -573,7 +576,7 @@ $c_ident::init() code('*$vid = ${{vtype["default"]}}; // $comment') # Set ordering - if "ordered" in var and "trigger_queue" not in var: + if "ordered" in var: # A buffer code('$vid->setOrdering(${{var["ordered"]}});') @@ -583,10 +586,16 @@ $c_ident::init() code('$vid->setRandomization(${{var["random"]}});') # Set Priority - if vtype.isBuffer and \ - "rank" in var and "trigger_queue" not in var: + if vtype.isBuffer and "rank" in var: code('$vid->setPriority(${{var["rank"]}});') + # Set sender and receiver for trigger queue + if var.ident.find("triggerQueue") >= 0: + code('$vid->setSender(this);') + code('$vid->setReceiver(this);') + elif vtype.c_ident == "TimerTable": + code('$vid->setClockObj(this);') + else: # Network port object network = var["network"] @@ -601,6 +610,12 @@ $vid = m_net_ptr->get${network}NetQueue(m_version + base, $ordered, $vnet, "$vne code('assert($vid != NULL);') + # Set the end + if network == "To": + code('$vid->setSender(this);') + else: + code('$vid->setReceiver(this);') + # Set ordering if "ordered" in var: # A buffer @@ -647,8 +662,6 @@ $vid->setDescription("[Version " + to_string(m_version) + ", ${ident}, name=${{v code('${{port.code}}.setConsumer(this);') # Set the queue descriptions code('${{port.code}}.setDescription("[Version " + to_string(m_version) + ", $ident, $port]");') - # Set the clock object - code('${{port.code}}.setClockObj(this);') # Initialize the transition profiling code() diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py index f40036e8e..6ee48ba8b 100644 --- a/src/mem/slicc/symbols/Type.py +++ b/src/mem/slicc/symbols/Type.py @@ -246,7 +246,7 @@ $klass ${{self.c_ident}}$parent ''', klass="class") if self.isMessage: - code('(Cycles curTime) : %s(curTime) {' % self["interface"]) + code('(Tick curTime) : %s(curTime) {' % self["interface"]) else: code('()\n\t\t{') @@ -291,7 +291,7 @@ $klass ${{self.c_ident}}$parent params = ', '.join(params) if self.isMessage: - params = "const Cycles curTime, " + params + params = "const Tick curTime, " + params code('${{self.c_ident}}($params)') |