交織器解交織器設計_第1頁
交織器解交織器設計_第2頁
交織器解交織器設計_第3頁
交織器解交織器設計_第4頁
交織器解交織器設計_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 交織器/解交織器設計 卷積交織: 交織深度I=12,形成相互交迭的誤碼保護數(shù)據(jù)包,以抵抗信道中突發(fā)的干擾。1 卷積交織和解交織的原理交織過程可算作一個編碼過程,他把經(jīng)過糾錯編碼的數(shù)據(jù)進行一定的排列組合,提高原有糾錯編碼的糾突發(fā)錯誤的能力。數(shù)字通信中一般采取的同步交織有2 種:(1) 塊交織也叫矩陣行列轉置法??梢员硎鰹橐粋€二維存儲器陣列 ( N B ) 。交織過程是數(shù)據(jù)先按行寫入,再按列讀出;解交織過程則相反,是數(shù)據(jù)先按列寫入,再按行讀出。塊交織結構簡單, 但數(shù)據(jù)延時時間長而且所需的存儲器比較大。(2) 卷積交織交織器的輸入端的輸入符號數(shù)據(jù)按順序分別進入 B 條支路延時器,每一路延時不同的符

2、號周期。第一路無延時,第二路延時M個符號周期,第三路延時2M個符號周期,第B路延時( B - 1 )M 個符號周期。交織器的輸出端按輸入端的工作節(jié)拍分別同步輸出對應支路經(jīng)延時的數(shù)據(jù)。卷積交織每條支路符號數(shù)據(jù)的延時節(jié)拍為 di = ( i - 1)M B , i = 1,2, , B 。解交織器的延時數(shù)與交織器相反。在仔細對比塊交織和卷積交織兩種方法之后,考慮到縮短延時和減小器件體積,小組決定采用卷積交織的方法來設計。然而實現(xiàn)卷積交織的延時方法有多種,一是采用移位寄存器法,直接利用FIFO實現(xiàn)每條支路的延時, 這種方法實現(xiàn)簡單, 但是當B與M值較大時,需要消耗大量的寄存器(圖2所示);二是利用R

3、AM來實現(xiàn)移位寄存器的功能,通過控制讀寫地址來實現(xiàn)每條支路延遲。第一種方法,因為其設計思路和做法都相對簡單,但是當需要較大的延時數(shù)時,移位寄存器變得很大,占用大量的編譯時間和芯片空間,實際中并不可取,最終采用了RAM來實現(xiàn)移位,合理地設計讀寫地址按規(guī)律變化,即可實現(xiàn)所要的延時。下面將闡述設計細節(jié)設計要求,交織深度 B=12,M=17,即有 12 條數(shù)據(jù)通路。采用 RAM 來實現(xiàn)輸入數(shù)據(jù)的時延,按照一定的讀寫地址規(guī)律同時讀寫 RAM 中。交織器各通道的寫地址如圖 4 所示,讀地址則在寫地址的數(shù)值上加 1,通過計算可以知道,第 0 通道無延時;第 1 通道延時 17*1 個時鐘周期;第 2 通道延

4、時 17*2 個時鐘周期.依此類推,第 11 通道延時 17*11 個時鐘周期。總共所需存儲單元數(shù)為 1+18+.+188=1134,相應的要用到地址總線為 11b。也就是說要用到 2k 的 RAM。 交織器的設計:交織器由以上四個模塊構成:AddrGen(交織器讀寫地址),RAM,WRcon(產(chǎn)生讀寫控制信號),DataLock(數(shù)據(jù)鎖存),工作過程是clk一個上升沿到來時,AddrGen產(chǎn)生了讀寫地址AddrW和AddrR,與此同時WRcon模塊WE=0,RE=1 ,產(chǎn)生寫入控制信號,RAM便在AddrW地址單元存儲發(fā)送過來的數(shù)據(jù)DataIn。接著clk下降沿到來,WRcon模塊WE=1

5、,RE=0,產(chǎn)生讀取控制信號,RAM便讀取AddrR地址單元內的數(shù)據(jù), DataLock模塊進行數(shù)據(jù)鎖存。 接著clk又是上升沿到來, 如此循環(huán)。 交織器模塊的代碼:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity InterLeaver is port(clk:in std_logic; DataIn:in std_logic_vector(7 downto 0); DataOut:out std_logic_vector(7 downto 0);end entity;archite

6、cture stru of InterLeaver is component AddrGen is port(clk:in std_logic; AddrR:out integer range 0 to 2047; AddrW:out integer range 0 to 2047 ); end component; component RAM is port(AddrR:in integer range 0 to 2047; AddrW:in integer range 0 to 2047; DataIn:in std_logic_vector(7 downto 0); DataOut:ou

7、t std_logic_vector(7 downto 0); CS,RE,WE:in std_logic); end component; component WRcon is port(clk:in std_logic; WE,RE:out std_logic); end component; component DataLock is port(Data:in std_logic_vector(7 downto 0); DataLock:out std_logic_vector(7 downto 0); RE:in std_logic); end component;signal adr

8、,adw:integer range 0 to 2047;signal we,re:std_logic;signal d:std_logic_vector(7 downto 0);begin u0: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讀寫地址產(chǎn)生的一種辦法就是將讀寫地址映射到ROM 里,另一種辦法就是通過電路計算

9、得到讀寫地址。這里采用后一方法設計交織器/解交織器讀寫地址產(chǎn)生模塊,但其中應用了ROM存儲讀寫地址的思想。交織器讀寫地址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 integer range 0 to 2047; AddrW:out integer range 0 to 2047 );end AddrGen;architecture behav of AddrGen is sig

