Safe Haskell | None |
---|---|

Language | Haskell2010 |

- (!) :: (BitPack a, KnownNat (BitSize a), Integral i) => a -> i -> Bit
- slice :: (BitPack a, BitSize a ~ ((m + 1) + i)) => a -> SNat m -> SNat n -> BitVector ((m + 1) - n)
- split :: (BitPack a, BitSize a ~ (m + n), KnownNat n) => a -> (BitVector m, BitVector n)
- replaceBit :: (BitPack a, KnownNat (BitSize a), Integral i) => a -> i -> Bit -> a
- setSlice :: (BitPack a, BitSize a ~ ((m + 1) + i)) => a -> SNat m -> SNat n -> BitVector ((m + 1) - n) -> a
- msb :: (BitPack a, KnownNat (BitSize a)) => a -> Bit
- lsb :: BitPack a => a -> Bit

# Documentation

(!) :: (BitPack a, KnownNat (BitSize a), Integral i) => a -> i -> Bit Source

Get the bit at the specified bit index.

**NB:** Bit indices are **DESCENDING**.

`>>>`

000111`pack (7 :: Unsigned 6)`

`>>>`

1`(7 :: Unsigned 6) ! 1`

`>>>`

0`(7 :: Unsigned 6) ! 5`

`>>>`

*** Exception: (!): 6 is out of range [5..0]`(7 :: Unsigned 6) ! 6`

slice :: (BitPack a, BitSize a ~ ((m + 1) + i)) => a -> SNat m -> SNat n -> BitVector ((m + 1) - n) Source

Get a slice between bit index `m`

and and bit index `n`

.

**NB:** Bit indices are **DESCENDING**.

`>>>`

000111`pack (7 :: Unsigned 6)`

`>>>`

001`slice (7 :: Unsigned 6) d4 d2`

`>>>`

<interactive> Couldn't match type ‘7 + i0’ with ‘6’ The type variable ‘i0’ is ambiguous Expected type: (6 + 1) + i0 Actual type: BitSize (Unsigned 6) In the expression: slice (7 :: Unsigned 6) d6 d4 In an equation for ‘it’: it = slice (7 :: Unsigned 6) d6 d4`slice (7 :: Unsigned 6) d6 d4`

split :: (BitPack a, BitSize a ~ (m + n), KnownNat n) => a -> (BitVector m, BitVector n) Source

Split a value of a bit size `m + n`

into a tuple of values with size `m`

and size `n`

.

`>>>`

000111`pack (7 :: Unsigned 6)`

`>>>`

(00,0111)`split (7 :: Unsigned 6) :: (BitVector 2, BitVector 4)`

replaceBit :: (BitPack a, KnownNat (BitSize a), Integral i) => a -> i -> Bit -> a Source

Set the bit at the specified index

**NB:** Bit indices are **DESCENDING**.

`>>>`

111011`pack (-5 :: Signed 6)`

`>>>`

-21`replaceBit (-5 :: Signed 6) 4 0`

`>>>`

101011`pack (-21 :: Signed 6)`

`>>>`

27`replaceBit (-5 :: Signed 6) 5 0`

`>>>`

011011`pack (27 :: Signed 6)`

`>>>`

*** Exception: replaceBit: 6 is out of range [5..0]`replaceBit (-5 :: Signed 6) 6 0`

setSlice :: (BitPack a, BitSize a ~ ((m + 1) + i)) => a -> SNat m -> SNat n -> BitVector ((m + 1) - n) -> a Source

Set the bits between bit index `m`

and bit index `n`

.

**NB:** Bit indices are **DESCENDING**.

`>>>`

111011`pack (-5 :: Signed 6)`

`>>>`

-29`setSlice (-5 :: Signed 6) d4 d3 0`

`>>>`

100011`pack (-29 :: Signed 6)`

`>>>`

<interactive>:25:1: Couldn't match type ‘7 + i0’ with ‘6’ The type variable ‘i0’ is ambiguous Expected type: (6 + 1) + i0 Actual type: BitSize (Signed 6) In the expression: setSlice (- 5 :: Signed 6) d6 d5 0 In an equation for ‘it’: it = setSlice (- 5 :: Signed 6) d6 d5 0`setSlice (-5 :: Signed 6) d6 d5 0`