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

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

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

圖3 GXB接收對齊器

圖4 GXB接收對齊器仿真圖

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