clash-prelude-1.7.0: Clash: a functional hardware description language - Prelude library
Copyright(C) 2013-2016 University of Twente
2016 Myrtle Software Ltd
2021-2023 QBayLogic B.V.
LicenseBSD2 (see the file LICENSE)
MaintainerQBayLogic B.V. <devops@qbaylogic.com>
Safe HaskellUnsafe
LanguageHaskell2010
Extensions
  • Cpp
  • UndecidableInstances
  • MonoLocalBinds
  • TemplateHaskell
  • TemplateHaskellQuotes
  • ScopedTypeVariables
  • BangPatterns
  • TypeFamilies
  • ViewPatterns
  • DataKinds
  • InstanceSigs
  • StandaloneDeriving
  • DeriveDataTypeable
  • DeriveFunctor
  • DeriveTraversable
  • DeriveFoldable
  • DeriveGeneric
  • DefaultSignatures
  • DeriveAnyClass
  • DeriveLift
  • DerivingStrategies
  • ConstrainedClassMethods
  • MultiParamTypeClasses
  • MagicHash
  • KindSignatures
  • RoleAnnotations
  • PostfixOperators
  • TupleSections
  • TypeOperators
  • ExplicitNamespaces
  • ExplicitForAll
  • MultiWayIf
  • BinaryLiterals
  • TypeApplications

Clash.Sized.Internal.Signed

Description

 
Synopsis

Datatypes

newtype Signed (n :: Nat) Source #

Arbitrary-width signed integer represented by n bits, including the sign bit

Uses standard 2-complements representation. Meaning that, given n bits, a Signed n number has a range of: [-(2^(n-1)) .. 2^(n-1)-1] for n > 0. When n = 0, both the min and max bound are 0.

  • NB: The usual Haskell method of converting an integral numeric type to another, fromIntegral, is not well suited for Clash as it will go through Integer which is arbitrarily bounded in HDL. Instead use bitCoerce and the Resize class.
  • NB: The Num operators perform wrap-around on overflow. If you want saturation on overflow, check out the SaturatingNum class.
>>> maxBound :: Signed 3
3
>>> minBound :: Signed 3
-4
>>> read (show (minBound :: Signed 3)) :: Signed 3
-4
>>> 1 + 2 :: Signed 3
3
>>> 2 + 3 :: Signed 3
-3
>>> (-2) + (-3) :: Signed 3
3
>>> 2 * 3 :: Signed 4
6
>>> 2 * 4 :: Signed 4
-8
>>> (2 :: Signed 3) `mul` (4 :: Signed 4) :: Signed 7
8
>>> (2 :: Signed 3) `add` (3 :: Signed 3) :: Signed 4
5
>>> (-2 :: Signed 3) `add` (-3 :: Signed 3) :: Signed 4
-5
>>> satAdd SatSymmetric 2 3 :: Signed 3
3
>>> satAdd SatSymmetric (-2) (-3) :: Signed 3
-3

Signed has the type role

>>> :i Signed
type role Signed nominal
...

as it is not safe to coerce between different width Signed. To change the width, use the functions in the Resize class.

Constructors

S

The constructor, S, and the field, unsafeToInteger, are not synthesizable.

Instances

Instances details
Resize Signed Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

resize :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Signed a -> Signed b Source #

extend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Signed a -> Signed (b + a) Source #

zeroExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Signed a -> Signed (b + a) Source #

signExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Signed a -> Signed (b + a) Source #

truncateB :: forall (a :: Nat) (b :: Nat). KnownNat a => Signed (a + b) -> Signed a Source #

KnownNat n => Lift (Signed n :: Type) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

lift :: Signed n -> Q Exp #

liftTyped :: Signed n -> Q (TExp (Signed n)) #

