并行编码

2024-06-19

并行编码(精选3篇)

并行编码 篇1

摘要:在海量存储系统中, 利用冗余数据编码技术是提高存储系统可靠性的较好方法。文中对网络存储编码的相关算法进行了研究, 针对单容错网络磁盘阵列的编码操作, 重点研究了RAID5编码的并行算法。针对集中式奇偶校验编码算法在运行时间上的缺陷, 提出了将编码计算过程与组通信操作相融合的思想, 设计了更为高效的基于多对一归约操作的并行编码算法。实验结果表明, 基于组通信的算法相对于集中式算法性能优势明显。

关键词:网络存储,容错编码,组通信,并行算法

存储编码技术随着RAID的广泛应用而得到了迅速发展。RAID磁盘阵列技术的基本思想是: (1) 利用数据的条纹化提高磁盘的I/O性能。 (2) 利用存储编码的冗余容错技术提高磁盘阵列的可靠性[1]。

对于有冗余校验数据的特定网络磁盘阵列, 例如RAID5、RAID6等, RAID新创建时, 各磁盘的用户数据与校验数据不能保证各条纹校验关系的一致性, 例如RAID5中各条纹的校验信息须满足 (P=D1D2…Dn) [2]。数据的不一致会导致系统无法正常运行, 因此, 这种网络磁盘阵列在创建时必须先进行初始化同步工作。而初始化同步操作, 要遍历各成员磁盘上的所有数据并进行编码运算, 这项工作耗时较长[3]。

本文针对网络磁盘阵列的初始化同步与重构操作, 提出了与组通信[4]操作相融合的更高效的并行算法。

1 RAID5编码

RAID5[5]是常用的单容错RAID阵列编码之一, 其数据方案如图1所示, 第一个校验条纹的校验结果存放在Disk4, 第二个校验条纹的校验结果存放在Disk3, 以此类推。数据单元则从Disk0开始, 循环放置在所有磁盘上, 当与校验单元冲突时, 数据单元的位置后移, 即进入下一条纹。这种布局称为左对称布局[6], 当5块盘中的任意1块出故障时, 都可通过剩余4块盘中的数据恢复出来。如图1所示, 假定Disk0失效, Disk0中的数据D0, D5, D10, D15, p16~19, 均可通过其他磁盘中相应校验条纹中的数据计算得出。

MPI (Massage Passing Interface) [7]标准是目前重要的并行编程工具。利用MPI_SEND和MPI_RECV进行消息传输属于点对点通信, 但在并行/分布式环境中, 通常需要多个节点进行更为复杂的通信, 即组通信 (Group Communication) 。

在并行/分布式环境中, MPI组通信一般实现3个功能:数据通信、同步和计算。数据通信主要完成组内进程间的数据传输;同步功能是实现组内所有进程在特定地点在执行进度上取得一致;计算功能要对给定的数据完成指定的运算, 通常用于从局部结果计算出全局结果, 如图2所示。从效果上, 可认为MPI组通信的计算功能通过3步实现:首先是通信功能, 即消息根据要求发送至目的进程, 目的进程再接收到各自所需的消息;然后是对消息的处理, 即计算部分, MPI组通信中有计算功能的调用都有指定的计算操作, 用给定的计算操作对接收到的消息进行处理;最后一步就是将处理的结果放入指定的接收缓冲区。

2 RAID5编码并行算法

针对RAID5网络磁盘阵列的初始化同步操作, 提出了集中式算法与优化的分布式算法。所谓集中式, 就是由一个Root节点接收各节点发来的数据进行编码运算, 再把编码结果的校验数据发送给该条纹的校验盘, 此算法可容易地嵌入到已有RAID软件中, 实现网络磁盘阵列的初始化功能, 但显然Root节点在系统规模较大的情况下会成为性能瓶颈;而分布式算法则是将编码运算分布到多个节点中的处理方式, 并无Root节点控制整个编码过程, 所有节点处于平等地位协同完成编码计算。

2.1集中式奇偶校验编码