10、nal count:integer range 0 to 11:=0;beginC:process(clk)variable c:integer range 0 to 11:=0;begin if(rising_edge(clk) then c:=(c+1)mod 12; end if; count AddrW=a0;AddrR b1:=(b1+1)mod 18; if(b1=0) then AddrW=c1; AddrR=a1; else AddrR=a1+b1; AddrW b2:=(b2+1)mod 35; if(b2=0) then AddrW=c2; AddrR=a2; else A

11、ddrR=a2+b2; AddrW b3:=(b3+1)mod 52; if(b3=0) then AddrW=c3; AddrR=a3; else AddrR=a3+b3; AddrW b4:=(b4+1)mod 69; if(b4=0) then AddrW=c4; AddrR=a4; else AddrR=a4+b4; AddrW b5:=(b5+1)mod 86; if(b5=0) then AddrW=c5; AddrR=a5; else AddrR=a5+b5; AddrW b6:=(b6+1)mod 103; if(b6=0) then AddrW=c6; AddrR=a6; e

12、lse AddrR=a6+b6; AddrW b7:=(b7+1)mod 120; if(b7=0) then AddrW=c7; AddrR=a7; else AddrR=a7+b7; AddrW b8:=(b8+1)mod 137; if(b8=0) then AddrW=c8; AddrR=a8; else AddrR=a8+b8; AddrW b9:=(b9+1)mod 154; if(b9=0) then AddrW=c9; AddrR=a9; else AddrR=a9+b9; AddrW b10:=(b10+1)mod 171; if(b10=0) then AddrW=c10;

13、 AddrR=a10; else AddrR=a10+b10; AddrW b11:=(b11+1)mod 188; if(b11=0) then AddrW=c11; AddrR=a11; else AddrR=a11+b11; AddrW=a11+b11-1; end if; end case;end if;end process;end behav;產(chǎn)生讀寫控制信號模塊:有了讀寫地址,還需要有讀寫控制信號。在一個時鐘周期內,令clk=1時,將待發(fā)送數(shù)據(jù)寫入RAM地址為AddrW的單元, clk=0時, 讀取RAM地址為AddrR的單元里的數(shù)據(jù)并發(fā)送。 VHDL代碼:library iee

14、e;use ieee.std_logic_1164.all;entity WRCon is port(clk:in std_logic; WE,RE:out std_logic);end entity;architecture behav of WRcon isbeginprocess(clk) begin if(clkevent and clk=1)then WE=0;RE=1; else WE=1;RE00000000);beginif(CS=0) thenif(RE=0) then DataOut=mem(AddrR);elsif(WE=0) then mem(AddrW):=DataI

15、n;end if;end if;end process;end behav;數(shù)據(jù)鎖存模塊:由于數(shù)據(jù)讀取控制信號RE只占半個時鐘周期,故需要將輸出數(shù)據(jù)進行鎖存,保證輸出信號穩(wěn)定。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 downto 0);RE:in std_logic);end DataLock;archite

16、cture behav of DataLock isbeginprocess(Data,RE)beginif(RE=0) then DataLock=Data;end if;end process;end behav; 解交織器解交織器也又四個模塊組成:DeAddrGen,WRcon,RAM,DataLock。DeAddrGen模塊根據(jù)圖5產(chǎn)生讀寫地址。接著便要驗證從解交織器得到的數(shù)據(jù)是否與發(fā)送數(shù)據(jù)DataIn相同。經(jīng)過分析發(fā)現(xiàn),交織器輸出的第一個數(shù)據(jù)是無效數(shù)據(jù)(RAM還沒有輸出,是DataLock初始輸出信號),故解交織器應該比交織器延遲一個時鐘。解交織器模塊代碼:library ieee;

17、use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DeInterLeaver is port(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 is component DeAddrGen is port(clk:in std_logic; AddrR:out integer

18、 range 0 to 2047; AddrW:out integer range 0 to 2047 ); end component; component RAM is port(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); end component; component WRcon is

19、port(clk:in std_logic; WE,RE:out std_logic); end component; component DataLock is port(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_logic_vector(7 downto 0);

20、begin u0: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 is port(clk:in std_logic; AddrR:out

21、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;begin if(rising_edge(clk) then c:=(c+1)mod 12; end if; count b0:=(b0+1)mod 188; if(b0=0) then Add

22、rW=c0; AddrR=a0; else AddrR=a0+b0; AddrW b1:=(b1+1)mod 171; if(b1=0) then AddrW=c1; AddrR=a1; else AddrR=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; else AddrR=a3+b3; AddrW b4:=(b4+1)mod 120; if(b4=0)

23、then AddrW=c4; AddrR=a4; else AddrR=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; else AddrR=a6+b6; AddrW b7:=(b7+1)mod 69; if(b7=0) then AddrW=c7; AddrR=a7; else AddrR=a7+b7; AddrW b8:=(b8+1)mod 52; if(b8=0) then AddrW=c8; AddrR=a8; else AddrR=a8+b8; AddrW b9:=(b9+1)mod 35; if(b9=0) then AddrW=c9; AddrR=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論