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).
Components components
- Chan Select (
chan_select) - 16-Channel Folded Carrier Recovery (
cr_x16) - Decimate-by-N (
decimate3) - Differential Soft Decision, 16-Channel Folded (
dsd_x16) - Frame Merge 4 (
frame_merge4) - Framer 16 (
framer16) - Frame Synchronizer, 16-Channel Folded (
fs_x16) - MSK Decode x16 Back-End (
msk_decode_x16) - MSK Demod x16 (
msk_demod_x16) - Tag Select (
tag_select) - 16-Channel Folded Symbol Timing Recovery (
ted_x16) - Burst Detect x16 (
bd_x16) - Polyphase Channelizer (
channelizer) - MSK Demodulator (
msk_demod) - MSK Modulator (
msk_mod)