您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于FPGA的交织器和解交器的实现
0专业设计报告基于FPGA的交织器和解交器的实现班级:08集成专业:学院:电子信息工程指导老师:1目录一:交织器原理………………………………………………………………………21实现原理………………………………………………………………22纠错原理……………………………………………………………2二交织器的FPGA实现1整体结构…………………………………………………………………32功能分析…………………………………………………………………33模块设计………………………………………………………………4(1)计数器模块………………………………………………………4.(2)选择器模块………………………………………………………5(3)ROM模块………………………………………………………6(4)RAM模块…………………………………………………………7(5)顶层模块…………………………………………………………9三设计总结…………………………………………………………………….142一:交织器原理1实现原理随着通信技术的发展,对系统要求不断提高,在移动通信领域,由于数字信号在传输途中会随各种干扰,使得信号失真,因此需要利用编码技术来纠正信道中产生的随机错误。但是,仅利用纠错编码技术,对于传输过程中突发性干扰需要借助很长的码字,这样会很复杂,同时产生很长的延时,。交织技术作为一项改善通信系统性能的方式,将数据按照一定的规律打乱,把原来聚集的错误分散,使得突发错误变为随机错误,使得突发码字个数在纠错范围内,接收端就可以用较短的码字进行纠错。交织的过程就是将一个数据系列按一定的条件进行位置从新排布。其逆过程就是解交。常用交织器主要有三种:矩阵分组式,伪随机式,半伪随机式。本设计采用矩阵分组式。矩阵分组式的原理及实现方式如下:假设发送X=(x16....xxx321)首先将X送入交织器,此交织器设计为按行取出的4x4的阵列存储器。送入交织器后,从存储器按行输出,送入突发差错的信道,信道输出在送入反交织器,完成交织与反交织,即按行输入,按列输出。→按行读出15xx11x7x314xx10x6x213xx9x5x1x12x8x40x:↓按列写入则交织器的输出为(x0,x4,x8,x12,x1,x5,x9,x13,…x15)2纠错原理:假设信道产生两个突发性错误,第一个产生与x0到x12,连错4个,第二个产生于x9到x2,连错三个,则此收到的信号为,([x0],[x4],[x8],[x12],x1,x5,[x9],[x13],[x2],x6,x10,x14,x3,x7,x11,x15)(加[]的为错误信号)3经过交织去交矩阵输出为([x0],x1,[x2],x3,[x4],x5,x6,x7,[x8],x9,x10,x11,[x12],[x13],x14,x15)可以看到原来的四连错和三连错变成了随机性独立差错。二交织器的FPGA实现1整体结构交织器总是按顺序写入数据,然后按交织地址读出数据。解交的过程与此过程相反,按解交地址写入数据,再按顺序读出数据就可以了。因此交织器和解交器可以按相似电路完成。2功能分析交织器要写入数据,将数据存储起来,并读出,需要ram模块。交织地址是固定的交织方式,可以用rom将地址存储起来,按顺序读取rom存储的ram地址就可以完成交织。控制部分有计数器,选择器组成,完成对ram读写的控制。电路框图如下计数器产生顺序地址,数据选择器起地址控制作用,当需要顺序地址时,直接由计数器输到地址总线,当需要交织地址时,计数器的输出送到ROM地址总线,再将ROM读出的交织地址送出。RAM模块二选一选择器ROM模块计数器输出数据输入数据写信号读信号交织解交控制交织地址顺序地址43模块设计(1)计数器模块计数器的作用是,为选择器提供顺序地址,为rom提供地址VHDL描述如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;entitycounternisgeneric(n:integer:=16);port(clr,ena,clk:instd_logic;q:bufferintegerrange0ton-1;cout:outstd_logic);endcountern;architecturertlofcounternisbeginprocess(clk,clr)beginifclr='1'thenq=0;elseifclk='1'andclk'eventthenifena='1'thenifq=q'highthenq=0;elseq=q+1;endif;endif;endif;endif;ifq=q'highthencout='1';elsecout='0';endif;endprocess;endrtl;仿真波形如下:5(2)选择器模块VHDL描述如下libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;entitymux2isgeneric(n:integer:=16);port(d0:instd_logic_vector(7downto0);d1:inintegerrange0ton-1;sel:instd_logic;yout:outstd_logic_vector(7downto0));endmux2;architectureif_marchofmux2isbeginprocess(d0,d1,sel)beginif(sel='1')thenyout=conv_std_logic_vector(d1,8);elseyout=d0;endif;endprocess;endif_march;6选择器仿真波形如下图:(3)ROM模块libraryieee;useieee.std_logic_1164.all;entityrom_16_8isgeneric(n:integer:=16);port(addr:inintegerrange0ton-1;clk:instd_logic;data:outstd_logic_vector(7downto0));endrom_16_8;architecturertlofrom_16_8issubtyperom_wordisstd_logic_vector(7downto0);typerom_tableisarray(0to15)ofrom_word;constantrom:rom_table:=rom_table'(rom_word'(00000000),rom_word'(00000100),rom_word'(00001000),rom_word'(00001100),rom_word'(00000001),rom_word'(00000101),rom_word'(00001001),rom_word'(00001101),rom_word'(00000010),rom_word'(00000110),rom_word'(00001010),7rom_word'(00001110),rom_word'(00000011),rom_word'(00000111),rom_word'(00001011),rom_word'(00001111));beginprocess(clk)beginifclk'eventandclk='1'thendata=rom(addr);endif;endprocess;endrtl;ROM模块仿真波形图(4)RAM模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityram_16_8isport(ad:instd_logic_vector(7downto0);clk:instd_logic;di:instd_logic_vector(7downto0);do:outstd_logic_vector(7downto0);8wr_en:instd_logic:='0';rd_en:instd_logic:='0');endram_16_8;architecturertlofram_16_8issubtyperam_wordisstd_logic_vector(7downto0);typeram_tableisarray(0to15)ofram_word;signalram:ram_table:=ram_table'(ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000),ram_word'(00000000));beginprocess(clk)beginifclk'eventandclk='1'thenifrd_en='1'thendo=ram(conv_integer(ad));endif;ifwr_en='1'thenram(conv_integer(ad))=di;endif;endif;endprocess;endrtl;9(5)顶层模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;entitytopisgeneric(n:integer:=16);port(clk:instd_logic;clr:instd_logic;ena:instd_logic;di:instd_logic_vector(7downto0);do:outstd_logic_vector(7downto0));endtop;architecturertloftopiscomponentcounternport(clr,ena,clk:instd_logic;q:bufferintegerrange0ton-1:=0;cout:outstd_logic);endcomponent;componentrom_16_8port(addr:inintegerrange0ton-1;clk:instd_logic;data:outstd_logic_vector(7downto0));endcomponent;componentmux2port(d0:instd_logic_vector(7downto0);d1:inintegerrange0ton-1;sel:instd_logic;yout:outstd_logic_vector(7downto0));endcomponent;10componentram_16_8port(ad:instd_logic_vector(7downto0);clk:instd_logic;di:instd_logic_vector(7downto0);do:outstd_logic_vector(7downto0);wr_en:instd_logic:='0';rd_en:instd_logic:='0');endcomponent;signalqs:integerrange0ton-1:=0;signalds:std_logic_vector(7downto0);signalys:std_logic_
本文标题:基于FPGA的交织器和解交器的实现
链接地址:https://www.777doc.com/doc-6636997 .html