基于FPGA的交织器和解交器的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业设计报告

基于FPGA的交织器和解交器的实现

班级:08集成

专业:

学院:电子信息工程

指导老师:

目录

一:交织器原理 (2)

1实现原理 (2)

2纠错原理 (2)

二交织器的FPGA实现

1 整体结构 (3)

2功能分析 (3)

3 模块设计 (4)

( 1)计数器模块 (4)

.

(2)选择器模块 (5)

(3)ROM模块 (6)

(4)RAM模块 (7)

(5)顶层模块 (9)

三设计总结 (14)

一:交织器原理

1实现原理

随着通信技术的发展,对系统要求不断提高,在移动通信领域,由于数字信号在传输途中会随各种干扰,使得信号失真,因此需要利用编码技术来纠正信道中产生的随机错误。但是,仅利用纠错编码技术,对于传输过程中突发性干扰需要借助很长的码字,这样会很复杂,同时产生很长的延时,。交织技术作为一项改善通信系统性能的方式,将数据按照一定的规律打乱,把原来聚集的错误分散,使得突发错误变为随机错误,使得突发码字个数在纠错范围内,接收端就可以用较短的码字进行纠错。

交织的过程就是将一个数据系列按一定的条件进行位置从新排布。其逆过程就是解交。

常用交织器主要有三种:矩阵分组式, 伪随机式, 半伪随机式。本设计采用矩阵分组式。

矩阵分组式的原理及实现方式如下:

假设发送

X =(x

16....x x x 321)首先将X 送入交织器,此交织器设计为按行取出的4x4的阵列存储器。送入交织器后,从存储器按行输出,送入突发差错的信

道,信道输出在送入反交织器,完成交织与反交织,即按行输入,按列输出。

按行读出

15

x x11x7x314x x10x6x213

x x9

x5

x1x12x8x40x :

按列写入

则 交织器的输出为(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)(加[]的为错误信号)

经过交织去交矩阵输出为([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读出的交织地址送出。

3 模块设计

(1)计数器模块

计数器的作用是,为选择器提供顺序地址,为rom提供地址 VHDL描述如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

entity countern is

generic(n:integer:=16);

port(clr,ena,clk:in std_logic;

q:buffer integer range 0 to n-1;

cout:out std_logic);

end countern;

architecture rtl of countern is

begin

process (clk,clr)

begin

if clr='1'then

q<=0;

else

if clk='1' and clk'event then

if ena='1' then

if q=q'high then

q<=0;

else q<=q+1;

end if;

end if;

end if;

end if;

if q=q'high then

cout<='1';

else

cout<='0';

end if ;

end process;

end rtl;

仿真波形如下:

(2)选择器模块

VHDL描述如下

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

entity mux2 is

generic (n:integer:=16);

port (d0:in std_logic_vector(7 downto 0);

d1: in integer range 0 to n-1;

sel:in std_logic;

yout: out std_logic_vector(7 downto 0));

end mux2;

architecture if_march of mux2 is

begin

process(d0,d1,sel)

begin

if(sel='1') then

yout<=conv_std_logic_vector(d1,8);

else

yout<=d0;

end if;

end process;

end if_march;

相关文档
最新文档