一种基于FPGA的多通道复用Viterbi译码器的设计与实现

2017-11-15 22:08庞志锋刘欣欣王晓君
电脑知识与技术 2017年28期
关键词:卷积码

庞志锋+刘欣欣+王晓君

摘要:卫星定位接收机中的卷积码译码即Viterbi译码,在处理器中面临着占有资源比较多、处理时间太长等问题,为了减少处理器中资源占用和提高它的处理速度,采用了多通道复用和串行加比选蝶形单元的方法,在FPGA平台上用硬件描述语言设计出一种高性能Viterbi译码器,大大减少资源占用,提高了接收机的处理速度。

关键词:卷积码;Viterbi算法;FPGA;资源占用

中图分类号:TN919 文献标识码:A 文章编号:1009-3044(2017)28-0251-03

Abstract: Satellite positioning receiver decoding convolutional code Viterbi decoder, facing the problem of share more resources and processing time in the processor, the processor in order to reduce the occupied resources and improve the processing speed, using multi channel multiplexing and serial plus selection butterfly unit method, using hardware description language to design a high performance Viterbi decoder FPGA platform, greatly reduce the resource utilization, improve the processing speed of the receiver.

Key words: convolutional code; Viterbi algorithm; FPGA; resource consumption

卷积码是广泛应用于无线通信、卫星通信等多种通信系统中的信道编码方式。Viterbi算法是卷积码的最大似然译码算法,该算法译码速度快、性能好,并且实现硬件结构也比较简单,是最优的卷积码译码算法[1]。在现代通信系统中,要使信号能够更可靠地在信道中传输,往往需要在信道编码中采用纠错码来降低信号受噪声的影响,以降低传输的误码率。卷积码及其Viterbi译码是比较常用的信道编码方案。

1 卷积编码及Viterbi算法基本原理

卷积码是由移位寄存器和n个模2加法器组成,当前状态的输入进来的数据和寄存器组中的数据共同决定着编码器的输出结果。(2,1,7)卷积码的生成多项式为G=(171,133),电路图如图1所示[2]。(2,1,7)卷积码编码器由6个延时器(图1中的q-1模块,可用寄存器实现)和两个模2加法器组成,它的编码约束度为7,码率为1/2,即输入端输入1b信息,输出端输出2b编码信息,并分为上、下两路并行输出。

