From 72579a612960c4c97f159da110249abd38c95d28 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 12 Mar 2013 21:34:36 +0100 Subject: [PATCH] Add support for negative slice indices In python a negative indices usually mean start counting from the right side. I.e. if the index is negative is acutal index used is len(l) + i. E.g. l[-2] equals l[len(l)-2]. Being able to specify an index this way also comes in handy for migen slices in some cases. E.g. the following snippet can be implement to shift an abitrary length register n bits to the right: reg.eq(Cat(Replicate(0, n), reg[-n:]) Signed-off-by: Lars-Peter Clausen --- migen/fhdl/structure.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/migen/fhdl/structure.py b/migen/fhdl/structure.py index 8052fdff..350670fc 100644 --- a/migen/fhdl/structure.py +++ b/migen/fhdl/structure.py @@ -89,10 +89,16 @@ class Value(HUID): def __getitem__(self, key): if isinstance(key, int): + if (key < 0): + key += len(self) return _Slice(self, key, key+1) elif isinstance(key, slice): start = key.start or 0 stop = key.stop or len(self) + if (start < 0): + start += len(self) + if (stop < 0): + stop += len(self) if stop > len(self): stop = len(self) if key.step != None: -- 2.30.2