利用FPGA技术实现数字通信中的交织器和解交织器
2009-06-22
作者:邹 翊 匡镜明
摘 要: 介绍用FPGA实现数字通信中的交、解交织器的一种比较通用的方案,详细说明了设计中的一些问题及解决办法。还介绍了一种实现FPGA中信号延时的方法。
关键词: 交织器与解交织器 FPGA技术 地址序列 最小时延 信号延时
在现代数字通信系统中,FPGA的应用相当广泛。尤其是在对基带信号的处理和整个系统的控制中,FPGA不但能大大缩减电路的体积,提高电路的稳定性,而且先进的开发工具使整个系统的设计调试周期大大缩短。
1 交织器与解交织器的原理
数字通信中经常用信道编码来提高数据传输的可靠性,其中一些信道编码加入了交织模块,以进一步提高抗干扰性能。交织器的主要作用就是将原始数据序列打乱,使得交织前后数据序列的相关性减弱,这样做很突出的一个优点便是大大降低了数据突发错误的影响。在现代的高效编码调制技术中,无论是级联编码还是Turbo编码中都要使用交织器。
数字通信中常用的交织器按交织方式可分为分组交织器和随机交织器两种,按交织对象分可分为字节交织和位交织。本文所介绍的实现方案主要针对字节交织器。下面用一个模型来说明交织器的工作过程。设外码RS码字长度为n=7,交织器深度Id=4,相邻码字之间的交错字节数di=[]=Smallest Integer≥=2,则交织器的功能如下图1所示。
输入码字按行排列,按列输出,图中“*”为无效数据,即交织器输出的前端有一些无效数据。
解交织器将交织器打乱的字节序列重新排列恢复原始码字。如图1,即将串行输入的字节序列先按列方式读入,再逐行将码字读出。从图中可以看出,行与行的码字间均有di字节交错,这种斜交织方式的优点可以减小系统时延。
2 交织器的实现
2.1 实现模型:
在本课题中,交织器的几个参数分别为:n=219,Id=8,di=[]=28。图2是实现交织器模型。
图中粗线内的方块区域为实现交织器所必须的一块数据缓冲区(存储器),考虑到交织器的功能特性是须对此缓冲区同时读写,故选用双口RAM实现最好,因为1024<219×8<2048,故容量用2Kbytes即可。模型中所标识的数字是存储器的地址,画斜线的区域为空闲缓存区,右边存储器外虚线下数据实际上是存储在存储器左下角的区域内。交织器实际工作时,一边按写地址序列向缓存区中写入数据,另一边按读地址序列读出。图2模型的写地址序列为:0,1,2...218,284,285...437,256,257...283,568,569...656,512,513...567,852......,依次写入每行,直到1987,下一字节再从0地址开始,循环写入。读地址序列为:0,256,512,768,1024...1792,1,257,513......,直到1751地址,再从0地址开始循环。
对于解交织器,读地址序列正好是交织器的写地址序列,写地址序列是交织器的读地址序列。
2.2 FPGA的选用及实现的原理框图
目前主要的FPGA厂商有Xilinx、Altera、AMD、Lattice、Actel、Lucent及Atmel等。Altera公司生产的FLEX 10K系列的FPGA,具有规模覆盖范围广、布线资源丰富、时间可预测性好的优点,故而在数字通信系统设计中得到了广泛的应用。此外,FLEX 10K系列芯片都具有EAB(Embeded Array Block),可以实现片内存储器功能,若用EAB做交织器、解交织器的数据缓存区,就可以用单片FPGA完成交、解交织器的功能,从而大大减小电路的复杂度和体积。但实际应用中,由于FLEX 10K芯片的片内EAB资源有限,所以要完全实现交、解交织器,至少要选择FLEX 10K130(内部有13万门左右的资源)以上规模的FPGA。可是实现交织器的时序控制逻辑并不复杂,大概需要一万门左右的资源就够了,再加上系统其它功能块也不过几万门,若使用10K130芯片就会造成资源浪费,而且成本过高。综合考虑,决定用外部双口RAM(IDT 7132)当作数据缓冲区,FPGA选用FLEX 10K20芯片。
图3即为用FPGA实现交织器的原理框图,FPGA的内部可由读、写地址序列发生器和时序控制器三部分组成。时序控制器主要产生双口RAM读写控制信号,并决定读、写地址序列发生器何时启动工作。因为解交织器仅是数据进出双口RAM的顺序不同,故上原理图中只须变换读、写地址序列发生器便可构成解交织器。
3 实现中的若干问题
3.1 读写地址的产生问题
最一般的方案为查找表的方法。令输入数据顺序存入双口RAM,即写地址序列变为:0,1,2,3...1750,1751,0......,对照模型找出对应的读地址序列。这样重新编址的好处是使写地址序列易于产生,可以由FPGA直接生成。将读地址序列做成表顺序存入E2PROM(或其它只读存储器,如Flash),需要读双口RAM时,FPGA产生0,1,2...1751顺序序列作地址送给E2PROM,映射出的数据送给双口RAM作读地址。这种查找表的方法具有很好的通用性,可以适用于各类字节交织器,但缺点是须额外附加存储器,而且E2PROM的读取速度一般较慢,在数据传输速率较高的情况下不适用。
本课题中的交织器在图2所示的模型和编址方法下,读、写地址序列具有较强的规律性,可以用在FPGA中构造计数器的方式来直接产生。下面介绍一下地址序列的产生方法。将11位地址分成两部分:高3位和底8位,在物理实现上构造3位和8位计数器各一个,然后级联起来。对于交织器的读地址序列,具体实现时,用数据输入时钟DataInClk驱动3位计数器计数,3位计数器记满同步清0时产生脉冲驱动8位计数器计数,8位计数器计到218后同步清0。交织器的写地址序列产生稍复杂,但同样可用两计数器的级联产生。
3.2 交织、解交织器的最小时延问题
无论是交织器还是解交织器,数据缓冲区的读相对于写必须有一个延时,这个延时即为交织器和解交织器的时延。为了尽量减小系统的时延,应使交织器和解交织器的时延降至最小。
首先分析交织器,设数据周期为T,则每个缓冲区单元的读或写地址的保持时间也为T。考察图2模型中从第i行的交错后的第一个元素A到第i+1行的元素B所用的时间,若按写操作进行需219×T,按读操作进行需(28×8+1)T=225T>219T。这表明若读、写同时从0地址开始,则缓冲区那的每个存储单元的写操作都在读操作之前,从而保证每个读出的数据都有效。这里对于交错所产生的左下角区域元素,交织器开始工作时读出的都是无效数据,但在循环往复的连续数据读写中,读出的则是上一页所写码字的部分字节,是有效数据。故在交织器中,读、写缓冲区可以同时开始,考虑到双口RAM对同一单元不能同时读写,所以设计时令读滞后于写一个数据周期T,这样交织器的最小时延为T。
解交织器的分析方法类似。由模型二可推算出,当系统写双口RAM的E单元时,读从0地址单元开始,故解交织器的最小时延为:(28×7×8+1)T= 1569T。
3.3 FPGA中延时功能的实现
在FPGA的开发设计中,经常需要用到延时模块。如本设计中,实现双口RAM的读写时序时就需要。以IDT 7132的读时序为例,时序图如图4所示。
无论用还是来控制读取,都需要或保持一段低电平。令保持低电平,平时为高电平,读双口RAM时触发CE变为低电平,延迟一小段时间再恢复高电平。本设计产生这段延时的方法是用高频计数器产生,具体方法为:在FPGA中设计一个计数器,取系统可用的高频时钟(周期小于所需延时)驱动它计数,计到设定好的终值时产生触发脉冲。不同的计数终值可以产生不同的延时。此方法所产生的延时为高频时钟周期的整数倍,若高频时钟周期与所需延时相比很小,则延时较精确,否则只能做一粗略的延时。
当需要对某一信号作一段延时时,初学者往往在此信号后串接一些非门或其它门电路,此方法在分离电路中是可行的。但在FPGA中,开发软件在综合设计时会将这些门当作冗余逻辑去掉,达不到延时的效果。用Altera公司的Maxplus II开发FPGA时,可以通过插入一些LCELL原语来产生一定的延时,但这样形成的延时在FPGA芯片中并不稳定,会随温度等外部环境的改变而改变,因此Altera并不提倡这样做。在此,沿用上一段中的思想,可以用高频时钟来驱动一移位寄存器,待延时信号作数据输入,按所需延时正确设置移位寄存器的级数,移位寄存器的输出即为延时后的信号。此方法产生的延时信号与原信号比有误差,误差大小由高频时钟的周期来决定。对于数据信号的延时,在输出端用数据时钟对延时后信号重新采样,就可以消除误差。
总之,本文着重介绍了用FPGA实现数字通信中的交、解交织器的一种比较通用的方案。其它种类的交织器,只需更换读、写地址产生模块,确定读、写时差即可完成。除了随机交织器须用查找表的方式产生读地址序列外,大部分的交织器读、写地址都可用本文介绍的类似方法实现,这样既节省芯片,缩小电路体积,速度又快,调试也大大简化。文中还介绍了一种实现FPGA中信号粗略延时的方法以供大家参考。
参考文献
1 Intelsat Earth Station Standards (IESS) Documents IESS-310 (Rev.B),May 1997
2 王小军编著.VHDL简明教程.北京:清华大学出版社,1997
3 Leonardo HDL Synthesis Guide,Exemplar Logic
4 马群生,李健航编译.MAX Plus II 入门.清华大学Altera培训中心,1996.4