一种交织器和解交织器的FPGA电路实现
扫描二维码
随时随地手机看文章
交织和解交织是组合信道纠错系统的一个重要环节,交织器和解交织器的实现方法有多种。本文利用Altera公司开发的Quartus软件平台和仿真环境,设计一种交织器和解交织器FPGA电路单倍实现的方法,并分析该电路实现的特点。
外交织的基本原理
实际信道中产生的错误往往是突发错误或突发错误与随机错误并存,如果首先把突发错误离散成随机错误,然后再去纠随机错误,那么系统的抗干扰性能就会进一步得到提高。交织器的作用就是将比较长的突发错误或多个突发错误离散成随机错误,即把错误离散化。交织器按交织方式可分为交织深度固定的交织器(如分组交织器和卷积交织器)和交织深度不断变化的随机交织器;按交织对象可分为码元交织器和码段交织器,这里主要讨论的是交织深度固定的码段交织器。
交织和解交织是一种很实用也很常用的构造码方法,不仅可以纠随机错误,还可用来纠突发错误,所以常用于组建信道纠错系统。例如,以[n,k]线性分组码作为行码,设交织深度为i,交织编码即是将这一线性分组码排成如图1所示的i行,n列的码阵,形成[ni,ki]交织编码的一个码字,传送按列的次序自左向右传输,即:a1(n-1)a2(n-1)...ai(n-1)a1(n-2)...ai(n-2)...a10a20...ai0,其中aij代表一个码段。解交织时,仍排成如图1的码阵,并按行的次序自上而下传输,最后再按分组码[n,k]方式译出。由于信道中的错误被分散到各个行码中去,因此若行码能纠t个随机错误或b个长突发错误,则[ni,ki]交织后的码就能纠所有长度i×t或i×b的突发错误。
交织深度i是交织和解交织的重要参数。交织深度i越大,突发错误的离散度也越大,错误的相关性越小。当i足够大时,就可把突发错误离散为随机错误。
交织器和解交织器的实现
交织器和解交织器实现的基本原理如图2所示,其中I表示交织深度。由图可见,共有I个通道,输入数据依次进入第0到I-1通道,并按照各自通道上的延时规律输出,交织器和解交织器相同通道上的延时是互补的,延时之和均为M×(I-1)。这样经过发射机交织器数据输出的先后顺序被打乱,再经过接收机解交织器又被重新恢复。
交织器和解交织器电路实现如图3所示。由于交织和解交织要对数据进行有规律的延时处理,所以输入数据首先被存入一双端口RAM中,然后经过一定时延后被读出,此延时由双端口RAM的读写地址来控制,因此,其实现的关键在于双端口RAM读写地址的产生和分配,不仅要有利于找到地址的变化规律,而且要易于电路实现。RAM读写地址产生的一种办法是将读写地址映射到ROM里,另一种办法是通过电路计算得到读写地址。前者方法简单,实现方便,但是添加ROM会占用存储资源,所以一般都采用后者,其实现也并不复杂。后者的实现电路包括单倍实现和双倍实现,所谓单倍和双倍主要是针对RAM存储单元的占用量而言,单倍实现所用RAM存储单元的容量是双倍的1/2左右。我们所设计的FPGA电路采用的是单倍实现,实现框图如图3所示。
下面就简述该设计中双端口RAM地址分配及读写地址的生成规律。以I=12,M=17的交织器为例。由于交织深度是12,所以有12个通道,表1列出每通道的地址分配,其中第1行对应图2中交织器的第0通道,第2行对应第1通道,第3行对应第2通道,……第12行对应第11通道。第i通道共有N=i×M+1个地址,且分配的地址是固定的。RAM读写地址按照交织器中各通道的延时规律变化,交织器的地址分配如表1所示。
交织时,第1时刻读地址可以是任意的,写地址为0;第2时刻读地址为1,写地址为18;第3时刻读地址为54,写地址为105,第4时刻读地址为3,写地址为27,第12时刻读地址为946,写地址为1133,第13时刻读地址为可以是任意的,写地址为0,第14时刻读地址为2,写地址为1,第15时刻读地址为20,写地址为19,余者依次类推。可见,0~11路通道的读写地址按各自的延时规律变化,第i通道读写地址在本通道向右方向循环相距i×17个单元。设计电路时,除第0通道外,每一通道都可采用一个计数器,每个计数器独立计数,设第i通道计数器的计数值为ai,通道的首地址为bi,尾地址为ci,这样,得到RAM的读写地址的变化规律:
第i通道读地址:ai + bi; (1)
第i通道写地址:ai + bi -1,当ai不等于0时;
ci,当ai等于0时; (2)
其中,bi=[0+1+...+(i -1)]×M+i+1;ci=[0+1+...+i]×M+i
电路实现如图4所示,计数器0由0到11递增计数,产生12路始能,分别控制11路计数器和直通通路的工作,同时选通其中一路从12选1电路输出。电路中的ai、bi、ci,与式1和式2相对应。由于第0通道不需要任何延时,所以用flag信号作为2选1电路选通输入数据直接输出;反之,选通从RAM读出的数据输出。
利用Quartus仿真波形图如图5所示。clk为驱动时钟,synin、dvin、din分别是输入同步头、有效位和数据,synout、dvout、dout分别是输出同步头、有效位和数据,flag是第0直通通道标识,rdad、wrad是RAM读写地址。
解交织时各通道的地址分配见表2,由于解交织与交织是互逆的过程,通道的时延相反,所以只要把交织器的地址分配倒置,即交织器的第0通道的地址分配变为解交织器的第11通道,而第11通道的地址分配变为解交织器的第0通道。计数器0改为由11到0递减计数,其它部分保持不变,所以交织器和解交织器都可以用图4实现,只是计数器0的计数方式不同。
电路特点分析
仍然以I=12,M=17的交织器和解交织器为例。
本设计采用单倍实现所用的存储单元总数Nram=[(I-1)×M/2+1]×I=1134,相应要用到地址总线的位数为Nad=ceil[log2(Nram)]=11。也就是说,要用到2k的双端口RAM,读写地址线各11根。
而采用一般的双倍实现占用的存储单元总数Nram=[(I-1)×M+1]×I=2256,相应要用到地址总线位数Nad=ceil[log2(Nram)]=12。如果采用双倍实现,要用到4k的双端口RAM,读写地址线各12根。
理论上最简存储单元的占用量为Nram=[(I-1)×M×I/2 =1122,地址总线位数为Nad=ceil[log2(Nram)]=11,所以单倍实现的优点是显而易见的,其占用存储单元数为双倍实现的一半,读写地址线各少1根,接近于最简占用量。只要交织深度I不是很深,该设计方法使用的逻辑单元门数并不多,而且可以节约大量的存储单元,效果是显而易见的。