Convolutional De-interleaver (convolutional_deinterleaver_us)

Takes in symbols that are of the data type, unsigned short, and undoes rearrangement done by a convolutional interleaver.

Tested platforms include xsim, e31x.

Design

The convolutional de-interleaver component is used in a receive path to undue the rearranging of symbols done by a convolutional interleaver.

The convolutional de-interleaver is constructed by having N different delay lines with each line having a smaller delay than the previous line. Each new input symbol is placed on a different delay line. The last delay line has 0 delay. The number of delay lines is defined as N and the depth of the delay line shift registers is defined as D. N should be set to a value greater than 1.

The convolution de-interleaver should have the same parameter values as the convolutional interleaver used in the transmit path.

A block diagram representation of the implementation is given in convolutional_deinterleaver_us-diagram.

Block diagram outlining convolutional de-interleaver implementation.

Interface

<?xml version="1.0"?>
<!-- This file is protected by Copyright. Please refer to the COPYRIGHT file
     distributed with this source distribution.

     This file is part of OpenCPI <http://www.opencpi.org>

     OpenCPI is free software: you can redistribute it and/or modify it under
     the terms of the GNU Lesser General Public License as published by the Free
     Software Foundation, either version 3 of the License, or (at your option)
     any later version.

     OpenCPI is distributed in the hope that it will be useful, but WITHOUT ANY
     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
     more details.

     You should have received a copy of the GNU Lesser General Public License
     along with this program. If not, see <http://www.gnu.org/licenses/>. -->
<componentspec>
  <property name='N' type='uchar' default='12' parameter='true' description='Number of delay lines.'/>
  <property name='D' type='uchar' default='17' parameter='true' description='The depth of the delay line shift registers.'/>
  <port name='input'  producer='false' protocol='ushort_timed_sample-prot'/>
  <port name='output' producer='true'  protocol='ushort_timed_sample-prot'/>
</componentspec>

Ports

Inputs:

  • input: Primary input samples port.

    • Protocol: ushort_timed_sample-prot

    • Optional: False

Outputs:

  • output: Primary output samples port.

    • Protocol: ushort_timed_sample-prot

    • Optional: False

Opcode handling

The convolutional de-interleaver de-interleaves data with sample opcodes only.

All other opcodes pass through this component without any effect..

Properties

All of the properties for this component are parameter properties. See the “Parameters” section for details.

Parameters

Implementations

  • convolutional_deinterleaver_us (HDL)

    Implementation of a convolutional de-interleaver.

Example application

<?xml version="1.0"?>
<!-- This file is protected by Copyright. Please refer to the COPYRIGHT file
     distributed with this source distribution.

     This file is part of OpenCPI <http://www.opencpi.org>

     OpenCPI is free software: you can redistribute it and/or modify it under
     the terms of the GNU Lesser General Public License as published by the Free
     Software Foundation, either version 3 of the License, or (at your option)
     any later version.

     OpenCPI is distributed in the hope that it will be useful, but WITHOUT ANY
     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
     more details.

     You should have received a copy of the GNU Lesser General Public License
     along with this program. If not, see <http://www.gnu.org/licenses/>. -->
<application done="file_write">
  <instance component="ocpi.core.file_read" connect="convolutional_deinterleaver_us">
    <property name="filename" value="input.bin"/>
    <property name='messageSize' value='16384'/>
    <property name='messagesInFile' value='true'/>
  </instance>
  <instance component="ocpi.sdr.communication.convolutional_deinterleaver_us" connect="file_write">
  </instance>
  <instance component="ocpi.core.file_write">
    <property name="filename" value="output.bin"/>
  </instance>
</application>

Dependencies

The dependencies for this worker are:

  • shift_reg.vhd

  • convolutional_delay_lines.vhd

There is also a dependency on:

  • ieee.std_logic_1164

  • ieee.numeric_std

  • ocpi.util.all;

Limitations

Limitations of convolutional_deinterleaver_us are:

  • None.

Testing

This component test suite uses the OpenCPI unit test framework. The unit test sends symbols that would have been interleaved by a convolutional interleaver. It is then verified to make sure that the symobols were de-interleaved correctly and that the data in the original order is recovered.