Implementation of CRC and Viterbi algorithm on FPGA

Similar documents
BER Performance Comparison of HOVA and SOVA in AWGN Channel

FPGA Implementation of Convolutional Encoder And Hard Decision Viterbi Decoder

Hardware Implementation of Viterbi Decoder for Wireless Applications

Implementation and performance analysis of convolution error correcting codes with code rate=1/2.

FPGA Based Implementation of Convolutional Encoder- Viterbi Decoder Using Multiple Booting Technique

SDR Implementation of Convolutional Encoder and Viterbi Decoder

Design of Low Power Efficient Viterbi Decoder

An Implementation of a Forward Error Correction Technique using Convolution Encoding with Viterbi Decoding

The Design of Efficient Viterbi Decoder and Realization by FPGA

Design and Implementation of Encoder for (15, k) Binary BCH Code Using VHDL

FPGA Implementation of Convolutional Encoder and Adaptive Viterbi Decoder B. SWETHA REDDY 1, K. SRINIVAS 2

Adaptive decoding of convolutional codes

FPGA Implementation of Viterbi Decoder

An Efficient Viterbi Decoder Architecture

LUT Optimization for Memory Based Computation using Modified OMS Technique

THE USE OF forward error correction (FEC) in optical networks

Design and FPGA Implementation of 100Gbit/s Scrambler Architectures for OTN Protocol Chethan Kumar M 1, Praveen Kumar Y G 2, Dr. M. Z. Kurian 3.

Design Project: Designing a Viterbi Decoder (PART I)

A Robust Turbo Codec Design for Satellite Communications

A Compact and Fast FPGA Based Implementation of Encoding and Decoding Algorithm Using Reed Solomon Codes

Performance Analysis of Convolutional Encoder and Viterbi Decoder Using FPGA

Design of Polar List Decoder using 2-Bit SC Decoding Algorithm V Priya 1 M Parimaladevi 2

Design And Implementation Of Coding Techniques For Communication Systems Using Viterbi Algorithm * V S Lakshmi Priya 1 Duggirala Ramakrishna Rao 2

VHDL IMPLEMENTATION OF TURBO ENCODER AND DECODER USING LOG-MAP BASED ITERATIVE DECODING

Implementation of a turbo codes test bed in the Simulink environment

Performance of a Low-Complexity Turbo Decoder and its Implementation on a Low-Cost, 16-Bit Fixed-Point DSP

Operating Bio-Implantable Devices in Ultra-Low Power Error Correction Circuits: using optimized ACS Viterbi decoder

A High- Speed LFSR Design by the Application of Sample Period Reduction Technique for BCH Encoder

FPGA Implementaion of Soft Decision Viterbi Decoder

NUMEROUS elaborate attempts have been made in the

A Novel Turbo Codec Encoding and Decoding Mechanism

Fully Pipelined High Speed SB and MC of AES Based on FPGA

FPGA Implementation OF Reed Solomon Encoder and Decoder

Objectives. Combinational logics Sequential logics Finite state machine Arithmetic circuits Datapath

Optimization of memory based multiplication for LUT

CONVOLUTIONAL CODING

Error Performance Analysis of a Concatenated Coding Scheme with 64/256-QAM Trellis Coded Modulation for the North American Cable Modem Standard

[Krishna*, 4.(12): December, 2015] ISSN: (I2OR), Publication Impact Factor: 3.785

Performance Improvement of AMBE 3600 bps Vocoder with Improved FEC

An Efficient Reduction of Area in Multistandard Transform Core

Keywords Xilinx ISE, LUT, FIR System, SDR, Spectrum- Sensing, FPGA, Memory- optimization, A-OMS LUT.

Communication Lab. Assignment On. Bi-Phase Code and Integrate-and-Dump (DC 7) MSc Telecommunications and Computer Networks Engineering

VITERBI DECODER FOR NASA S SPACE SHUTTLE S TELEMETRY DATA

Synthesis Techniques for Pseudo-Random Built-In Self-Test Based on the LFSR

Performance Evolution of 16 Bit Processor in FPGA using State Encoding Techniques

Memory efficient Distributed architecture LUT Design using Unified Architecture

LUT Optimization for Distributed Arithmetic-Based Block Least Mean Square Adaptive Filter

Design and Implementation of Data Scrambler & Descrambler System Using VHDL

Design and Implementation of Partial Reconfigurable Fir Filter Using Distributed Arithmetic Architecture

Serial FIR Filter. A Brief Study in DSP. ECE448 Spring 2011 Tuesday Section 15 points 3/8/2011 GEORGE MASON UNIVERSITY.

