(中國電子科技集團(tuán)公司第三十八研究所,安徽合肥230088)
在高速實(shí)時信號處理系統(tǒng)中,經(jīng)常出現(xiàn)多路數(shù)字信號的傳輸。由于信號傳輸路徑不同,造成信號延遲的差異,因此需要將多路數(shù)據(jù)對齊。高速系列的FPGA都集成了高速串行的I/O收發(fā)器,比如Altera器件的GXB模塊,寬帶信號利用多個通道傳輸后,在接收端通常通過檢測同步字頭的方式進(jìn)行對齊[1];再如多路相關(guān)信號,經(jīng)過不同的傳輸路徑過程后合并處理,也可以通過門限信號進(jìn)行對齊。多路數(shù)據(jù)對齊設(shè)計通常要考慮收發(fā)結(jié)構(gòu)、健壯性、時鐘域統(tǒng)一[2]等問題。
另外,隨著FPGA的應(yīng)用越來越多,設(shè)計的可移植性成為十分重要的問題[3]。應(yīng)用綜合工具提供的參數(shù)化功能,利用硬件語言的參數(shù)化設(shè)計方法,是解決設(shè)計可移植性的有效方法。
針對上述需求,本文介紹一種多路數(shù)據(jù)對齊器的參數(shù)化設(shè)計方法。該方法依據(jù)數(shù)據(jù)特征自動檢測同步標(biāo)志信號,不需要收發(fā)端的同步控制信息,簡化了系統(tǒng)結(jié)構(gòu),而且可以靈活地適應(yīng)各種應(yīng)用;最大限度地減少對齊處理時的數(shù)據(jù)丟失,設(shè)計了異常檢測自動復(fù)位的異常處理,保證了數(shù)據(jù)的連續(xù)性;另外,也可以解決多路數(shù)據(jù)跨時鐘域的問題。
多路數(shù)據(jù)對齊器的設(shè)計是以FPGA為基礎(chǔ),采用參數(shù)化的硬件描述語言設(shè)計,通過延時寄存、同步檢測和狀態(tài)控制等邏輯實(shí)現(xiàn)。目前大容量、高速度的FPGA器件通常都內(nèi)嵌可配置的隨機(jī)存取存儲器(Random Access Memory,RAM),它可以通過指定地址寫入或者讀取數(shù)據(jù)。本設(shè)計中使用雙口RAM作為數(shù)據(jù)存取單元,進(jìn)行對齊操作。首先,將多路數(shù)據(jù)寫入RAM。考慮數(shù)據(jù)輸入跨時鐘域的情況,對每一路數(shù)據(jù)分別產(chǎn)生循環(huán)的寫入地址,同時根據(jù)數(shù)據(jù)特征提取同步標(biāo)志,并將同步標(biāo)志所對應(yīng)的數(shù)據(jù)地址寫入同步地址寄存器。然后,等待全部的多路數(shù)據(jù)都檢測到同步標(biāo)志,并都將同步地址輸入到同步地址寄存器,輸出同步輸出標(biāo)志。最后,根據(jù)同步輸出標(biāo)志,初始化讀地址為同步地址寄存器的同步地址,并設(shè)定為循環(huán)地址。各路的讀地址時鐘域相同,且都是通過相同的同步輸出標(biāo)志使能進(jìn)行初始化,則對應(yīng)的輸入數(shù)據(jù)為同步標(biāo)志所對應(yīng)數(shù)據(jù),輸出同步標(biāo)志對齊,進(jìn)而輸出數(shù)據(jù)對齊,這也解決了各路數(shù)據(jù)時鐘域統(tǒng)一的問題。
當(dāng)在數(shù)據(jù)中多次插入同步標(biāo)志時,前一次已經(jīng)完成數(shù)據(jù)對齊,如果兩次同步標(biāo)志之間數(shù)據(jù)穩(wěn)定,各路數(shù)據(jù)長度一致,下一次的數(shù)據(jù)對齊操作沒有數(shù)據(jù)丟失;如果各路數(shù)據(jù)長度不一致,則用同步標(biāo)志對應(yīng)數(shù)據(jù)進(jìn)行補(bǔ)齊,即都能保證數(shù)據(jù)的連續(xù)性。如果由于數(shù)據(jù)異常導(dǎo)致某一路檢測不到同步標(biāo)志,則不輸出同步輸出標(biāo)志,依據(jù)上一次的數(shù)據(jù)對齊結(jié)果輸出。
針對多路數(shù)據(jù)(N路)輸入時,第M路數(shù)據(jù)的RAM讀寫時序關(guān)系如圖1所示,其中黑色圖框表示該路的同步地址。同步輸出標(biāo)志是各路公用的,當(dāng)置高時所有路初始化讀地址為該路的同步地址寄存器的同步地址。

