Skip to content

Commit

Permalink
sim: Array: handle out of bounds
Browse files Browse the repository at this point in the history
jordens committed Nov 10, 2016
1 parent b716a8b commit 6ffffd6
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions migen/sim/core.py
Original file line number Diff line number Diff line change
@@ -144,8 +144,8 @@ def eval(self, node, postcommit=False):
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)
idx = min(len(node.choices) - 1, self.eval(node.key, postcommit))
return self.eval(node.choices[idx], postcommit)
elif isinstance(node, _MemoryLocation):
array = self.replaced_memories[node.memory]
return self.eval(array[self.eval(node.index, postcommit)], postcommit)
@@ -183,7 +183,8 @@ def assign(self, node, value):
full_value |= value << node.start
self.assign(node.value, full_value)
elif isinstance(node, _ArrayProxy):
self.assign(node.choices[self.eval(node.key)], value)
idx = min(len(node.choices) - 1, self.eval(node.key))
self.assign(node.choices[idx], value)
elif isinstance(node, _MemoryLocation):
array = self.replaced_memories[node.memory]
self.assign(array[self.eval(node.index)], value)

0 comments on commit 6ffffd6

Please sign in to comment.