blarney
Copyright(c) Matthew Naylor 2019
(c) Alexandre Joannou 2019-2021
LicenseMIT
Maintainermattfn@gmail.com
Stabilityexperimental
Safe HaskellSafe-Inferred

Blarney.Queue

Description

 
Synopsis

Documentation

data Queue a Source #

Queue interface

Constructors

Queue 

Fields

Instances

Instances details
Generic (Queue a) # 
Instance details

Defined in Blarney.Queue

Associated Types

type Rep (Queue a) :: Type -> Type #

Methods

from :: Queue a -> Rep (Queue a) x #

to :: Rep (Queue a) x -> Queue a #

(Interface a, Bits a) => Interface (Queue a) # 
Instance details

Defined in Blarney.Queue

ToSink (Queue t) t #

ToSink instance for Queue

Instance details

Defined in Blarney.Queue

Methods

toSink :: Queue t -> Sink t Source #

ToSource (Queue t) t #

ToSource instance for Queue

Instance details

Defined in Blarney.Queue

Methods

toSource :: Queue t -> Source t Source #

ToSP (Queue a) a a #

ToSP instance for Queue

Instance details

Defined in Blarney.Queue

Methods

toSP :: Queue a -> SP a a Source #

type Rep (Queue a) # 
Instance details

Defined in Blarney.Queue

type Rep (Queue a) = D1 ('MetaData "Queue" "Blarney.Queue" "main" 'False) (C1 ('MetaCons "Queue" 'PrefixI 'True) ((S1 ('MetaSel ('Just "notEmpty") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Bit 1)) :*: (S1 ('MetaSel ('Just "notFull") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Bit 1)) :*: S1 ('MetaSel ('Just "enq") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a -> Action ())))) :*: ((S1 ('MetaSel ('Just "deq") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Action ())) :*: S1 ('MetaSel ('Just "canDeq") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Bit 1))) :*: (S1 ('MetaSel ('Just "first") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "clear") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Action ()))))))

makeQueue :: Bits a => Module (Queue a) Source #

A full-throughput 2-element queue implemented using 2 registers:

  • No combinatorial paths between sides.
  • There's a mux on the enqueue path.

makeSizedQueue :: Bits a => Int -> Module (Queue a) Source #

A full-throughput N-element queue

data SizedQueueConfig a Source #

Config options for a sized queue

Constructors

SizedQueueConfig 

Fields

makeSizedQueueConfig :: Bits a => SizedQueueConfig a -> Module (Queue a) Source #

Sized queue with config options

makeSizedQueueCore :: Bits a => Int -> Module (Queue a) Source #

This one has no output buffer (low latency, but not great for Fmax)

data ShiftQueueMode Source #

There are modes of operation for the shift queue (below):

  1. Optimise throughput: full throughput, but there's a combinatorial path between notFull and deq
  2. Optimise Fmax: no combinatorial paths between sides, but max throughput = N/(N+1), where N is the queue capacity

Constructors

OptFmax 
OptThroughput 

Instances

Instances details
Eq ShiftQueueMode # 
Instance details

Defined in Blarney.Queue

makeShiftQueue :: Bits a => Int -> Module (Queue a) Source #

An N-element queue implemented using a shift register:

  • No muxes: input element goes straight to a register and output element comes straight from a register.
  • N-cycle latency between enqueuing an element and being able to dequeue it, where N is the queue capacity.

This version optimised for Fmax.

makePipelineQueue :: Bits a => Int -> Module (Queue a) Source #

This version is optimised for throughput

makeShiftQueueCore Source #

Arguments

:: Bits a 
=> ShiftQueueMode

Optimise for throughput or Fmax?

-> Int

Size of queue

-> Module (Queue a, [Option a])

Return a standard queue interface, but also the contents to be viewed

makeBypassQueue :: Bits a => Module (Queue a) Source #

Single element bypass queue

makeSinkBuffer :: Bits a => Module (Queue a) -> Sink a -> Module (Sink a) Source #

Insert a queue in front of a sink