KnownNat n => Bounded (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

minBound :: Signed n #

maxBound :: Signed n #

KnownNat n => Enum (Signed n) Source #

The functions: enumFrom, enumFromThen, enumFromTo, and enumFromThenTo, are not synthesizable.

Instance details

Defined in Clash.Sized.Internal.Signed

Methods

succ :: Signed n -> Signed n #

pred :: Signed n -> Signed n #

toEnum :: Int -> Signed n #

fromEnum :: Signed n -> Int #

enumFrom :: Signed n -> [Signed n] #

enumFromThen :: Signed n -> Signed n -> [Signed n] #

enumFromTo :: Signed n -> Signed n -> [Signed n] #

enumFromThenTo :: Signed n -> Signed n -> Signed n -> [Signed n] #

Eq (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

(==) :: Signed n -> Signed n -> Bool #

(/=) :: Signed n -> Signed n -> Bool #

KnownNat n => Integral (Signed n) Source #

NB: toInteger/fromIntegral can cause unexpected truncation, as Integer is arbitrarily bounded during synthesis. Prefer bitCoerce and the Resize class.

Instance details

Defined in Clash.Sized.Internal.Signed

Methods

quot :: Signed n -> Signed n -> Signed n #

rem :: Signed n -> Signed n -> Signed n #

div :: Signed n -> Signed n -> Signed n #

mod :: Signed n -> Signed n -> Signed n #

quotRem :: Signed n -> Signed n -> (Signed n, Signed n) #

divMod :: Signed n -> Signed n -> (Signed n, Signed n) #

toInteger :: Signed n -> Integer #

KnownNat n => Data (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Signed n -> c (Signed n) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Signed n) #

toConstr :: Signed n -> Constr #

dataTypeOf :: Signed n -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Signed n)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Signed n)) #

gmapT :: (forall b. Data b => b -> b) -> Signed n -> Signed n #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Signed n -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Signed n -> r #

gmapQ :: (forall d. Data d => d -> u) -> Signed n -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Signed n -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Signed n -> m (Signed n) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Signed n -> m (Signed n) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Signed n -> m (Signed n) #

KnownNat n => Num (Signed n) Source #

Operators do wrap-around on overflow

NB: fromInteger/fromIntegral can cause unexpected truncation, as Integer is arbitrarily bounded during synthesis. Prefer bitCoerce and the Resize class.

Instance details

Defined in Clash.Sized.Internal.Signed

Methods

(+) :: Signed n -> Signed n -> Signed n #

(-) :: Signed n -> Signed n -> Signed n #

(*) :: Signed n -> Signed n -> Signed n #

negate :: Signed n -> Signed n #

abs :: Signed n -> Signed n #

signum :: Signed n -> Signed n #

fromInteger :: Integer -> Signed n #