令一个节点作为根节点 (Root) , 在实际网络存储系统中, 此节点通常是运行磁盘阵列软件的节点。假定0号节点为根节点, 算法可改为适合任意节点为根节点的情况。则编码过程为:其他节点各自读取自己磁盘中的数据, 发送到根节点;根节点负责接收数据, 并进行RAID5编码运算;然后将运算出的校验结果数据发送到该条纹的校验节点;校验节点将校验数据写入磁盘。如图1的RAID5示意图, 假设有共有5块盘, 则第一个条纹块的校验数据发送给Disk4, 第二个校验数据发送给Disk3, 以此类推。算法中rw_buf[j][i]表示第i个条纹的第j个条纹单元 (位于第j个节点) 。

如图3所示, 算法在具体实现时采用了预读取操作, 由于编码时的条纹单元 (stripe_unit_size) 较小, 频繁I/O会影响效率。因此各节点每次读取磁盘的大小为一个较大值buf_size到缓冲区rw_buf, 供多个条纹的编码计算, 从而提高了I/O性能。各节点将rw_buf中的数据发送到根节点。rw_buf中包含s (s=buf_size/stripe_unit_size) 个条纹单元, 因此, 根节点中对s个条纹进行RAID5编码运算, 再将校验结果发送到各条纹相应的校验节点[8]。

通过算法可看出, 这种集中式算法的瓶颈主要集中在根节点, 而其他节点大多时间却处于空闲状态, 负载不均衡。

2.2基于多对一归约的并行编码

可看到, 当节点 (磁盘) 数增多时, ROOT节点成为集中式编码算法的性能瓶颈。考察编码 (解码) 过程, 可看到所有节点均参与其中, 与组通信模式相似。因此, 本文提出将编码/解码过程嵌入到组通信之中, 设计基于高效组通信算法的并行编码/解码算法, 来提高编码/解码操作的效率。对于RAID5编码过程, 恰与多对一归约 (All-to-one reduction) 过程吻合, 因此设计基于多对一归约的并行编码算法, 其基本思想是:取消根节点, 各节点地位平等, 在各自读出磁盘数据之后, 通过多对一归约操作, 实现编码运算;归约的目的进程即为条纹的校验节点进程, 该进程负责将这一条纹的校验数据写入磁盘[9]。每次归约的数据为一个RAID5条纹的大小。

多对一归约操作有多种实现算法[10]。其中串行算法时间复杂性为线性, 利用它来实现RAID5编码的性能与上一节的集中式算法相当。本文采用递归加倍法。该算法的原理较为简单:第一步, 奇数节点发送数据到偶数节点, 偶数节点对接收的数据和自身的数据进行异或运算;第二步, 不能被4整除的偶数节点将自己的数据发送给能被4整除的节点, 后者负责接收数据并且进行运算;之后的步骤以此类推, p个节点共需logp步[2]。如图4所示。

本算法的实现如图5所示, 各节点读出磁盘中buf_size大小的数据到rw_buf中, 再对rw_buf中的每个条纹单元进行多对一归约操作, 每次归约得出一个条纹单元的校验结果, 结果存放在该条纹的校验节点的result中, 校验节点将结果写入磁盘。

显然, 相对于集中式算法, 基于多对一归约的并行算法无ROOT节点的问题, 效率更高。

3实验结果与分析

本文的测试是在天河一号的计算节点中完成。天河一号的计算节点用于运行串行和并行计算任务, 每个计算节点都是一个多核的SMP服务器。

为方便各算法方案间的性能对比, 实验取8个计算节点, 磁盘大小为2 GB, 每次读磁盘操作时读取的大小为4 MB, 取不同的条纹单元大小。图6为单容错网络磁盘阵列初始化同步算法性能对比。

如图6所示, 其中横坐标表示条纹单元的大小, 通过实验结果可发现, 在不同条纹单元下, 集中式编码算法用时更长。与集中式编码算法相比, 基于多对一归约的编码方案效率优化明显, 性能最多提升169.4%, 平均提升130.4%。因此, 相对于集中式编码算法, 基于多对一归约的并行算法优化效果明显。

4结束语