圖1 對齊器RAM讀寫時序關(guān)系
電路結(jié)構(gòu)框圖如圖2所示,主要邏輯由同步標(biāo)志提取電路、檢測狀態(tài)控制電路、讀寫地址產(chǎn)生電路三個部分組成,并使用了一個雙口RAM組,一個同步地址寄存器組,深度為數(shù)據(jù)的通道數(shù)量。其中同步標(biāo)志提取電路是針對不用的應(yīng)用而專門設(shè)計的,其他電路模塊為通用的。
運(yùn)用硬件描述語言VHDL構(gòu)建底層電路,將需要變動的參量以參數(shù)表示,并傳遞到設(shè)計的頂層文件[4]。含有變化參量的子模塊以generic語句加入?yún)?shù);需多次例化的元件以generate語句實(shí)現(xiàn),例化次數(shù)不定時,將例化次數(shù)以參數(shù)表示。

圖2 電路原理框圖
本文設(shè)計中的變化參量為兩類:一是和數(shù)據(jù)緩存相關(guān)的參數(shù),為RAM的數(shù)據(jù)寬帶和存取單元數(shù)目,后者通常通過估計多路信號延遲的最大差異來估計;二是和同步標(biāo)志提取相關(guān)的參數(shù),結(jié)合具體應(yīng)用設(shè)置。
(1)同步標(biāo)志提取電路
依據(jù)數(shù)據(jù)特征,輸出各路的同步標(biāo)志。考慮到對齊器的通用性,針對具體的應(yīng)用設(shè)計同步標(biāo)志提取電路,即只需替換同步標(biāo)志提取電路就可以適應(yīng)不同的應(yīng)用。本文第3節(jié),列舉了兩種應(yīng)用,分別設(shè)計了同步標(biāo)志提取電路,第一是使用Altera器件的GXB模塊多個通道傳輸后,在接收端通過檢測同步字頭的方式進(jìn)行對齊;第二是多路相關(guān)信號經(jīng)過不同的傳輸路徑后合并處理,通過過門限信號進(jìn)行對齊。
(2)檢測狀態(tài)控制電路
檢測各路的同步標(biāo)志狀態(tài),并輸出同步輸出標(biāo)志。使用記錄類型(RECORD)定義同步標(biāo)志的檢測狀態(tài),如下所示。
┈類型定義┈
type type_synflag_dect is record
synflag_dect:
std_logic_vector(ch_num-1 downto 0);
synflag_dect_all:std_logic;
synflag_dect_rst:std_logic;
end record;
┈例化┈
signal synflag_dect:type_synflag_dect:=((others=>′0′),′0′,′0′);
說明:
a)ch_num:輸入?yún)?shù),通道數(shù)量,要求大于1。
b)synflag_dect:邏輯矢量,位寬為通道數(shù)量,表示各路同步標(biāo)志的檢測狀態(tài)。某一路檢測到同步標(biāo)志的時候?qū)⑵鋵?yīng)位置高,當(dāng)synflag_dect_rst上升沿復(fù)位。
c)synflag_dect_all:邏輯位,當(dāng)檢測到所有通道的同步標(biāo)志時置高,否則置低。該信號可以作為同步輸出標(biāo)志。由于參數(shù)化通道數(shù)量,電路實(shí)現(xiàn)時可以取NOT synflag_dect進(jìn)行判斷,當(dāng)邏輯矢量NOT synflag_dect為0時置高,反之置低。
d)synflag_dect_rst:邏輯位,復(fù)位synflag_dect信號。設(shè)置中間變量計數(shù)器synflag_dect_cnt,當(dāng)synflag_dect非0時計數(shù),為0時復(fù)位。當(dāng)synflag_dect_cnt大于RAM深度或者synflag_dect_all為高時置高,否則置低。前者表示在指定的誤差限度內(nèi)(多路信號延遲的最大差異)沒有完成對齊,即同步標(biāo)志檢測出現(xiàn)異常狀態(tài);后者表示完成對齊。
以synflag_dect_all信號上升沿作為同步輸出標(biāo)志。上述邏輯都是通過時序邏輯控制。
(3)讀寫地址產(chǎn)生電路。
考慮數(shù)據(jù)輸入跨時鐘域的情況,使用生成語句(generate)對每一路數(shù)據(jù)分別產(chǎn)生循環(huán)的寫地址,并將各路同步標(biāo)志所對應(yīng)的數(shù)據(jù)地址寫入同步地址寄存器。根據(jù)同步輸出標(biāo)志,在同一個時鐘域下初始化讀地址為同步地址寄存器的同步地址,并設(shè)定為循環(huán)地址。各路對應(yīng)RAM在該讀地址下的輸出為數(shù)據(jù)輸出。
在寬帶數(shù)字信號處理中,對器件的帶寬和采樣率都有較高的指標(biāo)要求,在數(shù)據(jù)傳送中多基于高速串行傳輸技術(shù)(SERDES)采用多路光纖傳輸[5]。
本文配合Stratix IV器件GXB接收器設(shè)計對齊器模塊。使能8B/10B編碼,設(shè)置控制碼K28.5(0x BC),同時在發(fā)送端各路數(shù)據(jù)添加同步碼(0x1CBC)。采用四路傳輸進(jìn)行例化和仿真測試。如圖3所示為例化的頂層圖形化模塊、參數(shù)列表、端口列表,參數(shù)列表虛線框中內(nèi)容表示和同步標(biāo)志提取電路相關(guān)的參數(shù),ctrl_width表示和GXB核rx_ctrldetect相關(guān)參數(shù),channel_numbers表示通道數(shù)量,ctr_word表示同步碼。當(dāng)某一路數(shù)據(jù)檢測到rx_ctrldetect為高且數(shù)據(jù)輸入為同步碼時,輸出同步標(biāo)志。
如圖4所示為該模塊仿真波形圖。可以看到對齊后的輸出,同時顯示連續(xù)的對齊操作下數(shù)據(jù)沒有丟失。該模塊已經(jīng)使用器件完成了時序仿真、編程下載,以及在線測試。
多路相關(guān)的雷達(dá)脈沖信號(IQ),經(jīng)過不同的傳輸路徑過程后合并處理,處理前需要檢測過門限信號進(jìn)行對齊。獲取各路輸入信號的過門限信號,利用過門限信號上升沿作為同步標(biāo)志進(jìn)行對齊。如圖5所示,對兩路信號進(jìn)行對齊操作,圖5顯示對齊前后各路信號的I路信號和過門限信號。

