好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

交织器解交织器设计.docx

18页
  • 卖家[上传人]:hs****ma
  • 文档编号:509641331
  • 上传时间:2023-06-02
  • 文档格式:DOCX
  • 文档大小:284.02KB
  • / 18 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 交织器/解交织器设计1卷积交织和解交织的原理交织过程可算作一个编码过程,他把经过纠错编码的数据进行一定的排列组合,提高原有纠错编码的纠突发错误的能力数字通信中一般采取的同步交织有2种:(1) 块交织也叫矩阵行列转置法可以表述为一个二维存储器阵列(N X B )交织过程是数据先按行写入,再按列读出;解交织过程则相反,是数据先按列写入,再按行读出块交织结构简单,但数据延时时间长而且所需的存储器比较大2) 卷积交织交织器的输入端的输入符号数据按顺序分别进入B条支路延时器,每一路延时不同的符号 周期第一路无延时,第二路延时M个符号周期,第三路延时2M个符号周期,…,第B路延时(B -1 )M个符号周期交织器的输出端按输入端的工作节拍分别同步输出对应支路经延时的 数据卷积交织每条支路符号数据的延时节拍为di = ( i - 1)M B,i = 1,2,…,B解交织器 的延时数与交织器相反在仔细对比块交织和卷积交织两种方法之后,考虑到缩短延时和减小器件体积,小组决定采 用卷积交织的方法来设计然而实现卷积交织的延时方法有多种,一是采用移位寄存器法, 直接利用FIFO实现每条支路的延时,这种方法实现简单,但是当B与M值较大时,需 要消耗大量的寄存器(图2所示);二是利用RAM来实现移位寄存器的功能,通过控制读/ 写地址来实现每条支路延迟。

      第一种方法,因为其设计思路和做法都相对简单,但是当需要较大的延时数时,移位寄存器 变得很大,占用大量的编译时间和芯片空间,实际中并不可取,最终采用了RAM来实现移 位,合理地设计读写地址按规律变化,即可实现所要的延时下面将阐述设计细节D. 18. A—► 1 2 a 4 5 6 7 8 —►S 2, FIFO移应繇飜作iffi写地址A读地址图3. RAM模仿FIFO功能的操作过程设计要求,交织深度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地址单元存储发送过来的数据Dataln。

      接着clk下降沿到来,WRcon模块 WE=1' ,RE‘O'产生读取控制信号,RAM便读取AddrR地址单元内的数据,DataLock 模块进行数据锁存接着clk又是上升沿到来,如此循环交织器模块的代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity InterLeaver isport(clk:in std_logic;Dataln:in std_logic_vector(7 downto 0);DataOut:out std_logic_vector(7 downto 0));end entity;architecture stru of InterLeaver iscomponent AddrGen isport(clk:in std_logic;AddrR:out integer range 0 to 2047;AddrW:out integer range 0 to 2047);end component;component RAM isport(AddrR:in integer range 0 to 2047;AddrW:in integer range 0 to 2047;Dataln: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 isport(clk:in std_logic;WE,R E:out std_logic);end component;component DataLock isport(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);beginu0: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存储读写地址的思想KOidit0卫丄血「■1=]」aW 1MXK > 40175lu MOI&1I14讯&21I mKlOiiO冲 W« J ILB|图氧交织器读写捷址Count 1^|dircclpilh —|-couml\ — »AL coun t 12 ]—^ 小cicreai读写地址产生的逻辑框图交织器读写地址VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity AddrGen is port(clk:in std_logic;AddrR:out integer range 0 to 2047; AddrW:out integer range 0 to 2047 );end AddrGen;architecture behav of AddrGen issignal count:integer range 0 to 11:=0; beginC:process(clk)variable c:integer range 0 to 11:=0; beginif(rising_edge(clk)) then c:=(c+1)mod 12;end if;count<=c;end process;addr:process(clk)constant a0:integer:=0; constant a1:integer:=1;constant c1:integer:=18; constant a2:integer:=19;constant c2:integer:=53; constant a3:integer:=54;constant c3:integer:=105; constant a4:integer:=106;constant c4:integer:=174; constant a5:integer:=175;constant c5:integer:=260; constant a6:integer:=261;constant c6:integer:=363; constant a7:integer:=364;constant c7:integer:=483; constant a8:integer:=484;constant c8:integer:=620; constant a9:integer:=621;constant c9:integer:=774; constant a10:integer:=775;constant c10:integer:=945;constant a11:integer:=946; constant c11:integer:=1133; variable b1:integer range 0 to 17:=0; variable b2:integer range 0 to 34:=0; variable b3:integer range 0 to 51:=0; variable b4:integer range 0 to 68:=0; variable b5:integer range 0 to 85:=0; variable b6:integer range 0 to 102:=0; variable b7:integer range 0 to 119:=0; variable b8:integer range 0 to 136:=0; variable b9:integer range 0 to 153:=0; variable b10:integer range 0 to 170:=0; variable b11:integer range 0 to 187:=0;beginif(rising_edge(clk)) thencase count iswhen 0=> AddrW<=a0;AddrR<=a0;when 1=>b1:=(b1+1)mod 18;if(b1=0) thenAddrW<=c1;AddrR<=a1;elseAddrR<=a1+b1;AddrW<=a1+b1-1;end if;when 2=>b2:=(b2+1)mod 35;if(b2=0) thenAddrW<=c2;AddrR<=a2;elseAddrR<=a2+b2;AddrW<=a2+b2-1;end if;when 3=>b3:=(b3+1)mod 52;if(b3=0) thenAddrW<=c3;AddrR<=a3;elseAddrR<=a3+b3;AddrW<=a3+b3-1;end if;when 4=>b4:=(b4+1)mod 69;if(b4=0) thenAddrW<=c4;AddrR<=a4;elseAddrR<=a4+b4;AddrW<=a4+b4-1;end if;when 5=>b5:=(b5+1)mod 86;if(b5=0) thenAddrW<=c5;AddrR<=a5;else。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.