Word Serializer
Wide-to-narrow word gearbox. Takes one wide input word (single DV_IN pulse) and streams it out as several narrow output chunks, one per clock cycle, MSB-word-first or LSB-word-first. The input width must be an integer multiple of the output width. Full DV / BUSY handshake with reset.
Introduction
The Word Serializer block converts one wide word into a sequence of narrower chunks. It is the counterpart of the Word Deserializer.
When a wide word is published on IN (with a one-cycle DV_IN pulse),
the block splits it into InputSize / OutputSize chunks and emits them on
OUT, one chunk per clock cycle, each accompanied by a DV_OUT pulse.
One input handshake:
- IN + DV_IN + BUSY_IN - the wide source word.
One output handshake:
- OUT + DV_OUT + BUSY_OUT - toward the downstream module.
Pin Description
Back-pressure toward the source.
- HIGH (1): a word is still being serialized OR the downstream is asserting BUSY_OUT. The source should not publish a new word.
- LOW (0): idle and ready to accept a new wide word.
Properties
Width of the wide IN word. Must be an integer multiple of, and larger than, the output word size
Width in bits of the wide IN word. Range: 2 to 4096, default 64. Must be a strict integer multiple of the output word size (checked on confirm). Changing this value re-designs the symbol.Default: 64
Range: 2 – 4096
Width of each narrow OUT chunk. Must be an integer submultiple of, and smaller than, the input word size
Width in bits of each narrow OUT chunk. Range: 1 to 4096, default 32. Must be a strict integer submultiple of the input word size (checked on confirm). Changing this value re-designs the symbol.Default: 32
Range: 1 – 4096
Emit the most-significant chunk first (MSB word first) or the least-significant chunk first (LSB word first)
Order in which the chunks leave the block:
- MSB word first (default): the most-significant chunk of the input word is emitted first.
- LSB word first: the least-significant chunk is emitted first.
Default: MSB word first
Options: MSB word first LSB word first
Usage
Example
With Input word size = 64, Output word size = 32 the block produces two chunks per word:
IN = 0xABBA123498765432 (one DV_IN pulse)
Chunk order = MSB word first -> OUT = 0xABBA1234 , then 0x98765432
Chunk order = LSB word first -> OUT = 0x98765432 , then 0xABBA1234
With Input = 64, Output = 16 it produces four chunks
(0xABBA, 0x1234, 0x9876, 0x5432 in MSB-first order).
Constraint
Input word size must be a strict integer multiple of the Output word size (and therefore larger). This is enforced when the property window is confirmed: an invalid pair (e.g. 64 / 48) is rejected with an explanatory message and the window stays open.
Handshake rules
Both handshakes follow the standard SCI-Compiler DV / BUSY protocol:
- The source raises DV_IN = ‘1’ for one clock cycle to publish a wide word. It is accepted only while the block is idle and the downstream is free.
- BUSY_IN is asserted while a word is being serialized (chunks still pending) or while the downstream asserts BUSY_OUT. In both cases the source must not publish a new word.
- Each cycle with BUSY_OUT = ‘0’ and chunks still pending emits one chunk on OUT and pulses DV_OUT.
- BUSY_OUT = ‘1’ freezes the block: the internal shift register and the chunk counter keep their value and no chunk leaves.
Timing
All outputs are registered and update on the rising edge of clk. The first chunk appears one clock after the word is latched; the remaining chunks follow on consecutive clocks (longer if BUSY_OUT stalls the stream). Throughput is up to one chunk per clock.
Reset
Reset is active-high and synchronous. RESET = ‘1’ clears the shift register, the chunk counter and the output, so a downstream flush never leaves a half-serialized word suspended inside the block.
Resources & Timing
-
Latency: 1 clock from load to first chunk, then 1 clock per chunk
-
Throughput: Up to 1 chunk per clock cycle when the downstream is not busy
Fully synchronous, no external primitives, no FIFO. Uses one InputSize shift register and a small chunk counter. Resource usage scales with InputSize.