基于FPGA的高速數(shù)字相關(guān)器設(shè)計
摘要:在數(shù)字通信的數(shù)據(jù)傳輸過程中,需要保持?jǐn)?shù)據(jù)在傳輸過程中的同步,因此要在數(shù)據(jù)傳輸過程中插入幀同步字進(jìn)行檢測,從而有效避免發(fā)送數(shù)據(jù)和接收數(shù)據(jù)在傳輸過程中出現(xiàn)的異步問題。文中提出了一種采用流水線技術(shù)、基于 FPGA設(shè)計高速數(shù)字相關(guān)器的方法。仿真結(jié)果表明設(shè)計方案是可行的。
在數(shù)字通信系統(tǒng)中,常用一個特定的序列作為數(shù)據(jù)開始的標(biāo)志,稱為幀同步字。在數(shù)字傳輸?shù)倪^程中,發(fā)送端要在發(fā)送數(shù)據(jù)之前插入幀同步字。接收機(jī)需要在已解調(diào)的數(shù)據(jù)流中搜尋幀同步字,以確定幀的位置和幀定時信息。幀同步字一般為一系列連續(xù)的碼元,在接收端需要對這一系列連續(xù)的碼元進(jìn)行檢測,如果與預(yù)先確定的幀同步字吻合,則說明接收端與發(fā)送端的數(shù)據(jù)是保持同步的,開始接收,否則不能進(jìn)行接收。完成幀同步字檢測工作的正是數(shù)字相關(guān)器。本文采用流水線技術(shù),研究了基于 FPGA的高速數(shù)字相關(guān)器的設(shè)計方法,并給出了 MAX+PLUSII環(huán)境下的仿真結(jié)果。
1 數(shù)字相關(guān)器原理
數(shù)字相關(guān)器在通信信號處理中實(shí)質(zhì)是起到數(shù)字匹配濾波器的作用,它可對特定碼序列進(jìn)行相關(guān)處理,從而完成信號的解碼,恢復(fù)出傳送的信息。其實(shí)現(xiàn)方法是進(jìn)行兩個數(shù)字信號之間的相關(guān)運(yùn)算,即比較等長度的兩個數(shù)字序列之間有多少位相同,多少位不同。昀基本的相關(guān)器是異或門,例如,y=a⊕b,當(dāng) a=b時,y=0,表示兩位數(shù)據(jù)相同;當(dāng) a≠b時,y=1,表示兩位數(shù)據(jù)不同。多位數(shù)字相關(guān)器可以由一位相關(guān)器級連構(gòu)成。 N位數(shù)字相關(guān)器的運(yùn)算通常可以分解為以下兩個步驟:對應(yīng)位進(jìn)行異或運(yùn)算,得到 N個 1位相關(guān)運(yùn)算結(jié)果;統(tǒng)計 N位相關(guān)運(yùn)算結(jié)果中 0或 1的數(shù)目,得到 N位數(shù)字中相同位和不同位的數(shù)目。
當(dāng)數(shù)字相關(guān)器接收到一組數(shù)據(jù)時,在時鐘的上升沿對幀同步字進(jìn)行檢測。對于幀同步字是一個連續(xù) 16位的碼元,數(shù)字相關(guān)器在進(jìn)行檢測的過程中,只有當(dāng)連續(xù)檢測到 16位的碼元與預(yù)先設(shè)定的幀同步字完全相同時,才由輸出端輸出信號表示幀同步。否則,任何一位出現(xiàn)不相等,數(shù)字相關(guān)器又將重新開始進(jìn)行檢測,直到出現(xiàn)連續(xù)的 16位碼元與預(yù)先設(shè)定的 16位碼元完全相等時才進(jìn)行輸出。數(shù)字相關(guān)器的設(shè)計一般考慮采用串行輸入或并行輸入兩種輸入檢測方式,由于串行輸入是在 16個時鐘周期內(nèi)依次對兩路串行輸入信號 A、B進(jìn)行異或運(yùn)算,并統(tǒng)計數(shù)據(jù)位相同個數(shù),檢測速度較慢,要提高檢測速度,就要考慮采用并行輸入檢測方式。
2 高速數(shù)字相關(guān)器的 FPGA實(shí)現(xiàn)
在 16位并行數(shù)字相關(guān)器中,由于實(shí)現(xiàn) 16位并行相關(guān)器需要的乘積項(xiàng)、或門過多,因此為降低耗用資源,可以分解為 4個 4位相關(guān)器,然后用兩級加法器相加得到全部 16位的相關(guān)結(jié)果,其結(jié)構(gòu)圖如圖 1所示,如果直接實(shí)現(xiàn)該電路,整個運(yùn)算至少要經(jīng)過三級門延時。隨著相關(guān)數(shù)目的增加,速度還將進(jìn)一步降低。為提高速度,采用“流水線技術(shù)”進(jìn)行設(shè)計,模塊中對每一步運(yùn)算結(jié)果都進(jìn)行鎖存,按照時鐘節(jié)拍逐級完成運(yùn)算的全過程。雖然每組輸入值需要經(jīng)過三個節(jié)拍后才能得到運(yùn)算結(jié)果,但是,每個節(jié)拍都有一組新值輸入到第一級運(yùn)算電路,每級運(yùn)算電路上都有一組數(shù)據(jù)同時進(jìn)行運(yùn)算,所以總的來講,每步運(yùn)算花費(fèi)的時間只有一個時鐘周期,從而使系統(tǒng)工作速度基本等于時鐘工作頻率。
在使用 VHDL進(jìn)行高速數(shù)字相關(guān)器設(shè)計時,主要實(shí)現(xiàn) 4位相關(guān)器和多位加法器模塊的設(shè)計。其元件生成圖分別是 4位相關(guān)器模塊 XIANGGUAN4、3位加法器模塊 ADD3和 4位加法器模塊 ADD4,其電路原理圖如圖 2所示。其中 4位相關(guān)器模塊 XIANGGUAN4的主要源代碼為:
entity xiangguan4 is
port(a,b:in std_logic_vector(3 downto 0);
sum:out std_logic_vector(2 downto 0);
clk:in std_logic);
end ;
architecture one of xiangguan4 is
signal ab :std_logic_vector(3 downto 0);
begin
ab<=a xor b; --判斷 a,b是否相同
process(clk)
begin
if clk'event and clk='1' then
if ab="1111" then sum<="000"; --列出各種組合,輸出相應(yīng)相關(guān)值
elsif ab="0111" or ab="1011" or ab="1101" or ab="1110" then sum<="001";
elsif ab="0001" or ab="0010" or ab="0100" or ab="1000" then sum<="011";
elsif ab="0000" then sum<="100";
else sum<="010";
end if;
end if;
end process;
end one;
3 仿真實(shí)驗(yàn)及結(jié)論
在 MAX+PLUSII環(huán)境下,根據(jù)高速數(shù)字相關(guān)器的原理圖進(jìn)行設(shè)計,這里將時鐘端 gck設(shè)計為周期 10ns的時鐘。a[15..0]端為幀同步字設(shè)置端,將其設(shè)置為 1、0交替碼; b[15..0]端為碼元輸入端,輸入連續(xù)的信號,其輸入碼元的周期也為 10ns ;c[4..0]作為記錄信號,記錄連續(xù)的輸入碼元與幀同步字相同的個數(shù)。然后對原理圖進(jìn)行編譯、仿真,得到仿真波形如圖 3所示??梢钥闯?,從連續(xù)的 16個碼元輸入到同步檢測輸出經(jīng)過 3個時鐘周期,輸出端 c[4..0]表示了連續(xù)的輸入碼元 b與幀同步字 a相同的個數(shù),當(dāng) c[4..0]為 16時,表示 a和 b實(shí)現(xiàn)了同步。在對高速數(shù)字相關(guān)器進(jìn)行編譯、仿真成功后,對引腳進(jìn)行鎖定并將編程文件下載到 ALTERA公司 ACE1K系列芯片 EP1K30QC208進(jìn)行實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)結(jié)果正確,表明設(shè)計是可行的。
4 結(jié)束語
數(shù)字相關(guān)器實(shí)現(xiàn)了數(shù)字通信過程中幀同步字的檢測,在數(shù)字通信系統(tǒng)中具有重要的作用,廣泛應(yīng)用于幀同步字檢測、擴(kuò)頻接收機(jī)、誤碼校正以及模式匹配等領(lǐng)域。本文采用 FPGA對高速數(shù)字相關(guān)器進(jìn)行設(shè)計,并進(jìn)行了編譯仿真和下載實(shí)現(xiàn)。