介绍了单容错网络磁盘阵列初始化同步的两种算法的设计, 分别是集中式奇偶校验编码算法和基于多对一归约的并行编码算法, 在编码 (解码) 计算过程中充分利用网络链路的传输能力和存储节点的计算能力, 以加速网络磁盘阵列的操作。以此为延伸, 在双容错及多容错网络磁盘阵列中, 都可实现基于组通信的高效并行算法。

参考文献

[1]PATTERSON D A, GIBSON G, KATZ R H.A case for redundant arrays of inexpensive disks (RAID) [C].Proceeding ACM SIGMOD, 1988:109-116.

[2]林胜.存储系统容错及阵列编码[D].天津:南开大学, 2010.

[3]王芳.网络磁盘阵列系统的研究[D].武汉:华中科技大学, 2011

[4]ANANTH G, ANSHUL G, GEORGE K, et al.Introduction to parallel computing[M].Newyork:Addison-Wesley Educational Publishers Inc, 2003.

[5]PLANK J S.Erasure codes for storage applications[C].San Francisco, CA:Tutorial of the 4th Usenix Conference on File and Storage Technologies, 2005.

[6]刘建, 张建国.两种网络存储技术的对比[J].电子科技, 2001 (21) :31-32.

[7]Message Passing Interface Forum.The MPI message-passing interface standard[EB/OL]. (2011-09-30) [2013-12-10]http://www.mpi-from.org.

[8]CHEN P M, PATTERSON D A.Maximizing performance in a striped disk array[R].Berkeley CA:Berkeley Technical Report, 1989.

[9]BLAUM M, BRUCK J, VARDYA A.MDS array codes with independent parity symbols[J].IEEE Transactions on Information Theory, 1966, 42 (2) :529-542.

[10]都志辉.高性能计算之并行编程技术—MPI并行程序设计[M].北京:清华大学出版社, 2001.

基于X264多线程并行编码研究 篇2

随着网络电视、视频会议和高清视频的不断发展,人们对视频编解码的速度和其图像的清晰度提出了越来越高的要求,H.264/AVC作为最新的编码标准,代表着向低码率高质量发展的趋势。虽然H.264/AVC比以往的编码标准节省了码率,但因为其新增的编码特性,使其增加了编码复杂度,使用单处理器的编码速度已经不能满足视频的实时传输和大规模的共享要求,因此研究一种高效的视频并行编码策略是目前的重要课题。

作为一种开放的H.264/AVC编码器,X264比较注重实用性。它在保证了编码效率未明显降低的情况下,舍弃了如多参考帧和帧间预测中不必要的块模式等这些具有极高复杂性的技术;另外X264实现了指令级并行,在此基础上,人们又提出了线程级并行方法,其中包括GOP级、帧级、片级和宏块级并行策略[1,2]。但是其研究方法都不够充分,绝大多数还是针对单一粒度进行并行实施。本文主要研究通过多线程来实现片级和帧间宏块级的并行。

本文介绍片级多线程并行编码算法和帧间宏块级并行编码算法及其实现过程,片级多线程并行编码算法只对一帧图像进行编码,在系统中只需保存与该帧图像编码相关的一些参考帧图像数据便可,所以对内存需要量小[3],同时通过实验表明,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级并行编码具有更高的编码速度。本文提出可以根据两种算法的特点,运用POSIX线程库,进行多粒度并行编码算法研究,达到视频更好的实时编码的要求。

1 相关知识介绍

1.1 POSIX多线程

IEEE的开放系统接口标准POSIX线程,通常称为Pthreads标准。视频编码多线程应用程序可以在串行计算机上开发,并且不作任何改变地在并行计算机上运行,同时多线程化的视频编码程序要比使用别的并行程序容易编写得多,另外利用多线程能躲避延迟时间,当一个线程在等待通信操作时,其他的线程可以利用CPU,这样可以屏蔽相应的开销,因此本文使用多线程进行视频编码的并行处理[4]。

1.2 片