Viterbi译码算法是找最大度量的最大似然路径,即找出局部最优的幸存信息就等效于找到最优幸存信息,它将比较进入每一状态下的所有路径,然后得出最优路径并存储,即幸存路径,步骤为:(1)从某一时间单位[l=m]开始,将每个路径中的分支度量值计算出来,然后将所有状态的分支度量值和幸存路径存储下来;(2)[l]增加l,[l=m+1],累加更新后的分支度量值和之前的分支度量值,然后计算出来最大度量的路径,然后把更新后的幸存路径及其度量值存储下来,并删掉其他路径;(3)若[l

2 基于硬件描述语言的Viterbi算法

由Viterbi译码算法可以得出Viterbi译码器的结构框图,图2是Viterbi译码器结构框图,一个Viterbi译码器,一般都会包括图2所示的几个基本部分:控制模块、分支度量计算模块、加比选模块、幸存路径管理模块和一些必要的存储模块。

2.1 仲裁逻辑设计

仲裁写控制,首先轮询一遍所有通道,将通道使能转为写信号暂存在写使能寄存器中,并且在此轮询中将数据也暂存,并将写使能与暂存数据例化进相应的FIFO中。

通道FIFO数据向缓存FIFO中导入控制,判断每一个FIFO中的数据是否满足了译码的条件的数量,若满足了译码条件的数量,并且缓存FIFO的空信号有效时,则可以将数据从满足条件的通道FIFO中导入到缓存FIFO中,此时通道FIFO的读使能与缓存FIFO的写使能信号的高电平长短应该为486个主钟,这样控制输入到缓存FIFO中的数据为486,当导入到缓存FIFO中的数据达到了486个时,将产生Decode_start信号与相应的通道号。

仲裁读控制,当译码模块处于忙状态,然后译码模块的读使能有效,并且FIFO不空时,则将启动FIFO读使能,再利用读使能将FIFO中数据进行输出。仲裁逻辑模块的原理图如图3所示。

2.2 控制模块

控制模块主要的任务是产生系统内部各个模块的各种控制信号,这些内部的控制信号保证了各个功能模块的协调工作。因此,控制模块对于系统有序高效的运行非常重要,是整个Viterbi译码系统的核心模块[3]。

当Decode_start信号有效时,译码控制模块中的Control_vaild信号置高电平,在主钟和Control_vaild信号有效下主钟计数器Clk_cnt加1,每当Clk_cnt为0时,RD_FIFO置高电平持续1个钟,蝶形状态计数器Status_num根据当前Clk_cnt的计数值减1处理,在Status_num输出延迟2个主钟后输出Butter_select(为了匹配距离计算模块的节奏)将每对蝶形单元的输出送译码计算模块,当Clk_cnt为32时,Status_num保持31不变,当Clk_cnt计数值达到37时,清零重新开始计数,每当Clk_cnt清零時,送存储模块的Ping_Pang信号翻转,同时译码控制模块的Bit_cnt计数器加一,当Bit_cnt计数为242时,输出Frame_over信号送仲裁模块,当Bit_cnt计数值为242且Clk_cnt计数值为35时,输出Combine_result_enable信号送译码输出模块进行最后64位结果的拼接。当Bit_cnt计数值为134且Clk_cnt计数值为0时,输出ID_bit_enable信号送译码输出模块进行ID号输出。控制模块的时序图如图4所示。

2.3 加比选(ACS)模块

ACS单元把前一状态的度量值,与当前输入信号的分支度量相加得到该分支的度量值,比较不同分支路径度量的大小,选择最小的度量值,更新当前状态的新度量值,并存储到RAM中,当更新完所有状态的度量值,将读出RAM中的数据给ACS模块使用。所以可以得出,加比选模块由加法器、比较器和选择器组成。加比选模块将度量值保存到距离存储单元,更新距离度量值。同时将最优路径存到路径存储单元,更新最优路径。

加法器是距离计算模块得出的分支度量值和存储单元得到的累加度量值相加;比较器是0状态下输入为0时相加的结果和1状态下输入为0时相加的结果作比较。0状态下输入为32相加的结果和1状态下输入为32时相加的结果作比较,上面两个结果作比较得出最优路径;选择器是比较选出较小的一个度量值输出给存储单元,选择出的最优路径也存入存储单元。

3 仿真及接收机测试结果

整个系统使用Verilog HDL完成了设计,在Modelsim SE 6.6d平台上进行了仿真,将Matlab生成的数据写入一个Modelsim待读的存储器中,然后利用测试激励文件来读取数据,数据经过顶层模块后,数据主要经过仲裁复用模与译码模块还有中断模块中进行仲裁复用、译码和叫中断,在Modelsim中产生最后输出的数据。利用Modelsim产生的数据与Matlab仿真生成的数据进行对比,Modelsim仿真出来的误码个数和误码的位置都和Matlab一一对应,两种仿真的数据都严格对应,并且在Xilinx ISE Design Suite 13.2平台上进行了综合。仿真结果如图5所示。

误码性能图6是根据Matlab仿真出来的RD维特比译码case列表画出来的,该表格的数据与误比特率理论值都一一对应。

4 结束语

本文通过研究(2,1,7)卷积码Viterbi译码的FPAG(Field Programmable Gate Array现场可编程门阵列)实现算法,设计了采用多通道情况下使用仲裁逻辑、双口RAM、加比选单元选择最优路径的软判决Viterbi译码器。该译码器既满足了译码速度,又比并行算法节省了约50%的硬件资源,而且还便于和其他系统模块结合。

参考文献:

[1] 傅民仓,冯立杰,李文波.基于FPGA的高速Viterbi译码器优化设计和实现[J].现代电子技术,2006,29(7):52-54.

[2] 蔡志龙,冯文江,杨洋.一种基于FPGA的Viterbi译码器优化算法[J].现代电子技术,2008,31(17):105-107.

[3] 丘磊,张岩.基于FPGA的高性能Viterbi译码器的设计[J].微电子学与计算机,2010,27(7):246-249.

[4] 韩可,邓中亮,施乐宁.(2,1,7)卷积码Viterbi译码器FPGA实现方案[J].现代电子技术,2007,30(15):90-96.

[5] 牛晨曦,张辉.一种基于FPGA的Viterbi译码器[J].现代电子技術,2005,28(3):56-57.

[6] 王连成.基于FPGA的Viterbi译码器设计[J].电子元器件应用,2010,12(5):39-40.

[7] 王新梅,肖国镇.纠错码—原理与方法:修订版[M].西安:西安电子科技大学出版社,2001:443-460.

[8] 吴厚航.深入浅出玩转FPGA[M].北京:北京航空航天大学出版社,2010.

[9] 张传达,李小文.卷积码编码及其Viterbi译码器的实现[J].无线电工程,2006,36(07).

[10] 樊昌信,曹丽娜.通信原理[M].北京:国防工业出版社,2008.

[11] Scllegel C.Fundamentals of Digital Communication and Blocking Coding, Chapter 4: Convolutional Codes[M].IEEE Press, 2002.endprint

猜你喜欢
卷积码
卷积编码的识别技术研究
有限域上两类卷积码的构造
(n,1,L)卷积码的逻辑运算译码方法
扩展卷积码生成矩阵的统一表述*
一种改进的时不变LDPC卷积码构造方法*