交织器解交织器设计_第1页
交织器解交织器设计_第2页
交织器解交织器设计_第3页
交织器解交织器设计_第4页
交织器解交织器设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、交织器/解交织器设计1卷积交织和解交织的原理交织过程可算作一个编码过程,他把经过纠错编码的数据进行一定的排列组合,提高原有纠错编码的纠突发错误的能力。数字通信中一般采取的同步交织有2种:块交织也叫矩阵行列转置法。可以表述为一个二维存储器阵列(N X B )。交织过程是数据先按行写入,再按列读出;解交织过程则相反,是数据先按列写入,再按行读出。块交织结构简单,但数据延时时间长而且所需的存储器比较大。卷积交织交织器的输入端的输入符号数据按顺序分别进入B条支路延时器,每一路延时不同的符号 周期。第一路无延时,第二路延时M个符号周期,第三路延时2M个符号周期,第B路延时(B -1 )M个符号周期。交织

2、器的输出端按输入端的工作节拍分别同步输出对应支路经延时的 数据。卷积交织每条支路符号数据的延时节拍为di = ( i - 1)M B,i = 1,2,,B。解交织器 的延时数与交织器相反。在仔细对比块交织和卷积交织两种方法之后,考虑到缩短延时和减小器件体积,小组决定采 用卷积交织的方法来设计。然而实现卷积交织的延时方法有多种,一是采用移位寄存器法, 直接利用FIFO实现每条支路的延时,这种方法实现简单,但是当B与M值较大时,需 要消耗大量的寄存器(图2所示);二是利用RAM来实现移位寄存器的功能,通过控制读/ 写地址来实现每条支路延迟。第一种方法,因为其设计思路和做法都相对简单,但是当需要较大

3、的延时数时,移位寄存器 变得很大,占用大量的编译时间和芯片空间,实际中并不可取,最终采用了RAM来实现移 位,合理地设计读写地址按规律变化,即可实现所要的延时。下面将阐述设计细节D. 18. A 12 a 4567 8 S 2, FIFO移应繇飜作iffi写地址A读地址写地址A读地址图3. RAM模仿FIFO功能的操作过程设计要求,交织深度B=12,M=17,即有12条数据通路。采用RAM来实现输入数据的时延, 按照一定的读写地址规律同时读写RAM中。交织器各通道的写地址如图4所示,读地址 则在写地址的数值上加1,通过计算可以知道,第0通道无延时;第1通道延时17*1个 时钟周期;第2通道延时

4、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下降沿到来,WR

5、con模块 WE=1 ,REO产生读取控制信号,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;arch

6、itecture 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_l

7、ogic_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 r

8、ange 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里,另一种办法就是通过电 路计算得到读写地址。这里采用后一方法设

9、计交织器/解交织器读写地址产生模块,但其中 应用了 ROM存储读写地址的思想。KOidit0卫丄血1=aW 1MXK 40175luMOI&1I14讯&21I mKlOiiO冲WJ 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

10、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 AddrW=a0;AddrRb1:=(b1+1)mod 18;if(b1=0) th

11、enAddrW=c1;AddrR=a1;elseAddrR=a1+b1;AddrWb2:=(b2+1)mod 35;if(b2=0) thenAddrW=c2;AddrR=a2;elseAddrR=a2+b2;AddrWb3:=(b3+1)mod 52;if(b3=0) thenAddrW=c3;AddrR=a3;elseAddrR=a3+b3;AddrWb4:=(b4+1)mod 69;if(b4=0) thenAddrW=c4;AddrR=a4;elseAddrR=a4+b4;AddrWb5:=(b5+1)mod 86;if(b5=0) thenAddrW=c5;AddrR=a5;else

12、AddrR=a5+b5;AddrW b6:=(b6+1)mod 103; if(b6=0) then AddrW=c6;AddrR=a6;elseAddrR=a6+b6;AddrW b7:=(b7+1)mod 120; if(b7=0) then AddrW=c7;AddrR=a7;elseAddrR=a7+b7;AddrW b8:=(b8+1)mod 137; if(b8=0) then AddrW=c8;AddrR=a8;elseAddrR=a8+b8;AddrW b9:=(b9+1)mod 154; if(b9=0) then AddrW=c9;AddrR=a9;elseAddrR=a9