在视频编码的过程中为了限制误码的扩散和传输,一个图像帧可以被编码成一个或更多个片,编码的各个片之间是相互独立的,在同一帧中每个片的编码不依靠其他片作为参考,一个独立帧的搜索范围也不能超过片的边界[5,6]。

1.3 帧间宏块的关系

为了提高视频编码的性能,H.264/AVC需要以编码帧的重构图像作为参考来处理时间冗余,即帧间预测模式需要先前已经编码过的参考帧。当前帧的当前宏块能够编码之前,至少其参考帧中的对应位置和它附近的8个相邻宏块是可用的[7],如图1所示,因此实现帧间宏块级并行必须要考虑帧间各个宏块之间的依赖性。

1.4 并行编码的加速比

加速比是度量采用多线程并行处理比采用单个线程处理的加速倍数,用来衡量并行算法性能的重要指标,着重于并行处理相对于串行处理的优化效果。在H.264/AVC中加速比主要用来表征采用并行算法后编码帧率前后的变化情况。

加速比undefined

加速比越大,算法的编码速度越快,并行性能越好,视频编解码的实时性越强。

2 X264片级并行编码算法

2.1 片级并行

根据片与片之间相互独立的特点,同一帧内的各个片可以并行编码。每一帧分成固定数量的片,为每个片分配一个线程进行编码[8]。在进行编码之前需要对每个线程进行同步,其中主要操作就是参考图像帧需要同时进行更新。片级并行不用考虑前后帧之间的参考问题,每一帧的分片数可以人为设定,因此使并行编码具有更大的自由度。片级的并行程度理论上取决于帧的分片数,分片数越大,获得的并行加速比越大,但由于在编码过程中要加入片头等信息,这样就增加了系统开销,因而在采取片级并行时,不能无限制地提高分片数目来获取加速比,需要对图像质量、视频压缩率和并行效率三者做权衡,来决定每帧采用的分片数。假如帧I,P和B的排列顺序为IBBPBBP,其N个线程的Slice级并行方法如图2所示。

2.2 算法实现描述

片级多线程并行编码算法实现过程如下:

步1:主线程依次读入帧,对每一帧按照设定的thread来进行slice划分,通过主线程来创建各个片的线程,每个片独立进行编码。

步2:当创建的片级线程数目达到设定的线程数时,主线程将处于堵塞状态,几个slice并行编码,各个片之间不相互参考,仅参考已经编码完的图像。

步3:当所有片级线程都编码完成时返回到主线程,主线程继续读入下一帧,如果所有的帧都编码完成则结束,否则转入步2。

3 帧间宏块级的X264并行编码算法

3.1 帧间宏块级并行

帧间宏块级并行方法如图3所示,当Img0中的第一行已经被处理完的时候,它还不能被立即编码。这是因为运动估计的搜索范围要大于两个宏块大小。为了准确地预测帧的运动区域,必须等去块滤波和四分之一像素插值之后的编码宏块被重构。如果运动估计的搜索范围是宏块的两倍大,那么直到Img0的第三行被编码完成后Img1左上角的第一个宏块才能被编码。在图3中,Img1中当前正在编码的宏块可以和Img0中带有相同颜色的宏块同时进行编码。此后,只要判断宏块间不存在数据依赖性,Img1中的宏块就可以和Img0的一些宏块同时进行编码。通过增加帧间并行,在X264编码器中提供了更多的并行性[9]。此算法的并行机理在于:当前帧要编码的宏块跟其余帧的其他宏块同时编码的条件是必须等当前帧的宏块要参考的其余帧的宏块编码完成。

3.2 算法实现描述

帧间宏块级多线程并行算法实现过程如下:

步1:主线程依次读入帧,然后通过主线程来创建辅助线程,先创建的线程进行编码,随后的帧只有当其参考帧中所依赖的宏块编码完成后才能开始编码。

步2:当创建的辅助线程达到设定的线程数时,主线程将处于堵塞状态,辅助线程并行的编码各帧中没有相互依赖关系的宏块。

步3:当最先被创建辅助线程的帧编码完成时将返回到主线程,主线程继续读入新帧(直到没有新帧转步4)并为其创建新的线程,以保证用于并行编码的线程达到设定的线程数,然后重复步2。