圖3 GXB接收對齊器

圖4 GXB接收對齊器仿真圖

圖5 多路相關(guān)脈沖對齊
本文設(shè)計的多路數(shù)據(jù)對齊器,使用參數(shù)化硬件語言設(shè)計,采用結(jié)構(gòu)化設(shè)計思想,分離同步提取電路,以適應(yīng)不同的應(yīng)用,集成度高、可移植性強(qiáng),同時兼顧了數(shù)據(jù)連續(xù)性、數(shù)據(jù)異常、跨時鐘域等問題。本設(shè)計在工程實(shí)踐中具有一定的參考和實(shí)用價值。
[1]魏書軍,劉振安,趙棣新,等.FPGA多通道數(shù)據(jù)自動對齊的設(shè)計與實(shí)現(xiàn)[J].核電子學(xué)與探測技術(shù),2010,30(3):410-412.
[2]唐輝艷,李紹勝.FPGA設(shè)計中跨時鐘域同步方法的研究[J].鐵路計算機(jī)應(yīng)用,2011,20(5):43-44,47.
[3]孫延騰,吳艷霞,顧國昌.基于VHDL語言的參數(shù)化設(shè)計方法[J].計算機(jī)工程與應(yīng)用,2010,46(31):68-71.
[4]張鵬南,孫宇,夏洪洋.基于Quartus II的VHDL數(shù)字系統(tǒng)設(shè)計入門與應(yīng)用實(shí)例[M].北京:電子工業(yè)出版社,2012:78-96.
[5]向海生,馬利祥,王冰.基于拼接采樣技術(shù)的寬帶數(shù)字接收機(jī)[J].雷達(dá)科學(xué)與技術(shù),2014,12(4):450-453.