基于FPGA的交织器和解交器的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;