步4:当所有的帧编码完成之后,辅助线程释放,主线程完成后续工作并退出。

4 两种算法实验结果与分析

算法使用VS2008开发平台,以X264为研究对象,实验用C语言编写。实验设备是一台双核PC机:操作系统为Microsoft Windows XP Professional(SP3),CPU规格为Intel Core 2 Duo CPU T5800 (2.00 GHz),内存为2.00 Gbyte,硬盘为160 Gbyte。

实验采用主要编码档次,其主要的编码参数设置为:B帧为2帧;参考图像为1帧;环路滤波可用;CABAC熵编码算法可用;运动估计的搜索范围为正负16个像素点。

实验选取了运动缓慢的Akiyo和运动剧烈的Coastguard两个视频序列,对片级并行编码算法和帧间宏块级并行编码算法分别在QCIF和CIF两种不同的格式下进行测试,测试序列均为300帧,设置keyint_max为250。

表1是片级多线程并行和帧间宏块级多线程并行两种方法在不同线程数下编码帧率(单位为f/s)的测试结果。

图4和图5分别是视频序列Akiyo和Coastguard在两种并行算法实验测试下,不同线程数目对应的加速比的关系图。

由测试结果可以看出,在设定的实验条件下,帧间宏块级多线程并行编码算法比片级多线程并行编码算法具有更高的加速比。另外,对于片级并行算法,并不是设定的线程数越多,得到的加速比就越高,尤其对于运动缓慢的视频序列,而当线程数为2时,加速比达到了最大。

表2是片级并行和帧间宏块级并行两种方法在不同线程数下编码码率(单位为kbit/s)的测试结果。

表3是片级并行和帧间宏块级并行两种方法在不同线程数下峰值信噪比(单位为dB)的测试结果。

由表2的测试结果可知,帧间宏块级多线程并行编码算法得出的编码码率相对恒定,基本保持不变;片级多线程并行编码算法的编码码率随着线程数目的增大先增加后保持不变。由表3可以看出,两种算法下的峰值信噪比变化不大,片级多线程并行编码算法的相对偏低,因片与片之间的独立性破坏了片与片边界处数据的相关性。

通过上面研究和实验可以得出,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级并行编码具有更高的编码速度,同时因为片级并行编码方法容易产生条带效应,所以要考虑图像质量,但是片级并行编码因只对一帧图像进行编码,在系统中只需保存与该帧图像编码相关的一些参考帧图像数据便可,对内存需求要少,系统开销要少,所以在进行X264并行编码的过程中,需要对图像质量、内存利用率和并行效率三者做权衡来折中考虑这两种算法,同时也可折中这两种算法的优缺点来研究视频编码的并行处理。

5 结束语

本文分别研究了片级多线程并行编码算法和帧间宏块级并行编码算法,通过实验得出了这两种算法的优劣势。对比实验结果表明,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级并行编码具有更高的编码速度,但因其需要对多帧图像进行并行编码,在系统中需保存与多帧图像编码有关的参考帧图像数据,所以占用大量的内存,于是提出可以结合两种算法的特点,将两种算法结合进行多线程并行编码算法研究。另外,因实验条件的限制,没有在更多核上进行这两种算法的比较,所以实验结果不够全面,未来的研究重点是实现X264最大粒度的并行。

摘要:以X264编码器作为研究对象,着重研究片级多线程并行编码算法和帧间宏块级并行编码算法。帧间宏块级多线程并行编码算法需要对多帧图像进行并行编码,在系统中需保存与多帧图像编码有关的参考帧图像数据,所以占用大量的内存。但通过实验证明,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级多线程并行编码算法具有更高的编码速度。根据两种算法的特点,提出可以将两种算法结合进行多粒度并行编码算法研究。

关键词:X264,片级,帧间宏块级,多线程

参考文献

[1]蒋兴昌,周军,罗传飞.H.264并行编码算法的研究[J].电视技术,20083,2(2):33-35.

