任智新, 王江為, 闞宏偉, 趙坤
(1.浪潮電子信息產(chǎn)業(yè)股份有限公司, 山東 濟南 2500132;2.廣東浪潮大數(shù)據(jù)研究有限公司, 廣東 廣州 510627)
近幾年,隨著現(xiàn)場可編程門陣列(FPGA,F(xiàn)iled Programmable Gate Array)自身功能的不斷完善以及多核CPU性能的提升遇到摩爾定律瓶頸,使FPGA受到越來越多人的青睞。尤其在高速數(shù)據(jù)互連、并行計算處理以及計算機異構(gòu)加速系統(tǒng)中FPGA都有著出色的表現(xiàn)。這也得益于各個FPGA廠商提供了集成度高的IP核以及豐富易操作的軟硬件開發(fā)工具,開發(fā)人員不必過多關(guān)注FPGA底層設(shè)計開發(fā),就可以快速地搭建系統(tǒng)工程,滿足應(yīng)用的需求。高度集成以及功能豐富且可靈活配置的各類IP核,省去了工程師大部分的工作,可以將更多的精力放在系統(tǒng)架構(gòu)以及性能提升上,尤其是對于接口的設(shè)計上。不論是以太網(wǎng)接口、PCIe接口、DDR接口還是通用的其他高速接口,F(xiàn)PGA廠商均提供了可直接調(diào)用的IP,但在對傳輸延時敏感的應(yīng)用場合下,這樣做會使系統(tǒng)主頻受FPGA內(nèi)部資源利用率、布局布線以及IP本身延時等因素影響,難以滿足設(shè)計要求,或出現(xiàn)時序無法收斂等問題[1-3]。
FPGA原語(Primitive)作為芯片最基本的組件,在實際應(yīng)用中可以協(xié)助解決上述問題,實現(xiàn)上述特殊場合下無法使用高度集成IP的功能。原語是各個器件廠家針對不同F(xiàn)PGA器件特征開發(fā)的一系列常用模塊,是最小單元,相當于軟件中的機器語言,在設(shè)計中可直接例化使用,不過不同廠家不同系列器件的原語也會因硬件本身的特點而不同,但是基本的類型和使用方法類似,在具體使用時根據(jù)手冊進行調(diào)用即可,使用亦非常方便和快捷。另外,原語資源不占用FPGA的可編程邏輯資源,在大規(guī)模的設(shè)計中,可充分利用FPGA邏輯資源,完成更加復雜的功能,發(fā)揮出FPGA在并行計算上的優(yōu)勢,激發(fā)出最高的能效比。
本文以Xilinx公司的器件原語展開論述和分析,對原語在高速接口中的應(yīng)用進行詳細闡述,并描述了FPGA原語在DDR SDRAM鏡像功能中的應(yīng)用實例和效果。
Xilinx FPGA原語根據(jù)實現(xiàn)的功能大概分為10類:包括時鐘組件、I/O組件、寄存器/鎖存器、處理器組件、計算組件、移位寄存器、配置和檢測組件、RAM/ROM組件、Slice/CLB組件以及G-tranceiver,不同型號器件包含的組件類別不完全相同,但基本都包含在這10大類中。本文在對I/O組件的功能和應(yīng)用進行了分析,提出延時可變以及低延時適用于高速數(shù)據(jù)傳輸?shù)慕涌凇?/p>
常見的Xilinx廠家的器件I/O組件由于產(chǎn)品型號的不同而有所差異,但基本功能有很大的相似性,常見的組件包括IOBUF/IDDR/IDELAY/ISERDES/ODDR/OSERDES等20幾個I/O組件,可利用這些組件根據(jù)需求搭建成不同功能模塊,尤其在高速接口PHY的使用中十分靈活[4]。
本文以幾個典型的原語組件,詳細描述一種低延時且可動態(tài)修改傳輸延時的接口PHY實現(xiàn)方法,其實現(xiàn)框圖如圖1所示。
圖1 PHY接口實現(xiàn)框圖
基于原語實現(xiàn)的PHY接口結(jié)構(gòu)框圖1的各原語的功能如下:
(1) IOBUF組件:輸入/輸出緩沖器,有單端及雙端信號兩種。根據(jù)實際信號傳輸?shù)姆较蜻x擇,可做輸入、輸出以及雙向信號,通過改變該組件的方向控制信號oe,來改變該組件的輸入輸出方向,是搭建PHY必備的組件,是芯片管腳與內(nèi)部信號之間的接口,幾乎無輸入輸出延時,僅有硬件實現(xiàn)時的走線延時,該模塊的調(diào)用代碼如下:
IOBUF #(
.IBUF_LOW_PWR (IBUF_LOW_PWR))
u_iobuf_d0(
.I (d0_in), //方向為輸出時,輸入到該模塊的數(shù)據(jù)
.T (d0_oe),//方向控制信號
.IO (d0_inout),//輸入輸出接口,對應(yīng)pad管腳
.O (dq_out)//方向為輸入時,外部信號經(jīng)過該模塊后的數(shù)據(jù));
(2) IODELAY:可編程的延遲單元。每個PHY接口包含一個該組件,延時時間最大有64個tap的環(huán)繞單元,每個tap值與接口的工作頻率有關(guān),比如V6的芯片,工作頻率是200 MHz,tap=78 ps,所以總的最大延時時間為78×64=4 992 ps,主要用來調(diào)整因硬件走線延時的不同而帶來的時序問題,通過改變tap值,保證每組信號線走線延時的一致性,該模塊調(diào)用的代碼如下:
(* IODELAY_GROUP = IODELAY_GRP *) IODELAYE1 #
(.CINVCTRL_SEL ("FALSE"),
//其他參數(shù)配置略)
u_iodelay_dq (
.DATAOUT (dq_iodelay),
.C (clk),
.CE (1'b0),
.DATAIN (1'b0),
.IDATAIN (dq_in),
.INC (1'b0),
.ODATAIN (dq_oq),
.RST (1'b1),
.T (ocb_tfb),
.CNTVALUEIN (dlyval),
.CNTVALUEOUT (dq_tap_cnt),
.CLKIN (),
.CINVCTRL (1'b0));
模塊時序圖如圖2所示。
圖2 Idelay模塊時序圖
(3) ISERDESE:輸入串并轉(zhuǎn)換器。ISERDESE可以實現(xiàn)高速數(shù)據(jù)傳輸,完全不需要FPGA內(nèi)部邏輯與輸入數(shù)據(jù)頻率匹配,此轉(zhuǎn)換器支持SDR、DDR兩種模式,即可以實現(xiàn)兩種不同速度的數(shù)據(jù)接口轉(zhuǎn)換,接口與內(nèi)部邏輯時鐘速率比支持2∶1、3∶1、4∶1和5∶1,用戶可根據(jù)系統(tǒng)工作頻率及外部接口頻率靈活選擇。例如,當接口信號工作頻率為400 MHz,而FPGA邏輯內(nèi)部工作頻率為200 MHz時,為了能不跨時鐘操作,保證時序以及數(shù)據(jù)采集的正確性,需要設(shè)置ISERDESE為2∶1模式,即在內(nèi)部時鐘頻率的上下沿均采集接口數(shù)據(jù),相當于一個時鐘周期可采集外部接口的兩個數(shù)據(jù),達到變頻的目的。
(4) OSERDESE:輸出串并轉(zhuǎn)換器。與ISERDESE功能相同,只是方向相反,串并轉(zhuǎn)換和并串轉(zhuǎn)換的工作過程。如圖3所示。
輸入數(shù)據(jù)轉(zhuǎn)換流程如下所述:外部信號通過管腳后,經(jīng)過IOBUF的輸入通路進行無延時緩存;接著進入可動態(tài)調(diào)整輸入延時的IODELAY輸入通道,該模塊延時的時間有限,具體參考上文;之后進入ISERDESE串行轉(zhuǎn)換模塊,該模塊有個特點,當輸入的接口時鐘與分頻時鐘相位相同時,輸入延時為3個接口時鐘時間,而當兩個時鐘相位相差180°時,輸入延時為2個接口時鐘時間,所以通過動態(tài)修改分頻時鐘,改變輸入總的延時,但此延時只能變化一個周期;最后數(shù)據(jù)進入用戶邏輯,進行數(shù)據(jù)解析等其他操作。輸出數(shù)據(jù)轉(zhuǎn)換流程是輸入的反過程,過程完全一致。
圖3 輸入輸出1∶6 serdes數(shù)據(jù)轉(zhuǎn)換
轉(zhuǎn)換DDR(Double Data Rate,雙倍速率)數(shù)據(jù)、接口與內(nèi)部邏輯工作頻率比為2∶1情況的仿真示意圖,如圖4(1)、圖4(2)所示。
圖4(1) 輸出延時仿真結(jié)果1
圖4(2) 輸出延時仿真結(jié)果2
其中圖4(1)是兩時鐘同相時,數(shù)據(jù)輸出延時為2個CK周期;圖4(2)是當內(nèi)部邏輯分頻時鐘取反后送入模塊中,數(shù)據(jù)輸出延時為3個CK周期。
對于I/OSERDESE這一特性在需要輸入/輸出通路延時可變化一個周期時,使用該方法可以大大簡化接口邏輯,提高工作效率。
FPGA作為內(nèi)存控制器在加速卡及內(nèi)存容錯技術(shù)中都有廣泛的應(yīng)用,在常規(guī)方案中,使用FPGA內(nèi)IP核[5]來處理DDR接口數(shù)據(jù)的延時過大,無法滿足接口低延時應(yīng)用場合下DDR的讀寫時序要求。根據(jù)上文對原語的分析,將I/O組件的原語,以合理的方式進行“搭積木”后,可以實現(xiàn)低延時的DDR接口處理模塊,從而滿足系統(tǒng)功能的需求。
通常情況下,對于高速信號接口數(shù)據(jù)的處理,工程師們會首先選擇FPGA內(nèi)高度集成的IP核,比如Altera廠家A10器件中高速數(shù)據(jù)處理接口phylite(Altera PHYLite for Parallel Interfaces IP core),其主要特性:支持1/4速率到1/2速率以及1/2速率到全速率的轉(zhuǎn)換I/O、支持單數(shù)據(jù)速率(SDR)和雙數(shù)據(jù)速率(DDR) 、支持基于DQS組的數(shù)據(jù)采集,非常適合處理內(nèi)存DDR數(shù)據(jù),但對該IP進行仿真后發(fā)現(xiàn),延時高達9個時鐘周期,其仿真結(jié)果如圖5所示。
圖5 phyLite1/2速率輸入接口庫仿真圖
而Xilinx的HSSIO(High Speed SelectIO )的輸入輸出延時也多達7個時鐘周期。顯然,用原語搭建的PHY延時最小,3種功能模塊對比結(jié)果如表1所示。
表1 接口延時對比
延時的單位為接口周期數(shù)。
為了滿足DDR讀寫延時要求并且使FPGA的時序能很好的收斂,使用第1章描述的方式搭建的低延時高速接口來實現(xiàn)基于FPGA的內(nèi)存鏡像功能。邏輯內(nèi)部的工作頻率可以根據(jù)接口頻率靈活調(diào)整,對應(yīng)的PHY接口在輸入/輸出分別采用不同的雙沿處理原語:I(O)DDR和I(O)Serdes即可。利用該原語架構(gòu)的邏輯已經(jīng)在硬件平臺中得以驗證,將基于Virtex6實現(xiàn)的內(nèi)存鏡像卡掛在主板后,CPU可以正常訪問內(nèi)存,且可實現(xiàn)鏡像功能?;谠Z實現(xiàn)的DDR高速接口數(shù)據(jù)輸入輸出示意圖,如圖6所示。
圖6 原語在DDR內(nèi)存鏡像中的應(yīng)用
通過上述對使用原語I/O組件搭建的PHY接口的分析,不同的原語在不同的輸入源激勵下會有不同的表現(xiàn),在經(jīng)過充分的論證和仿真驗證后有一些特殊的功能。使得原語在實現(xiàn)復雜FPGA邏輯中有很好的應(yīng)用,可方便、靈活地搭建實現(xiàn)各種功能模塊。對于需要延時小、時序緊張的應(yīng)用中有著比集成IP核更好的效果。本文提出的原語PHY接口可根據(jù)實際接口的頻率以及系統(tǒng)功能的需求進行靈活修改,而且可以實現(xiàn)小范圍內(nèi)延時動態(tài)調(diào)整。并且該方式在基于FPGA的內(nèi)存鏡像卡中有著很好的表現(xiàn),完成了高速IP無法實現(xiàn)的功能。在對數(shù)據(jù)傳輸延時低的場合下有很好的應(yīng)用,不過基于原語實現(xiàn) 的PHY功能相對簡單,若想達到集成IP支持的功能和特性,還需要進行更多的仿真和驗證。