Ord (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

compare :: Signed n -> Signed n -> Ordering #

(<) :: Signed n -> Signed n -> Bool #

(<=) :: Signed n -> Signed n -> Bool #

(>) :: Signed n -> Signed n -> Bool #

(>=) :: Signed n -> Signed n -> Bool #

max :: Signed n -> Signed n -> Signed n #

min :: Signed n -> Signed n -> Signed n #

KnownNat n => Read (Signed n) Source #

None of the Read class' methods are synthesizable.

Instance details

Defined in Clash.Sized.Internal.Signed

KnownNat n => Real (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

toRational :: Signed n -> Rational #

Show (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

showsPrec :: Int -> Signed n -> ShowS #

show :: Signed n -> String #

showList :: [Signed n] -> ShowS #

KnownNat n => Ix (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

range :: (Signed n, Signed n) -> [Signed n] #

index :: (Signed n, Signed n) -> Signed n -> Int #

unsafeIndex :: (Signed n, Signed n) -> Signed n -> Int #

inRange :: (Signed n, Signed n) -> Signed n -> Bool #

rangeSize :: (Signed n, Signed n) -> Int #

unsafeRangeSize :: (Signed n, Signed n) -> Int #

Generic (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Associated Types

type Rep (Signed n) :: Type -> Type #

Methods

from :: Signed n -> Rep (Signed n) x #

to :: Rep (Signed n) x -> Signed n #

KnownNat n => Arbitrary (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

arbitrary :: Gen (Signed n) #

shrink :: Signed n -> [Signed n] #

KnownNat n => CoArbitrary (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

coarbitrary :: Signed n -> Gen b -> Gen b #

KnownNat n => PrintfArg (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

KnownNat n => Bits (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

(.&.) :: Signed n -> Signed n -> Signed n #

(.|.) :: Signed n -> Signed n -> Signed n #

xor :: Signed n -> Signed n -> Signed n #

complement :: Signed n -> Signed n #

shift :: Signed n -> Int -> Signed n #

rotate :: Signed n -> Int -> Signed n #

zeroBits :: Signed n #

bit :: Int -> Signed n #

setBit :: Signed n -> Int -> Signed n #

clearBit :: Signed n -> Int -> Signed n #

complementBit :: Signed n -> Int -> Signed n #

testBit :: Signed n -> Int -> Bool #

bitSizeMaybe :: Signed n -> Maybe Int #

bitSize :: Signed n -> Int #

isSigned :: Signed n -> Bool #

shiftL :: Signed n -> Int -> Signed n #

unsafeShiftL :: Signed n -> Int -> Signed n #

shiftR :: Signed n -> Int -> Signed n #

unsafeShiftR :: Signed n -> Int -> Signed n #

rotateL :: Signed n -> Int -> Signed n #

rotateR :: Signed n -> Int -> Signed n #

popCount :: Signed n -> Int #

KnownNat n => FiniteBits (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

KnownNat n => Default (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

def :: Signed n #

NFData (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

rnf :: Signed n -> () #

KnownNat n => Ixed (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

ix :: Index (Signed n) -> Traversal' (Signed n) (IxValue (Signed n)) #

KnownNat n => SaturatingNum (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

NFDataX (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

ShowX (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

KnownNat n => BitPack (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Associated Types

type BitSize (Signed n) :: Nat Source #

KnownNat n => Parity (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Methods

even :: Signed n -> Bool Source #

odd :: Signed n -> Bool Source #

Bundle (Signed n) Source # 
Instance details

Defined in Clash.Signal.Bundle

Associated Types

type Unbundled dom (Signed n) = (res :: Type) Source #

Methods

bundle :: forall (dom :: Domain). Unbundled dom (Signed n) -> Signal dom (Signed n) Source #

unbundle :: forall (dom :: Domain). Signal dom (Signed n) -> Unbundled dom (Signed n) Source #

Bundle (Signed n) Source # 
Instance details

Defined in Clash.Signal.Delayed.Bundle

Associated Types

type Unbundled dom d (Signed n) = (res :: Type) Source #

Methods

bundle :: forall (dom :: Domain) (d :: Nat). Unbundled dom d (Signed n) -> DSignal dom d (Signed n) Source #

unbundle :: forall (dom :: Domain) (d :: Nat). DSignal dom d (Signed n) -> Unbundled dom d (Signed n) Source #

KnownNat n => Counter (Signed n) Source # 
Instance details

Defined in Clash.Class.Counter.Internal

AutoReg (Signed n) Source # 
Instance details

Defined in Clash.Class.AutoReg.Internal

Methods

autoReg :: forall (dom :: Domain). (HasCallStack, KnownDomain dom) => Clock dom -> Reset dom -> Enable dom -> Signed n -> Signal dom (Signed n) -> Signal dom (Signed n) Source #

KnownNat m => Exp (Signed m) Source # 
Instance details

Defined in Clash.Class.Exp

Associated Types

type ExpResult (Signed m) n Source #

Methods

(^) :: forall (n :: Nat). Signed m -> SNat n -> ExpResult (Signed m) n Source #

ExtendingNum (Signed m) (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

Associated Types

type AResult (Signed m) (Signed n) Source #

type MResult (Signed m) (Signed n) Source #

Methods

add :: Signed m -> Signed n -> AResult (Signed m) (Signed n) Source #

sub :: Signed m -> Signed n -> AResult (Signed m) (Signed n) Source #

mul :: Signed m -> Signed n -> MResult (Signed m) (Signed n) Source #

type Unbundled dom d (Signed n) Source # 
Instance details

Defined in Clash.Signal.Delayed.Bundle

type Unbundled dom d (Signed n) = DSignal dom d (Signed n)
type Unbundled dom (Signed n) Source # 
Instance details

Defined in Clash.Signal.Bundle

type Unbundled dom (Signed n) = Signal dom (Signed n)
type TryDomain t (Signed n) Source # 
Instance details

Defined in Clash.Class.HasDomain.HasSingleDomain

type TryDomain t (Signed n) = 'NotFound
type Rep (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

type Rep (Signed n) = D1 ('MetaData "Signed" "Clash.Sized.Internal.Signed" "clash-prelude-1.7.0-inplace" 'True) (C1 ('MetaCons "S" 'PrefixI 'True) (S1 ('MetaSel ('Just "unsafeToInteger") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer)))
type Index (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

type Index (Signed n) = Int
type IxValue (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

type IxValue (Signed n) = Bit
type BitSize (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

type BitSize (Signed n) = n
type ExpResult (Signed m) n Source # 
Instance details

Defined in Clash.Class.Exp

type ExpResult (Signed m) n = Signed (Max 2 (m * n))
type AResult (Signed m) (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

type AResult (Signed m) (Signed n) = Signed (Max m n + 1)
type MResult (Signed m) (Signed n) Source # 
Instance details

Defined in Clash.Sized.Internal.Signed

type MResult (Signed m) (Signed n) = Signed (m + n)

Accessors

Length information

Type classes

BitPack

pack# :: forall n. KnownNat n => Signed n -> BitVector n Source #

unpack# :: forall n. KnownNat n => BitVector n -> Signed n Source #

Eq

eq# :: Signed n -> Signed n -> Bool Source #

neq# :: Signed n -> Signed n -> Bool Source #

Ord

lt# :: Signed n -> Signed n -> Bool Source #

ge# :: Signed n -> Signed n -> Bool Source #

gt# :: Signed n -> Signed n -> Bool Source #

le# :: Signed n -> Signed n -> Bool Source #

Enum

toEnum# :: forall n. KnownNat n => Int -> Signed n Source #

fromEnum# :: forall n. KnownNat n => Signed n -> Int Source #

Enum (not synthesizable)

enumFrom# :: forall n. KnownNat n => Signed n -> [Signed n] Source #

enumFromThen# :: forall n. KnownNat n => Signed n -> Signed n -> [Signed n] Source #

enumFromTo# :: forall n. KnownNat n => Signed n -> Signed n -> [Signed n] Source #

enumFromThenTo# :: forall n. KnownNat n => Signed n -> Signed n -> Signed n -> [Signed n] Source #

Bounded

minBound# :: forall n. KnownNat n => Signed n Source #

maxBound# :: forall n. KnownNat n => Signed n Source #

Num

(+#) :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

(-#) :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

(*#) :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

negate# :: forall n. KnownNat n => Signed n -> Signed n Source #

abs# :: forall n. KnownNat n => Signed n -> Signed n Source #

fromInteger# :: forall n. KnownNat n => Integer -> Signed (n :: Nat) Source #

ExtendingNum

plus# :: Signed m -> Signed n -> Signed (Max m n + 1) Source #

minus# :: Signed m -> Signed n -> Signed (Max m n + 1) Source #

times# :: Signed m -> Signed n -> Signed (m + n) Source #

Integral

quot# :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

rem# :: Signed n -> Signed n -> Signed n Source #

div# :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

mod# :: Signed n -> Signed n -> Signed n Source #

Bits

and# :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

or# :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

xor# :: forall n. KnownNat n => Signed n -> Signed n -> Signed n Source #

complement# :: forall n. KnownNat n => Signed n -> Signed n Source #

shiftL# :: forall n. KnownNat n => Signed n -> Int -> Signed n Source #

shiftR# :: forall n. KnownNat n => Signed n -> Int -> Signed n Source #

rotateL# :: forall n. KnownNat n => Signed n -> Int -> Signed n Source #

rotateR# :: forall n. KnownNat n => Signed n -> Int -> Signed n Source #

Resize

resize# :: forall m n. (KnownNat n, KnownNat m) => Signed n -> Signed m Source #

truncateB# :: forall m n. KnownNat m => Signed (m + n) -> Signed m Source #

SaturatingNum