[2]MEENDERINCK C,AZEVEDO A,ALVAREZ Me,t al.Parallel Scalabili-ty of H.264[C]//Proceedings of FirstWorkshop on programmability is-sues for multi-core computers.Goteborg:[s.n].,2008:1-164.

[3]许昌满,李国平,王国中.AVS编码器Slice并行编码算法研究与实现[J].中国图象图形学报,20091,4(6):1108-1113.

[4]BUTENHOF D R.Programming with POSIX threads[M].[S.l].:Addi-son-Wesley1,997.

[5]WIEGAND T,SULLIVAN G J,BJONTEGAARD G,et all.Overview ofthe H.264/AVC video coding standard[J].IEEE Transactions on Cir-cuits and Systems for Video Technology,2003,13(7):560-576.

[6]SULLIVAN G,TOPIWALA P,LUTHRA A.The H.264/AVC advancedvideo coding standard:Overview and introduction to the fldelity range ex-tension[C]//Proceedings of SPIE conference on applications of digitalimage processing XXVII.[S.l].:SPIE,2004:454-474.

[7]ZHAO Z,LIANG P.Data partition for wavefront parallelization of H.264video encoder[J].IEEE International Symposium on Circuits and Sys-tems,2006(5):21-24.

[8]MEENDERINCK C,AZEVEDO AJ,UURLINK Be,t al.Parallel scalabili-ty of video decoders[J].Journal of Signal Processing Systems,2009,57(2):173-194.

并行编码 篇3

吉比特无源光网络 (GPON) 是当前主流的无源光接入网技术。在其中引入RS编解码器可大幅度降低系统的误码率, 提高信息传输的可靠性。

传统RS编码器数据吞吐率为8位/时钟。而GPON系统的数据传输速率为1.244Gbit/s, 或2.488Gbit/s, 并且随着技术的更新将会更高。这就使得传统RS编码器无法满足GPON系统高速数据传输的要求。为此需要为GPON系统设计并行RS编码器以提高数据处理的速度。

文中针对GPON系统特殊的数据格式, 设计实现并行RS编码电路, 应用VerilogHDL语言编程并在QuartusII上进行功能验证。结果证明该编码器能够同时处理32位数据并正确编码, 满足GPON系统高速数据传输的要求。

1 RS编码

1.1 RS编码原理

RS码是分组线性循环码的一种, 具有严密的代数结构。通常可以采用乘法电路或除法电路来实现RS编码。前者得到非系统码字, 译码较复杂。后者得到则是系统码, 译码简单。因此为降低解码的复杂度, 常采用除法电路实现RS编码。

RS (255, 239) 码中的运算都是在伽罗华域中进行的。GPON协议规定RS码的本原多项式为:

p (x) =x8+x4+x3+x2+1

生成多项式为:

g (x) = (x-α0) (x-α1) (x-α2) … (x-α15)

则根据编码原理有:

C (x) =xn-km (x) +r (x) 其中, C (x) 为码字多项式, m (x) 为信息多项式。而r (x) 是多项式xn-km (x) 除以g (x) 的余式, 即编码后得到的校验码。

可见RS编码过程可描述如下:首先将输入的信息多项式移 (n-k) 位, 随后除以生成多项式g (x) , 得到的余式即为输出校验码。

1.2 RS编码的硬件实现

基于编码原理, 以除法电路实现RS编码运算。电路具体结构如图1所示。

基本RS编码器电路由伽罗华域乘法器、加法器、8位并行移位寄存器及开关电路和选择器组成。

电路工作原理:首先全部寄存器清零。开始工作时, 利用选择开关使输入信息码元直接输出, 同时送入除法电路进行运算。经过239个时钟, 运算完毕, 此时信息码元输出结束。寄存器中存储的数据即为编码所得的16位校验码。此后选择开关置向上方并且关闭门电路, 将16个移位寄存器中的数据依次右移输出, 接在信息码元之后形成校验码元。

2 GPON中的RS编码器

2.1 GPON中的FEC功能

