icdutil.slices module

IC Design Related Slice Handling.

class icdutil.slices.Slice(*args, **kwargs)[source]

Bases: NewBase

Bit slice of width bits starting at bit position left or right.

>>> s = Slice(right=6, left=9)
>>> s
Slice('9:6')
>>> s.left
9
>>> s.right
6
>>> s.width
4
>>> str(s)
'9:6'
>>> s.mask
960
>>> s.direction
<SliceDirection.DOWN: 0>
>>> s.slice
slice(9, 6, -1)
>>> s = Slice(left=6, right=9)
>>> s
Slice('6:9')
>>> s.left
6
>>> s.right
9
>>> s.width
4
>>> str(s)
'6:9'
>>> s.mask
960
>>> s.direction
<SliceDirection.UP: 1>
>>> s.slice
slice(6, 9, 1)
>>> Slice(left=7, right=4) in Slice(left=7, right=4)
True
>>> Slice(left=7, right=5) in Slice(left=7, right=4)
True
>>> Slice(left=6, right=4) in Slice(left=7, right=4)
True
>>> Slice(left=7, right=4) in Slice(left=6, right=4)
False
>>> Slice(left=7, right=4) in Slice(left=7, right=5)
False
>>> Slice(left=7, right=5) in Slice(left=4, right=7)
False
>>> Slice('2:1')
Slice('2:1')
>>> Slice('1:2')
Slice('1:2')
>>> Slice(2)
Slice('2')
>>> Slice(right=2)
Slice('2')
>>> Slice(right=2, left=3)
Slice('3:2')
>>> Slice.cast(slice(2, 1))
Slice('2:1')
>>> Slice.cast(slice(1, 2))
Slice('1:2')
>>> Slice('')
Traceback (most recent call last):
  ...
ValueError: Invalid Slice Specification ''
property bits

Colon separated bits.

>>> Slice(left=4, right=8).bits
'4:8'
>>> Slice(left=8, right=4).bits
'8:4'
>>> Slice(left=4).bits
'4'
>>> Slice(right=4).bits
'4'
static cast(value, direction=None) Slice[source]

Create Slice from value.

These three formats are supported:

>>> Slice.cast("[15:4]")
Slice('15:4')
>>> Slice.cast("[4:15]")
Slice('4:15')
>>> Slice.cast("[16]")
Slice('16')
>>> Slice.cast(range(4,16))
Slice('4:15')
>>> Slice.cast(range(15, 3, -1))
Slice('15:4')
>>> Slice.cast('16')
Slice('16')
>>> Slice.cast(16)
Slice('16')
>>> Slice.cast(Slice('16'))
Slice('16')
>>> Slice.cast('')
Traceback (most recent call last):
  ...
ValueError: Invalid Slice Specification ''
>>> Slice.cast(None)
Traceback (most recent call last):
  ...
ValueError: Invalid Slice Specification None
>>> Slice.cast("[4]", direction=DOWN)
Slice('4')
>>> Slice.cast("[4:15]", direction=DOWN)
Traceback (most recent call last):
  ...
ValueError: Slice must be downwards but is 4:15
property direction

Direction.

>>> Slice(left=4, right=8).direction
<SliceDirection.UP: 1>
>>> Slice(left=8, right=4).direction
<SliceDirection.DOWN: 0>
>>> Slice(left=4).direction
>>> Slice(right=4).direction
extract(word)[source]

Extract slice value from word.

>>> slice = Slice(left=5, right=1)
>>> slice.mask
62
>>> slice.extract(0x59)
12
left
property mask

Mask.

>>> Slice(left=4, right=8).mask
496
>>> Slice(left=8, right=4).mask
496
>>> Slice(left=4).mask
16
>>> Slice(right=4).mask
16
right
property slice

Python Slice Equivalent.

property width: int

Slice Width.

class icdutil.slices.SliceDirection(value)[source]

Bases: Enum

Slice Direction.

DOWN = 0
UP = 1