Enhancing Performance in Multiple Execution Unit Architecture using Tomasulo Algorithm

TEST PATTERN GENERATION USING PSEUDORANDOM BIST

CONVOLUTION ENCODING AND VITERBI DECODING BASED ON FPGA USING VHDL

On the design of turbo codes with convolutional interleavers

Available online at ScienceDirect. Procedia Computer Science 46 (2015 ) Aida S Tharakan a *, Binu K Mathew b

Novel Correction and Detection for Memory Applications 1 B.Pujita, 2 SK.Sahir

AbhijeetKhandale. H R Bhagyalakshmi

BLOCK CODING & DECODING

Frame Synchronization in Digital Communication Systems

International Journal of Scientific & Engineering Research, Volume 6, Issue 3, March-2015 ISSN DESIGN OF MB-OFDM SYSTEM USING HDL

MODULE 3. Combinational & Sequential logic

COE328 Course Outline. Fall 2007

Efficient Method for Look-Up-Table Design in Memory Based Fir Filters

Analysis of Different Pseudo Noise Sequences

ISSN:

Design on CIC interpolator in Model Simulator

IMPLEMENTATION OF USB TRANSCEIVER MACROCELL INTERFACE

COPY RIGHT. To Secure Your Paper As Per UGC Guidelines We Are Providing A Electronic Bar Code

An MFA Binary Counter for Low Power Application

An Efficient High Speed Wallace Tree Multiplier

A Review on Hybrid Adders in VHDL Payal V. Mawale #1, Swapnil Jain *2, Pravin W. Jaronde #3

AN UNEQUAL ERROR PROTECTION SCHEME FOR MULTIPLE INPUT MULTIPLE OUTPUT SYSTEMS. M. Farooq Sabir, Robert W. Heath and Alan C. Bovik

LUT OPTIMIZATION USING COMBINED APC-OMS TECHNIQUE

Design of Memory Based Implementation Using LUT Multiplier

Optimization of Multi-Channel BCH Error Decoding for Common Cases. Russell Dill Master's Thesis Defense April 20, 2015

Cyclic Channel Coding algorithm for Original and Received Voice Signal at 8 KHz using BER performance through Additive White Gaussian Noise Channel

Logic Design. Flip Flops, Registers and Counters

Design of BIST with Low Power Test Pattern Generator

LFSRs as Functional Blocks in Wireless Applications Author: Stephen Lim and Andy Miller

LUT Design Using OMS Technique for Memory Based Realization of FIR Filter

VHDL Design and Implementation of FPGA Based Logic Analyzer: Work in Progress

MODEL-BASED DESIGN OF LTE BASEBAND PROCESSOR USING XILINX SYSTEM GENERATOR IN FPGA

6.111 Project Proposal IMPLEMENTATION. Lyne Petse Szu-Po Wang Wenting Zheng

TERRESTRIAL broadcasting of digital television (DTV)

Review paper on study of various Interleavers and their significance

Joint Optimization of Source-Channel Video Coding Using the H.264/AVC encoder and FEC Codes. Digital Signal and Image Processing Lab

An Lut Adaptive Filter Using DA

Long and Fast Up/Down Counters Pushpinder Kaur CHOUHAN 6 th Jan, 2003

COSC3213W04 Exercise Set 2 - Solutions

University of Maiduguri Faculty of Engineering Seminar Series Volume 6, december 2015

ENGG2410: Digital Design Lab 5: Modular Designs and Hierarchy Using VHDL

Viterbi Decoder User Guide

Application Note PG001: Using 36-Channel Logic Analyzer and 36-Channel Digital Pattern Generator for testing a 32-Bit ALU

FPGA Hardware Resource Specific Optimal Design for FIR Filters

DESIGN and IMPLETATION of KEYSTREAM GENERATOR with IMPROVED SECURITY

FPGA Implementation of DA Algritm for Fir Filter

OF AN ADVANCED LUT METHODOLOGY BASED FIR FILTER DESIGN PROCESS

FPGA Laboratory Assignment 4. Due Date: 06/11/2012

Design and Analysis of Modified Fast Compressors for MAC Unit

CHAPTER 6 ASYNCHRONOUS QUASI DELAY INSENSITIVE TEMPLATES (QDI) BASED VITERBI DECODER

Transcription:

