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 Figure 6:.

Block diagram outlining convolutional de-interleaver implementation.

Figure 6: 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>
  <!-- LINT EXCEPTION: xml_004: 1: Single character name can be upper case -->
  <property name="N" type="uchar" default="12" parameter="true" description="Number of delay lines."/>
  <!-- LINT EXCEPTION: xml_004: 1: Single character name can be upper case -->
  <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

  • N: Number of delay lines.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 12

  • D: The depth of the delay line shift registers.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 17

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.comp.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 symbols were de-interleaved correctly and that the data in the original order is recovered.

Tested platforms: None

Component testing not completed.