交织器解交织器设计 联系客服

发布时间 : 星期三 文章交织器解交织器设计更新完毕开始阅读73975079de80d4d8d05a4f46

交织器/解交织器设计

卷积交织: 交织深度I=12,形成相互交迭的误码保护数据包,以抵抗信道中突发的干扰。

1 卷积交织和解交织的原理

交织过程可算作一个编码过程,他把经过纠错编码的数据进行一定的 排列组合,提高原有纠错编码的纠突发错误的能力。数字通信中一般采取 的同步交织有2 种: (1) 块交织

也叫矩阵行列转置法。可以表述为一个二维存储器阵列 ( N × B ) 。 交织过程是数据先按行写入,再按列读出;解交织过程则相反,是数据先按

列写入,再按行读出。块交织结构简单, 但数据延时时间长而且所需的存储器比较大。 (2) 卷积交织

交织器的输入端的输入符号数据按顺序分别进入 B 条支路延时器,每一路延时不同的符号周期。第一路无延时,第二路延时M个符号周期,第三路延时2M个符号周期,…,第B路延时( B - 1 )M 个符号周期。交织器的输出端按输入端的工作节拍分别同步输出对应支路经延时的数据。卷积交织每条支路符号数据的延时节拍为 di = ( i - 1)M B , i = 1,2, …, B 。解交织器的延时数与交织器相反。

在仔细对比块交织和卷积交织两种方法之后,考虑到缩短延时和减小器件体积,小组决定采用卷积交织的方法来设计。然而实现卷积交织的延时方法有多种,一是采用移位寄存器法,直接利用FIFO实现每条支路的延时, 这种方法实现简单, 但是当B与M值较大时,需要消耗大量的寄存器(图2所示);二是利用RAM来实现移位寄存器的功能,通过控制读/写地址来实现每条支路延迟。

第一种方法,因为其设计思路和做法都相对简单,但是当需要较大的延时数时,移位寄存器变得很大,占用大量的编译时间和芯片空间,实际中并不可取,最终采用了RAM来实现移位,合理地设计读写地址按规律变化,即可实现所要的延时。下面将阐述设计细节

设计要求,交织深度 B=12,M=17,即有 12 条数据通路。采用 RAM 来实现输入数据的时延,按照一定的读写地址规律同时读写 RAM 中。交织器各通道的写地址如图 4 所示,读地址则在写地址的数值上加 1,通过计算可以知道,第 0 通道无延时;第 1 通道延时 17*1 个时钟周期;第 2 通道延时 17*2 个时钟周期......依此类推,第 11 通道延时 17*11 个时钟周期。总共所需存储单元数为 1+18+....+188=1134,相应的要用到地址总线为 11b。也就是说要用到 2k 的 RAM。

交织器的设计:

交织器由以上四个模块构成:AddrGen(交织器读写地址),RAM,WRcon(产生读写控制信号),DataLock(数据锁存),工作过程是clk一个上升沿到来时,AddrGen产生了读写地址AddrW和AddrR,与此同时WRcon模块WE=0,RE=’1’ ,产生写入控制信号,RAM便在AddrW地址单元存储发送过来的数据DataIn。接着clk下降沿到来,WRcon模块WE=’1’ ,RE=‘0’,产生读取控制信号,RAM便读取AddrR地址单元内的数据, DataLock模块进行数据锁存。 接着clk又是上升沿到来, 如此循环。

交织器模块的代码:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity InterLeaver is port(clk:in std_logic;

DataIn:in std_logic_vector(7 downto 0); DataOut:out std_logic_vector(7 downto 0)); end entity;

architecture stru of InterLeaver is component AddrGen is

port(clk:in std_logic;

AddrR:out integer range 0 to 2047; AddrW:out integer range 0 to 2047 );

end component; component RAM is

port(AddrR:in integer range 0 to 2047;

AddrW:in integer range 0 to 2047; DataIn:in std_logic_vector(7 downto 0); DataOut:out std_logic_vector(7 downto 0); CS,RE,WE:in std_logic); end component;

component WRcon is port(clk:in std_logic; WE,RE:out std_logic); end component;

component DataLock is

port(Data:in std_logic_vector(7 downto 0); DataLock:out std_logic_vector(7 downto 0); RE:in std_logic); end component;

signal adr,adw:integer range 0 to 2047; signal we,re:std_logic;

signal d:std_logic_vector(7 downto 0); begin

u0:AddrGen port map(clk,adr,adw); u1:WRcon port map(clk,we,re);

u2:RAM port map(adr,adw,DataIn,d,'0',re,we); u3:DataLock port map(d,DataOut,re); end stru;

交织器读写地址模块:

RAM读写地址产生的一种办法就是将读写地址映射到ROM 里,另一种办法就是通过电路计算得到读写地址。这里采用后一方法设计交织器/解交织器读写地址产生模块,但其中应用了ROM存储读写地址的思想。