Implementation of CRC and Viterbi algorithm on FPGA S. V. Viraktamath 1, Akshata Kotihal 2, Girish V. Attimarad 3 1 Faculty, 2 Student, Dept of ECE, SDMCET, Dharwad, 3 HOD Department of E&CE, Dayanand Sagar College of Engineering, Bangalore, Karnataka, India Email: svvmath@gmail.com Abstract Cyclic Redundancy Codes (CRC) code provides a simple, yet powerful, method for the detection of errors during digital data transmission and storage. Convolutional Coding and Decoding (CODEC) is a Forward Error Correction (FEC) technique that is particularly suited for a channel in which the transmitted signal is corrupted mainly by Additive White Gaussian Noise (AWGN). The Viterbi Algorithm (VA) has been widely applied for decoding convolutionally encoded data in digital communication systems over the last 30 years. In this paper the implementation of CRC and Viterbi decoder on FPGA is presented. CRC-32 and Viterbi hard decision decoding algorithm for rate 1/2 implemented on FPGA. Also for higher SNR at the decoder side the concept of serially concatenated CRC- Convolutional Coding (CC) with lookup table is also proposed. Keywords CRC, FPGA, Viterbi, Trellis, Constraint length. I. INTRODUCTION The evolving world of telecommunications requires increasing reliability and speed in communications. Reliability in information storage and transmission is provided by coding techniques. Information is usually coded in a bit streams and transmitted over the communication medium, channel. The communication media is prone to errors due to noise present in the analog portion of the channel. Therefore errors have to be detected and corrected while decoding. CRC has the advantages of easy coding and decoding as well as strong abilities of checking errors and correcting errors. Therefore, it was widely used in the field of communications. Reliability in information storage and transmission is provided by coding techniques. CRC is an error-detecting code designed to detect accidental changes to raw computer data, and is commonly used in digital networks and storage devices such as hard disk drives. Blocks of data entering these systems get a short check value attached, derived from the remainder of a polynomial division of their contents; on retrieval the calculation is repeated, and corrective action can be taken against presumed data corruption if the check values do not match. The CRC was invented by W. Wesley Peterson in 1961. CRC is an error detecting code that is widely used to detect corruption in blocks of data that have been transmitted or stored. The Error Control Coding techniques (ECC) rely on the systematic addition of redundant bits at the transmitting side. The task of channel coding is to encode information sent over a communication channel in such a way that in the presence of channel noise, errors can be detected and possibly corrected. There are two coding methods - backward error correction codes and forward error correction codes. Backward error correction codes requires only error detection, if an error is found then the transmitter is requested to retransmit the message. Forward error correction codes require the decoder to be capable of correcting errors. There are several error correcting codes and these are classified under two basic categories namely block codes and convolutional codes. Convolutional codes [1] differ from block codes [2] in the sense that bit streams are not partitioned into binary words instead redundancy is added continuously to the whole stream. Convolutional codes are widely used error control coding technique in channel coding because of low complexity and error controlling capability. Viterbi decoding algorithm [3, 4] is the simplest and best algorithm for decoding of convolutional codes. The Viterbi algorithm first appeared in the coding literature in a paper written by Andrew J. Viterbi in 1967 [5]. Since then, due to its easiness in implementation, it has been applied to many different areas related to decoding problems. The 8-bit parallel CRC-32 is proposed in [6] to meet the high throughput of USB3.0. Exhaustive survey of all CRC polynomials from 3 bits to 15 bits is presented in [7]. A set of 35 new polynomials in addition to 13 previously published polynomials are also described. The method that realizes the ability of multiple bits error correction using cyclic redundancy check codes is presented in [8]. The structures of 8-bit CRC are presented in [9]. The joint decoding scheme of serially concatenated CRC and convolutional code (CC) has been investigated in [10 11]. This paper is organized as follows. Section II gives the proposed work. Section III gives the CRC coding. The 35

Viterbi decoder is discussed in section IV. The results of the proposed model are discussed in section V. Next section concludes the paper. II. PROPOSED WORK The basic block diagram of a system used for the simulation is shown in Fig.1. The output of the source encoder is given to the convolutional encoder. The output of the convolutional encoder is given to the CRC encoding; the output of which will be modulated and sent on the channel. At the receiver the reverse process is done. The CRC encoding, decoding, convolutional encoding and decoding blocks are simulated and implemented on FPGA. The concept of look up table may also be used at the receiver for Viterbi decoding. Source Encoder output Convolution Encoder Source Decoder Viterbi Decoder CRC Encoding Noise CRC Decoding Fig.1 Block diagram of an proposed system III. CRC CODING Fig. 2 Block diagram of CRC Channel CRC are specifically designed to protect against common types of errors on communication channels, where they can provide quick and reasonable assurance of the integrity of messages delivered as shown in Fig.2. However, they are not suitable for protecting against intentional alteration of data. The selection of generator polynomial is the most important part of implementing the CRC algorithm. The polynomial must be chosen to maximize the error-detecting capabilities while minimizing overall collision probabilities. CRC is divided into the following types: Code CRC-12, code CRC-16, code CRC-CCITT, and code CRC-32. Code CRC-12 is usually used to send 6-bit string. Code CRC- 16 and code CRCCCITT is used to send 8-bit string, and code CRC-16 is mainly used in America, however, code CRC-CCITT is often used in European countries. Code CRC-32 is often used in a kind of synchronous transfer which is called Point to-point transfer. In the proposed system CRC-32 is simulated and implemented. The Convolutional encoder described in this system is of rate 1/2, and of constraint length-3. Programming is done in VHDL for both coding and decoding and the same is implemented on FPGA. Input to encoder is entered by the user. The output of the encoder is stored in the matrix form, and the same is fed to the decoder part. IV. CONVOLUTIONAL ENCODER AND DECODER Channel encoding and decoding considered in this paper is convolutional encoding and Viterbi decoding. Encoding and decoding algorithm are implemented on FPGA. The encoder and decoder algorithms are given below: A. Convolutional Encoder 1. Read next input bit and take it into the register by right shift by neglecting right most bit. 2. Compute two output bits by XOR operation and store the result. 3. Repeat steps 2 and 3 for all the input bits. The trellis for Viterbi decoding algorithm is shown in Fig. 3. The minimum hamming distance in the last column is zero for the received input bits, as there are no errors in the received bit. In general the minimum hamming distance should be chosen then path should be traced back. B. Viterbi Decoder 1. Calculate the output table using the generator polynomials; initialize the next state table. 2. Initialize the weight matrix of the trellis. 3. Calculate the weight matrix for the received message with the help of output table and the next state table. 4. Find the initial path and process it and find the final path or survival path in trellis. 5. Decode the message with the help of output table and next state table. The Viterbi algorithm is implemented. The constraint length is fixed in the implemented algorithm. In the trellis if the next state weights are same, proposed algorithm is smart enough to choose the correct path. There is no trace back instead while calculating the weight matrix, parallel survival path is also found hence the computation time becomes very less. The behavioral descriptions of the encoder and decoder algorithms are written using VHDL. 36

The input to and output from the system are bit streams. A (n, k, m) convolutional encoder accepts k-bit blocks of input sequence and produces n-bit blocks of output sequence. It consists of m k-stage shift registers and n modulo-2 adders. The outputs of n modulo-2 adders are sequentially sampled to produce the encoded sequence. A (2, 1, 2) convolutional encoder is considered for simulation and implementation. Basically, decoding of convolutional codes is comparison of different paths in trellis. The trellis diagram for (2, 1, 2) convolutional encoder is as shown in Fig.3. decoder outputs with errors and without errors are shown in fig. 5 and Fig. 6 respectively. Figure 4. CRC Encoder output Figure 5 CRC Decoder output without error. Fig.3. Trellis for convolutional encoder (2, 1, 2). In hard decision decoding technique, the Hamming distance is computed by simply counting how many bits are different between the received encoded bits and the actual output bits. The Hamming distance values are computed at each time instant for the paths between the states at the previous time instant and the states at the current time instant are called branch metrics. For the first time instant these results are saved as Accumulated Error Metric values, associated with the states. For the second time instant on, the accumulated error metrics will be computed by adding the previous accumulated error metrics to the current branch metrics. When two paths enter the same state, the one having the best metric (i.e. lower branch metric) is chosen, this path is called the surviving path. Then by seeing the path and using output table and next state table decoding is done. This procedure is repeated for all encoded bits and at every comparison makes a hard decision as to whether one or zero is transmitted. The output of hard decision decoder is compared with original message bits for verification. The programming environment for convolution is based on VHDL. The behavioral description is analyzed simulated and synthesized onto Xilinx FPGAs. After the description code is verified to be functionally correct by simulation, it is translated onto a Xilinx net list form. The net list is then mapped onto FPGA architecture by automatic partition, placement and routing tool to form a loadable FPGA object module. A static timing analysis tool is then applied to the object module to determine maximum operating speed. V. RESULTS AND DISCUSSION In this section, simulation results are presented. Figure 4 shows the simulated output of the CRC encoder, more Figure 6 CRC Decoder output with error. The synthesis report of encoder and decoder of CRC-32 are shown in figures 7 and 8 respectively. Figure 7: Synthesis report of CRC Encoder Figure 8: Synthesis Report of CRC Decoder The behavioral description of the Viterbi decoding algorithm is simulated and synthesized using Xilinx ISE version 6 and functionally verified on the ModelSim simulator version SE 5.5a. The simulation results of the convolution encoder are shown in Fig. 9. The encoder input is port a in the form of bits and the encoded outputs are obtained at port y. The simulation results of convolution decoder are shown in Fig. 10 and 11. The decoder receives the input vector than hundred bits of input bits considered. The CRC 37