13、+b9;AddrW b10:=(b10+1)mod 171; if(b10=0) thenAddrW=c10;AddrR=a10;elseAddrR=a10+b10;AddrW b11:=(b11+1)mod 188;if(b11=0) thenAddrW=c11; AddrR=a11;elseAddrR=a11+b11;AddrW=a11+b11-1;end if;end case;end if;end process;end behav;产生读写控制信号模块:有了读写地址,还需要有读写控制信号。在一个时钟周期内,令clk= 1时,将待发送数 据写入RAM地址为AddrW的单元,clk= O

14、时,读取RAM地址为AddrR的单元里的 数据并发送。VHDL 代码: library ieee;use ieee.std_logic_1164.all;entity WRCon isport(clk:in std_logic;WE,RE:out std_logic);end entity;architecture behav of WRcon isbegin process(clk)begin if(clkevent and clk=1)thenWE=O;RE=1;elseWE=1;RE00000000);beginif(CS=0) thenif(RE=0) then DataOut=mem

15、(AddrR); elsif(WE=0) then mem(AddrW):=DataIn; end if;end if;end process;end behav;数据锁存模块:由于数据读取控制信号RE只占半个时钟周期,故需要将输出数据进行锁存,保证输出信号 稳定。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DataLock isport(Data:in std_logic_vector(7 downto 0);DataLock:out std_logic_vector(7 do

16、wnto 0);RE:in std_logic);end DataLock;architecture behav of DataLock isbeginprocess(Data,RE)beginif(RE=0) then DataLock=Data;end if;end process;end behav;解交织器解交织器也又四个模块组成:DeAddrGen,WRcon,RAM,DataLock。DeAddrGen模块根据图5 产生读写地址。接着便要验证从解交织器得到的数据是否与发送数据 DataIn 相同。经过分 析发现,交织器输出的第一个数据是无效数据(RAM还没有输出,是DataLock

17、初始输出信 号),故解交织器应该比交织器延迟一个时钟。解交织器模块代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DeInterLeaver isport(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 DeInterLeaver iscomponent DeAddrGe

18、n 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;DataIn:in std_logic_vector(7 downto 0);DataOut:out std_logic_vector(7 downto 0);CS,RE,WE:in std_logic);e

19、nd component;component WRcon isport(clk:in std_logic;WE,RE: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_l

20、ogic_vector(7 downto 0);beginu0:DeAddrGen 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;解交织器读写地址 VHDL 代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DeAddrGen isport(clk:i

21、n std_logic;AddrR:out integer range 0 to 2047;AddrW:out integer range 0 to 2047 );end DeAddrGen;architecture behav of DeAddrGen is signal 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 b0:=(b0+1)mod 188

22、;if(b0=0) thenAddrW=c0;AddrR=a0;elseAddrR=a0+b0;AddrW b1:=(b1+1)mod 171;if(b1=0) thenAddrW=c1;AddrR=a1;elseAddrR=a1+b1;AddrW b2:=(b2+1)mod 154; if(b2=0) then AddrW=c2;AddrR=a2;else AddrR=a2+b2; AddrW b3:=(b3+1)mod 137; if(b3=0) then AddrW=c3;AddrR=a3;elseAddrR=a3+b3; AddrW b4:=(b4+1)mod 120; if(b4=0) then AddrW=c4;AddrR=a4;elseAddrR=a4+b4; AddrW b5:=(b5+1)mod 103; if(b5=0) then AddrW=c5;AddrR=a5;else AddrR=a5+b5; AddrW b6:=(b6+1)mod 86; if(b6=0) then AddrW=c6; AddrR=a6;elseAddrR=a6+b6;AddrW b7:=(b7+1)mod 69;if(b7=0) thenAddrW=c7;AddrR=a7;elseAddrR=a7+b7;AddrW b8:=(b8+1)mod 52;if(b8=0) t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论