协议规定, GPON系统中的ONT或是OLT均可选择性的采用FEC功能, 具体编码形式为RS (255, 239) 编码。该码码元长度为255字节, 其中信息元239字节, 校验码16字节。它能够纠正8个字节的突发错误和57字节的连续比特错误。

由于GPON系统是基于帧传输的, 具有固定帧长, 因此具有特殊的编码格式。

以速率为2.488Gbit/s的GPON下行帧为例分析:GPON下行帧周期为125μs, 因此每帧38880字节。若进行RS (255, 239) 编码, 每一帧将包含152个完整的255字节码字, 以及一个120字节的短码码字。这就要求在编码时, 将短码以零补足239个字节, 计算结束后去除零字节。同样在解码时也要进行相同的操作。

2.2 GPON中32位并行RS编码器的实现

基本RS编码电路的数据吞吐率为1字节/时钟, 而GPON的传输汇聚层传输数据为4字节/时钟, 因此需要进行并行处理。

根据编码原理以及并行操作的目标将整个编码器划分为3大模块。分别是输入控制模块、并行编码计算模块以及输出控制模块。

并行编码计算模块负责完成32位数据的直接编码计算功能, 直接输出并行信息数据及获得的校验码字。

输入输出控制模块则完成对输入输出数据格式的调整及对整个电路的时序进行控制的作用。同时, 输入输出控制模块还要负责对GPON帧中的短码进行处理, 即编码前的补零和编码后的去零操作。

2.2.1 并行编码计算模块

并行编码计算模块是整个编码器的核心, 实现32位数据的并行编码运算。基于串并转换的思想将图1所示的串行反馈移位寄存器电路直接改造为可同时输入4路数据的并行编码电路。具体操作如下:计算串行电路在4个字节的数据输入完成后各寄存器的存储状态。按照他们与4个输入信号及寄存器初始状态之间的关系来重新连接电路实现并行结构。最后, 设计计数器来控制信息位、校验位的输出即可。

通过计算推导得到并行RS编码计算电路如图2所示。

2.2.2 输入控制模块

输入控制模块首先实现对输入数据格式的调整。根据RS (255, 239) 编码规则, 其信息码元为239个字节, 完整码字255字节, 当4路数据并行输入时, 必会出现两组码字交接的情形。若直接将这样的数据送入编码模块必将得到错误的校验码。为此需要对输入数据进行格式调整, 在每255字节数据前填一个字节0, 使得总字节数刚好是4的倍数, 每一组码字可以完好的并行输入。同时根据编码原理, 在每组码字前填零并不影响编码结果, 所以上述的格式调整可以实现正确的编码。

本文利用RAM存储器来实现数据格式的调整。为了便于观察输出结果, 在设计时将32位数据分成4路, 分别以datain1~datain4表示。4路数据在系统时钟的作用下依次写入RAM中。其写地址无需做特殊处理, 只要按照时钟顺序加一递增即可。分别以dataout1~dataout4表示RAM调整后的输出数据, 为实现数据格式的调整, 需要在同一时钟下选择不同存储单元的数据输出。因此需要对读地址要特别设置。通过对输入格式及目标格式的对比观察发现第一组数据中, dataout4的读地址应该比其他输出的读地址少1;第二组数据中, dataout4与dataout3的读地址相同且比其他两个少1;依次类推。4组数据的情况均不同所以需要以4种状态来表示。

在每一种状态下控制读地址的程序段如下:

//用计数器控制读写地址选择不同存储单元中的数据读出

always@ (posedge clk)

begin

case (state)

2’b00 : rd_addr1<=wr_addr;

2’b01 : rd_addr1<=wr_addr;

2’b10 : rd_addr1<=wr_addr;

2’b11 : rd_addr1<=wr_addr;

endcase

end

always@ (posedge clk)

begin

case (state)

2’b00 : rd_addr2<=wr_addr;

2’b01 : rd_addr2<=wr_addr;

2’b10 : rd_addr2<=wr_addr-1;

2’b11 : rd_addr2<=wr_addr;

endcase

end

always@ (posedge clk)

begin

case (state)

2’b00 : rd_addr3<=wr_addr;

2’b01 : rd_addr3<=wr_addr-1;

