clash-prelude-0.10.13: CAES Language for Synchronous Hardware - Prelude library

Copyright (C) 2013-2016, University of Twente BSD2 (see the file LICENSE) Christiaan Baaij Trustworthy Haskell2010 DataKindsFlexibleContextsMagicHashTypeOperatorsExplicitNamespaces

CLaSH.Sized.Index

Description

Synopsis

# Documentation

data Index n Source

Arbitrary-bounded unsigned integer represented by `ceil(log_2(n))` bits.

Given an upper bound `n`, an `Index` `n` number has a range of: [0 .. `n`-1]

````>>> ````maxBound :: Index 8
```7
`>>> ````minBound :: Index 8
```0
`>>> ````read (show (maxBound :: Index 8)) :: Index 8
```7
`>>> ````1 + 2 :: Index 8
```3
`>>> ````2 + 6 :: Index 8
```*** Exception: CLaSH.Sized.Index: result 8 is out of bounds: [0..7]
`>>> ````1 - 3 :: Index 8
```*** Exception: CLaSH.Sized.Index: result -2 is out of bounds: [0..7]
`>>> ````2 * 3 :: Index 8
```6
`>>> ````2 * 4 :: Index 8
```*** Exception: CLaSH.Sized.Index: result 8 is out of bounds: [0..7]
```

Instances

 Source KnownNat n => Bounded (Index n) Source KnownNat n => Enum (Index n) Source The functions: `enumFrom`, `enumFromThen`, `enumFromTo`, and `enumFromThenTo`, are not synthesisable. Eq (Index n) Source KnownNat n => Integral (Index n) Source Typeable Nat n => Data (Index n) Source KnownNat n => Num (Index n) Source Operators report an error on overflow and underflow Ord (Index n) Source KnownNat n => Read (Index n) Source None of the `Read` class' methods are synthesisable. KnownNat n => Real (Index n) Source Show (Index n) Source KnownNat n => Arbitrary (Index n) Source KnownNat n => CoArbitrary (Index n) Source KnownNat n => Default (Index n) Source NFData (Index n) Source KnownNat n => Lift (Index n) Source KnownNat n => BitPack (Index n) Source Bundle (Index n) Source ExtendingNum (Index m) (Index n) Source type Unbundled' clk (Index n) = Signal' clk (Index n) type BitSize (Index n) = CLog 2 n Source type AResult (Index m) (Index n) = Index ((-) ((+) m n) 1) Source type MResult (Index m) (Index n) = Index ((+) (* ((-) m 1) ((-) n 1)) 1) Source

bv2i :: KnownNat (2 ^ n) => BitVector n -> Index (2 ^ n) Source

An alternative implementation of `unpack` for the `Index` data type; for when you know the size of the `BitVector` and want to determine the size of the `Index`.

That is, the type of `unpack` is:

```unpack :: `BitVector` (`CLog` 2 n) -> `Index` n
```

And is useful when you know the size of the `Index`, and want to get a value from a `BitVector` that is large enough (`CLog 2 n`) enough to hold an `Index`. Note that `unpack` can fail at run-time when the value inside the `BitVector` is higher than 'n-1'.

`bv2i` on the other hand will never fail at run-time, because the `BitVector` argument determines the size.