Skip to content

Commit

Permalink
sim: support evaluating Replicate()
Browse files Browse the repository at this point in the history
jordens committed Dec 21, 2015
1 parent 7591c09 commit 1c30796
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions migen/sim/core.py
Original file line number Diff line number Diff line change
@@ -138,6 +138,10 @@ def eval(self, node, postcommit=False):
r |= (self.eval(element, postcommit) & (2**nbits-1)) << shift
shift += nbits
return r
elif isinstance(node, Replicate):
nbits = len(node.v)
v = self.eval(node.v, postcommit) & (2**nbits - 1)
return sum(v << i*nbits for i in range(node.n))
elif isinstance(node, _ArrayProxy):
return self.eval(node.choices[self.eval(node.key, postcommit)],
postcommit)
@@ -157,7 +161,7 @@ def eval(self, node, postcommit=False):
else:
return self.eval(rst, postcommit)
else:
raise NotImplementedError
raise NotImplementedError(node)

def assign(self, node, value):
if isinstance(node, Signal):
@@ -183,7 +187,7 @@ def assign(self, node, value):
array = self.replaced_memories[node.memory]
self.assign(array[self.eval(node.index)], value)
else:
raise NotImplementedError
raise NotImplementedError(node)

def execute(self, statements):
for s in statements:

0 comments on commit 1c30796

Please sign in to comment.