利用FPGA技术实现数字通信中的交织器和解交织器

2006-05-07 15:50:06来源: 电子技术应用

    输入码字按行排列,按列输出,图中“*”为无效数据,即交织器输出的前端有一些无效数据。

解交织器将交织器打乱的字节序列重新排列恢复原始码字。如图1,即将串行输入的字节序列先按列方式读入,再逐行将码字读出。从图中可以看出,行与行的码字间均有di字节交错,这种斜交织方式的优点可以减小系统时延。

2 交织器的实现

2.1 实现模型:

    在本课题中,交织器的几个参数分别为:n=219,Id=8,di=[219-1 / 8]=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所示。

    无论用CE还是OE来控制读取,都需要CE或OE保持一段低电平。令OE保持低电平,CE平时为高电平,读双口RAM时触发CE变为低电平,延迟一小段时间再恢复高电平。本设计产生这段延时的方法是用高频计数器产生,具体方法为:在FPGA中设计一个计数器,取系统可用的高频时钟(周期小于所需延时)驱动它计数,计到设定好的终值时产生触发脉冲。不同的计数终值可以产生不同的延时。此方法所产生的延时为高频时钟周期的整数倍,若高频时钟周期与所需延时相比很小,则延时较精确,否则只能做一粗略的延时。

    当需要对某一信号作一段延时时,初学者往往在此信号后串接一些非门或其它门电路,此方法在分离电路中是可行的。但在FPGA中,开发软件在综合设计时会将这些门当作冗余逻辑去掉,达不到延时的效果。用Altera公司的Maxplus II开发FPGA时,可以通过插入一些LCELL原语来产生一定的延时,但这样形成的延时在FPGA芯片中并不稳定,会随温度等外部环境的改变而改变,因此Altera并不提倡这样做。在此,沿用上一段中的思想,可以用高频时钟来驱动一移位寄存器,待延时信号作数据输入,按所需延时正确设置移位寄存器的级数,移位寄存器的输出即为延时后的信号。此方法产生的延时信号与原信号比有误差,误差大小由高频时钟的周期来决定。对于数据信号的延时,在输出端用数据时钟对延时后信号重新采样,就可以消除误差。

    总之,本文着重介绍了用FPGA实现数字通信中的交、解交织器的一种比较通用的方案。其它种类的交织器,只需更换读、写地址产生模块,确定读、写时差即可完成。除了随机交织器须用查找表的方式产生读地址序列外,大部分的交织器读、写地址都可用本文介绍的类似方法实现,这样既节省芯片,缩小电路体积,速度又快,调试也大大简化。文中还介绍了一种实现FPGA中信号粗略延时的方法以供大家参考。

编辑: 引用地址:http://www.eeworld.com.cn/designarticles/network/200605/2975.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved