Opulent Voice Component Library

HDL components for the Opulent Voice (OPV) MSK waveform: the transmit modulator, the receive demodulator, and the workers of the folded 64-channel receive chain that runs many channels through one datapath so that 64 demodulators fit on a single device.

The folded receive chain is:

ADC -> channelizer -> decimate3 -> bd_x16 -> cr_x16 -> ted_x16 ->
       dsd_x16 -> fs_x16 -> msk_decode_x16 -> frame_merge4 -> frames

Two time-sharing strategies are used (see the per-component pages for detail):

  • State-RAM fold (bd_x16, cr_x16, ted_x16, dsd_x16, fs_x16) — one physical datapath processes 16 channels from the channelizer’s positional 16-sample frame, with each channel’s loop/filter state held in RAMs indexed by channel.

  • Resource-share fold (msk_decode_x16) — soft decisions are collected in a per-channel BRAM buffer and decoded by one Viterbi engine time-shared 16:1.

Supporting workers provide framing (framer16), decoded-stream merging for a single DMA (frame_merge4), and diagnostic channel taps (chan_select for positional streams, tag_select for channel-tagged streams).