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