2’b10 : rd_addr3<=wr_addr-1;

2’b11 : rd_addr3<=wr_addr;

endcase

end

always@ (posedge clk)

begin

case (state)

2’b00 : rd_addr4<=wr_addr-1;

2’b01 : rd_addr4<=wr_addr-1;

2’b10 : rd_addr4<=wr_addr-1;

2’b11 : rd_addr4<=wr_addr;

endcase

end

如此调整, 便可按目标将所需数据读出。不过此时数据的顺序还没达到最终目标, 还需要将RAM的各位输出顺序再进行一次调整。

仿真结果表明, 每一组255个字节的起始端都被填上一个0字节, 补足4的倍数, 可以直接输入到并行编码计算模块进行编码操作。

此外, 对于GPON数据帧来说, 还有一个未满239字节的短码需要处理。此处同样利用RAM实现短码数据的填零、去零操作。由仿真图可见, 短码信息前被填加34组零补足240个字节, 进而可以送入后续模块进行编码处理。

2.2.3 输出控制模块

输出控制模块的功能是将编码后的数据调整成原本的数据格式。设计中同样采用RAM来实现数据的调整。通过控制RAM的读写地址将所需数据选择读出, 进而实现数据格式的调整。具体操作与输入控制模块类似, 这里不在赘述。

2.2.4 GPON中32位并行编码器的总体仿真

将输入输出控制模块以及并行编码计算模块连接在一起得到整体的32位并行RS编码器。仿真结果如图3-4所示。

图3-4分别为完整码字、短码码字在编码后得到的校验码字, 结果与MATLAB计算结果一致, 证明编码模块结构正确。

2.2.5 结果分析

由以上仿真结果可见, 文中所设计的编码器可以实现32位输入数据的并行编码, 同时处理32位数据, 运算速度较传统编码器提高4倍。输入输出控制模块可以将数据格式进行正确的调整, 进而可以在输出端获得正确的编码结果。同时本文针对GPON特殊的帧结构, 在设计中考虑到其中的最后一组短码, 对其进行特殊处理, 使得所设计的编码器能够处理完整的GPON的数据帧。从整个编码器的编译及时序分析报告中可以见到, 本文所设计的并行编码器资源消耗较少, 而且工作频率可达159.18MHz, 满足设计要求。

3 结束语

文中设计的RS编码器可以同时处理4个字节的并行数据, 并考虑到GPON数据帧的特殊结构, 满足对GPON系统数据进行编码的要求之外也大大提高了编码运算的速度, 符合GPON系统高速数据传输的要求。

参考文献

[1]肖洁.光纤传输系统中前向纠错芯片的设计与实现[D].东南大学, 2006.

[2]陈懿.ReedSolomon编译码算法研究与硬件实现[D].南京理工大学, 2010.

[3]吴辉.基于新G.984系列协议的GPON终端—物理层和传输汇聚层关键模块设计[D].南京理工大学, 2010.

[4]周利岗.RS码的硬件实现研究[D].南京邮电学院, 2004.

[5]刘文国.基于FPGA的RS255, 223编解码器的高速并行实现[D].电子科技大学, 2009.

[6]党鑫.GPON终端TC成帧子层关键技术研究[D].南京理工大学, 2009.

[7]袁强.GPON中FEC编解码器的研究与实现[D].电子科技大学, 2006.

[8]朱海坤.ReedSolomon码编解码器的VLSI实现研究[D].复旦大学, 2002.

[9]谭丹, 聂雅琴, 蒋燕妮.高速并行ReedSolomon编解码器[J].国外电子元器件, 2008 (12) .

[10]戴小红, 潘志文.ReedSolomon编译码器的设计与FPGA实现[Z].东南大学移动通信国家重点实验室.

【并行编码】推荐阅读:

并行模型05-21

并行计算05-24

并行诊断06-12

数据并行06-19

并行机制07-05

并行优化08-09

并行系统08-09

并行协同08-19

并行调度08-26

并行实现09-01

上一篇:锅炉安装受热面下一篇:活化剂尿素