reduce¶
Performs reduction operations on Queue
data like calculating a sum of all Queue
elements, or like calculating XOR checksum.
-
reduce
(din: Queue, init, *, f) → init¶ Calculates a reduction of an input
Queue
, using the binary operationf
and the initial valueinit
. The output data type, as well as the internal register, are the same as the type of theinit
input.The example shows how to calculate XOR checksum of the input
Queue
. The inputinit
has been fixed to0
, but has also been given a data typeUint[8](0)
to make sure that internal register width and output value is alsoUint[8]
drv(t=Queue[Uint[8]], seq=[[0xff, 0xff, 0xff, 0xff]]) \ | reduce(init=Uint[8](0), f=lambda x, y: x ^ y) \ | check(ref=[0])
Next example shows how to pack bits received as a
Queue
into a parallel data of the typeUint
. It also shows thatinit
input can be supplied at run time.(drv(t=Queue[Uint[8]], seq=[[0, 1, 0, 1, 0, 1, 0]]), drv(t=Uint[8], seq=[1])) \ | reduce(f=lambda x, y: (x << 1) | y) \ | check(ref=[0xaa])
-
accum
(din: Queue[Integer], init: Integer) → init¶ The
accum()
gear is a convenience gear for calculating the sum of all elements of the inputQueue
. It relies on thereduce()
gear underneath:@gear def accum(din: Queue[Integer], init: Integer) -> b'init': return reduce(din, init, f=lambda x, y: x + y)
drv(t=Queue[Uint[4]], seq=[[0, 1, 2, 3, 4]]) \ | accum(init=Uint[8](0)) \ | check(ref=[10])