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:.
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-protOptional:
False
Outputs:
output: Primary output samples port.Protocol:
ushort_timed_sample-protOptional:
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:
ucharAccess:
Parameter:
TrueWritable:
FalseInitial:
FalseVolatile:
False
Default value:
12
D: The depth of the delay line shift registers.Type:
ucharAccess:
Parameter:
TrueWritable:
FalseInitial:
FalseVolatile:
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.