of the encoded data, the decoder is also provided with reset so that at any point of time the decoder can be reset. The decoder receives the data on every event of the clock pulse at a and the output is obtained at port y. The Fig. 10 describes the output of the decoder without the errors being introduced in the input. Fig.11 describes the output of the Viterbi decoder with errors being introduced in the input data. Error detecting and correcting capability of the Viterbi decoder can be observed by comparing Fig.10 and Fig.11. Fig.9: Simulation results of convolution encoder Fig.10: Simulation results of Viterbi decoder without errors in the input Fig.11: Simulation results of Viterbi decoder with errors introduced in the inputs TABLE 1: Device Utilization and Summary for Convolutional encoder TABLE 2: Device Utilization and Summary for Convolutional decoder The device utilization summary for the convolutional encoder and decoder are shown in table 1 and table 2 respectively. So far the implementation of CRC and Viterbi algorithm is discussed in this section. After convolutional encoding block the CRC encoder block is used as shown in figure 1. At the receiver the CRC is calculated and compared with the received CRC. If it is same as received CRC then it indicates that there is no error in the received bits. Instead of decoding using Viterbi algorithm the lookup table may be used to get back the message bits. The look up table reduces the decoding time. If the CRC calculated at the receiver is different than received then Viterbi decoding may be used to decode the message bits. VI. CONCLUSION In this paper, the code has been verified for all possible lengths of message polynomial and generator polynomials. The CRC-4 to CRC-32 are successfully implemented on FPGA. The simulation results are presented. The implementation of convolution encoder and an implementation of the convolution decoder using Viterbi decoding algorithm have been presented. The algorithm for convolution encoder and decoder has been modeled using VHDL. The device utilization has been found satisfactory. The code has been tested for different combinations of inputs using ModelSim simulator. The concept of lookup table helps to detect the errors at the receiver. REFERENCES [1] J. Viterbi, Convolutional codes and their performance in communication systems, IEEE Transaction Communication Technology,cVol.19, pp. 751-772, Oct. 1971. [2] B. Sklar, Digital Communications: Fundamentals and Applications, 2nd edition, Prentice-Hall, Upper Saddle River, N J, 2001 [3] G. C. Clark Jr. and J. B. Cain, Error-Correction Coding for Digital Communications, Plenum Press, NY, 1981. 38

[4] A. J. Viterbi and J. K. Omura, Principles of Digital Communications and Coding, McGraw- Hill, NY, 1979. [5] A. J. Viterbi, Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm, IEEE. Transaction of Information Theory, vol. IT-13, pp. 260-269, Apr. 1967. [6] Julian Satran, Dafna Sheinwald and Ilan Shimony Brief Contributions- Out of Order Incremental CRC Computation, IEEE Transactions on computers, VOL. 54, NO. 9, SEPTEMBER 2005 [7] Ma Youjie, Zhang Haitao, Zhou Xuesong, Qi Ming, Xu Lijin, The Realization of the CRC Arithmetic which is based on DSP, 2009 [8] Philip Koopman, Tridib Chakravarty, Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded Networks, The International Conference on Dependable Systems and Networks, DSN-2004. [9] Sunil Shukla, Neil W. Bergmann, Single bit error correction implementation in CRC-16 on FPGA, ICFPT 2004, 0-7803-8652-3/04/$20.00 0 2004 IEEE. [10] K. S. Arunlal1 and Dr. S. A. Hariprasad2 An Efficient Viterbi Decoder, International Journal of Advanced Information Technology (IJAIT) Vol. 2, No.1, February 2012. DOI : 10.5121/ijcsea.2012.2109 95 [11] Renqiu Wang, Wanlun Zhao, and Georgios B. Giannakis, CRC-Assisted Error Correction in a Convolutionally Coded System, IEEE Transactions On Communications. Vol 56, No 11, November 2008. Pages -1807-1815. 39