(完整版)基于FPGA的交织器和解交器的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
ram(conv_integer(ad))<=di;
end if ;
end if ;
end process;
end rtl;
(5)顶层模块
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity top is
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
component rom_16_8
port(addr: in integer range 0 to n-1;
clk: in std_logic;
data: out std_logic_vector(7 downto 0));
end component;
component mux2
port(d0:in std_logic_vector(7 downto 0);
专业设计报告
基于FPGA的交织器和解交器的实现
一:交织器原理………………………………………………………………………2
1实现原理………………………………………………………………2
2纠错原理……………………………………………………………2
二交织器的FPGA实现
1整体结构…………………………………………………………………3
(4)RAM模块
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity ram_16_8 is
port (ad:in std_logic_vector(7 downto 0);
2功能分析…………………………………………………………………3
3 模块设计………………………………………………………………4
(1)计数器模块………………………………………………………4
.
(2)选择器模块………………………………………………………5
(3)ROM模块………………………………………………………6
clk :in std_logic ;
di:in std_logic_vector(7 downto 0);
do:out std_logic_vector(7 downto 0);
wr_en: in std_logic:='0';
rd_en: in std_logic :='0');
end ram_16_8;
3模块设计
(1)计数器模块
计数器的作用是,为选择器提供顺序地址,为rom提供地址
VHDL描述如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
ty countern is
generic(n:integer:=16);
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);
use ieee.std_logic_1164.all;
entity rom_16_8 is
generic(n:integer:=16);
port(addr: in integer range 0 to n-1;
clk: in std_logic;
data: out std_logic_vector(7 downto 0));
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;
选择器仿真波形如下图

(3)ROM模块
library ieee;
rom_word'("00001011"),
rom_word'("00001111"));
begin process(clk)
begin
if clk'event and clk='1' then
data<=rom(addr);
end if;
end process;
end rtl;
ROM模块仿真波形图
交织的过程就是将一个数据系列按一定的条件进行位置从新排布。其逆过程就是解交。
常用交织器主要有三种:矩阵分组式,伪随机式,半伪随机式。本设计采用矩阵分组式。
矩阵分组式的原理及实现方式如下:
假设发送X=( )首先将X送入交织器,此交织器设计为按行取出的4x4的阵列存储器。送入交织器后,从存储器按行输出,送入突发差错的信道,信道输出在送入反交织器,完成交织与反交织,即按行输入,按列输出。
rom_word'("00000000"),
rom_word'("00000100"),
rom_word'("00001000"),
rom_word'("00001100"),
rom_word'("00000001"),
rom_word'("00000101"),
rom_word'("00001001"),
(4)RAM模块…………………………………………………………7
(5)顶层模块…………………………………………………………9
三设计总结…………………………………………………………………….14
一:交织器原理
1实现原理
随着通信技术的发展,对系统要求不断提高,在移动通信领域,由于数字信号在传输途中会随各种干扰,使得信号失真,因此需要利用编码技术来纠正信道中产生的随机错误。但是,仅利用纠错编码技术,对于传输过程中突发性干扰需要借助很长的码字,这样会很复杂,同时产生很长的延时,。交织技术作为一项改善通信系统性能的方式,将数据按照一定的规律打乱,把原来聚集的错误分散,使得突发错误变为随机错误,使得突发码字个数在纠错范围内,接收端就 可以用较短的码字进行纠错。
architecture rtl of ram_16_8 is
subtype ram_word is std_logic_vector(7 downto 0);
type ram_table is array (0 to 15) of ram_word;
signal ram:ram_table:=ram_table'(
经过交织去交矩阵输出为([x0],x1,[x2],x3,[x4],x5,x6,x7,[x8],x9,x10,x11,[x12],[x13],x14,x15)可以看到原来的四连错和三连错变成了随机性独立差错。
二交织器的FPGA实现
1整体结构
交织器总是按顺序写入数据,然后按交织地址读出数据。解交的过程与此过程相反,按解交地址写入数据,再按顺序读出数据就可以了。因此交织器和解交器可以按相似电路完成。
d1: in integer range 0 to n-1;
sel: in std_logic;
yout:out std_logic_vector(7 downto 0));
endcomponent;
component ram_16_8
port( ad:in std_logic_vector(7 downto 0);
end rom_16_8;
architecture rtl of rom_16_8 is
subtype rom_word is std_logic_vector(7 downto 0);
type rom_table is array(0 to 15) of rom_word;
constant rom :rom_table:=rom_table'(
ram_word'("00000000"),
ram_word'("00000000"));
begin process(clk)
begin
if clk'event and clk='1'then
if rd_en='1'then
do<=ram(conv_integer(ad));
end if ;
if wr_en='1' then
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';
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
ram_word'("00000000"),
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
2功能分析
交织器要写入数据,将数据存储起来,并读出,需要ram模块。
交织地址是固定的交织方式,可以用rom将地址存储起来,按顺序读取rom存储的ram地址就可以完成交织。
控制部分有计数器,选择器组成,完成对ram读写的控制。
电路框图如下
计数器产生顺序地址,数据选择器起地址控制作用,当需要顺序地址时 ,直接由计数器输到地址总线,当需要交织地址时,计数器的 输出送到ROM地址总线,再将ROM读出的交织地址送出。
clk:in std_logic;
di:in std_logic_vector(7 downto 0);
do:out std_logic_vector(7 downto 0);
rom_word'("00001101"),
rom_word'("00000010"),
rom_word'("00000110"),
rom_word'("00001010"),
rom_word'("00001110"),
rom_word'("00000011"),
rom_word'("00000111"),
generic(n:integer:=16);
port (clk: in std_logic;
clr: in std_logic;
ena :in std_logic;
di: in std_logic_vector(7 downto 0);
do : out std_logic_vector(7 downto 0));
→按行读出
:↓按列写入
则 交织器的输出为(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)(加[]的为错误信号)
end top;
architecture rtl of top is
component countern
port(clr,ena,clk:in std_logic;
q:buffer integer range 0 to n-1:=0;
cout: out std_logic);
end component;
相关文档
最新文档