Cyclone V FPGA在高帶寬存儲(chǔ)接口中的應(yīng)用
摘要:文中詳細(xì)地分析了Altera公司Cyclone V FPGA器件的硬核存儲(chǔ)控制器底層架構(gòu)和外部接口,并在此基礎(chǔ)上對(duì)Controller和PHY進(jìn)行了功能仿真。仿真結(jié)果表明硬核存儲(chǔ)控制器和PHY配合工作時(shí)的功能與設(shè)計(jì)預(yù)期相符,性能優(yōu)良,適合于在當(dāng)前FPGA的外部存儲(chǔ)帶寬需求日益增長(zhǎng)的場(chǎng)合下應(yīng)用。
如今,越來(lái)越多的應(yīng)用場(chǎng)景都需要FPGA能夠和外部存儲(chǔ)器之間建立數(shù)據(jù)傳輸通道,如視頻、圖像處理等領(lǐng)域,并且對(duì)數(shù)據(jù)傳輸通道的帶寬也提出了較大的需求,這就導(dǎo)致了FPGA和外部Memory接口的實(shí)際有效帶寬成為了制約系統(tǒng)性能的瓶頸,所以Memoiy控制器的效能,則成為提升系統(tǒng)性能的關(guān)鍵要素。Altera最新一代28nm器件中的Cyclone V和Arria V系列FPGA都集成了硬核存儲(chǔ)控制器HMC(Hard Memory Controll er)單元,相比于以往的軟核解決方案,硬核解決方案能夠在幫助降低系統(tǒng)功耗的同時(shí)顯著提升接口工作性能,適合應(yīng)用于對(duì)Memory接口帶寬有較大需求的場(chǎng)合。
1 存儲(chǔ)器接口的底層架構(gòu)
QuartusII 11.0及以后版本提供的Controller控制器均為High Performance ControllerII(HPC II),相對(duì)于早期提供的HPC,有了部分功能和性能上的升級(jí)和改進(jìn)。CycloneII/IV使用的是ALTMEMPHY,而Cyclone V可以使用新的UniPHY架構(gòu)。存儲(chǔ)器接口的底層架構(gòu)和外部接口如圖1所示。
從圖1可見,整個(gè)存儲(chǔ)接口是由三部分組成的,Controller單元、PHY單元及一些相關(guān)接口。其中主要的便是Controller單元、PHY單元。Controller單元主要負(fù)責(zé)控制初始化、刷新等Memory的命令操作,還能夠完成訪問(wèn)地址和數(shù)據(jù)的組織排序,支持大帶寬、較高的工作頻率。另外,Controller單元還支持?jǐn)?shù)據(jù)重排,能夠降低訪問(wèn)沖突,增加系統(tǒng)工作的效率。PHY單元工作在Controller單元和外部Memory之間,主要負(fù)責(zé)完成物理層的數(shù)據(jù)路徑及數(shù)據(jù)路徑的時(shí)序處理。
Controller單元和PHY單元之間是通過(guò)Altera PHYInterface,即AFI接口進(jìn)行連接的。與標(biāo)準(zhǔn)的DDR PHYInterface,即DFI接口相比,AFI接口更加適合基于ALTMEMPHY和UniPHY的開發(fā)。AFI接口可以被認(rèn)為是DFI接口的子集,是對(duì)DFI接口進(jìn)行了少量的簡(jiǎn)化和修改而來(lái)的。
2 MPFE的功能及底層架構(gòu)
在視頻和圖像處理領(lǐng)域,F(xiàn)PCA需要頻繁地訪問(wèn)Memory接口,完成數(shù)據(jù)的寫入和瀆出操作。Cyclone V的HMC能夠支持多端口前端的并行訪問(wèn),極大地方便了讀寫數(shù)據(jù)交互的操作。多端口前端,即MPFE(Multi-port Front End),底層架構(gòu)如圖2所示。
MPFE可以使得FPGA的多個(gè)處理進(jìn)程共享一個(gè)Memory的命令隊(duì)列。這樣不同的端口都可以訪問(wèn)Memory接口,完成對(duì)Memory的讀寫操作。MP FE都是基于Avalon總線的時(shí)序進(jìn)行地址、命令和數(shù)據(jù)的交互的。在實(shí)際有效帶寬一定的情況下,MPFE可以將帶寬按照不同的需求分配到相應(yīng)的端口。
如圖2所示,MPFE是由6個(gè)命令FIFO,4個(gè)64bit位寬的讀FIFO和4個(gè)64bit位寬的寫FIFO組成,通過(guò)這些FIFO來(lái)完成命令和數(shù)據(jù)的交互。其中,讀FIFO可以被配置為單向的讀FIFO,寫FIFO可以被配置為單向的寫FIFO,也可以在一個(gè)Port里使用雙向FIFO、此時(shí)該P(yáng)ort會(huì)調(diào)用1個(gè)讀FIFO和1個(gè)寫FIFO來(lái)完成。
如果前端的數(shù)據(jù)位寬比較大,也可以將FIFO拼接起來(lái),組合為128bit或256bit位寬的FIFO,128bit位寬情況下,會(huì)調(diào)用2個(gè)讀或?qū)慒IFO 256bit位寬情況下,會(huì)調(diào)用4個(gè)讀或?qū)慒IFO。如果一個(gè)Port設(shè)置為256bit位寬,同時(shí)設(shè)置為雙向FIFO.則該P(yáng)ort會(huì)消耗全部的讀寫FIFO,此時(shí)也就相當(dāng)于將多端口前端作為單端口前端來(lái)使用了。
如果前端的數(shù)據(jù)位寬比較小,也可以將64bit位寬的FIFO設(shè)置為32bit位寬,此時(shí)仍會(huì)占用1個(gè)FIFO,高32bit的數(shù)據(jù)位寬則會(huì)閑置。
由此可見,MPFE在使用上十分靈活,能夠適應(yīng)不同的應(yīng)用方式,滿足FPGA內(nèi)部不同邏輯模塊對(duì)Memory的讀寫訪問(wèn)。
3 多端口前端的調(diào)度策略
MPFE本身相當(dāng)于一個(gè)調(diào)度器,采用分時(shí)復(fù)用的方式,對(duì)來(lái)自不同端口的數(shù)據(jù)和命令進(jìn)行調(diào)度。若干個(gè)端口之間的調(diào)度遵循兩個(gè)條件,即端口的優(yōu)先級(jí)(Priority)和權(quán)重(Weight)。優(yōu)先級(jí)參數(shù)和權(quán)重參數(shù)是可以指定的,如圖3所示,在IP例化時(shí)的Controller Settings界面中,手動(dòng)填寫端口的這兩個(gè)參數(shù)值。
優(yōu)先級(jí)參數(shù)可以在1~7之間任意指定,優(yōu)先級(jí)參數(shù)值越大,代表該端口的優(yōu)先級(jí)越高。高優(yōu)先級(jí)的端口相對(duì)于低優(yōu)先級(jí)的端口會(huì)被優(yōu)先調(diào)度。優(yōu)先級(jí)是一個(gè)絕對(duì)的參數(shù),如果一個(gè)端口的優(yōu)先級(jí)設(shè)置為7,則這個(gè)端口享有最高優(yōu)先級(jí),它在任何情況下都會(huì)被優(yōu)先調(diào)度,這樣另外的優(yōu)先級(jí)為6或更低優(yōu)先級(jí)的端口必須等待優(yōu)先級(jí)為7的端口工作完成之后才會(huì)被調(diào)度。
如果兩個(gè)端門的優(yōu)先級(jí)一樣,那么相對(duì)的優(yōu)先級(jí)會(huì)取決于端口的權(quán)重參數(shù)。權(quán)重參數(shù)可以在0~31之間設(shè)置。為了避免高優(yōu)先級(jí)的某個(gè)端口長(zhǎng)時(shí)間占用接口總線的帶寬,引入了加權(quán)循環(huán)調(diào)度算法(Weighted Round Robin,WRR),WRR算法仍然會(huì)優(yōu)先處理高優(yōu)先級(jí)的端口,但是低優(yōu)先級(jí)的端口也不會(huì)出現(xiàn)不被調(diào)度的情況。WRR是根據(jù)端口權(quán)重與所有排隊(duì)等待調(diào)度的端口的權(quán)重總和的比來(lái)平等地分配帶寬。因此,在處理多個(gè)端口的高優(yōu)先等級(jí)的業(yè)務(wù)時(shí),可以確保每個(gè)端口都不會(huì)過(guò)度地占用接口的總線帶寬。
在端口的優(yōu)先級(jí)參數(shù)都一樣的情況下,權(quán)重參數(shù)能夠決定端口間相對(duì)的帶寬分配,如圖3所示,端口0和端口1的優(yōu)先級(jí)均為1,權(quán)重參數(shù)值分別為4和6,則端口0和端口1分別會(huì)占用大致40%和60%的Memory接口總帶寬。
4 HMC的ModelSim功能仿真
仿真過(guò)程不僅能夠觀察到HMC內(nèi)部工作的時(shí)序,還能夠大致測(cè)箅出HMC工作時(shí)的有效帶寬。在系統(tǒng)設(shè)計(jì)開始階段,可以用于評(píng)估Memory接口實(shí)際有效帶寬是否滿足設(shè)計(jì)需求。如圖4和圖5所示。
系統(tǒng)設(shè)計(jì)的過(guò)程需要確保Avalon側(cè)和Memory側(cè)的帶寬相等,所以在IP例化參數(shù)選擇時(shí),根據(jù)DDR3器件參數(shù),DQ數(shù)據(jù)線選擇的是16 bits位寬,mem_ck為400 MHz;Avalon側(cè)的數(shù)據(jù)位寬為64 bits,時(shí)鐘選擇200 MHz即可。兩側(cè)帶寬為16 bitsx400 Mhzx2(DDR雙沿傳輸)=64 bitsx200 MHz=12.8 Gbps,這也是HMC的理論帶寬。
5 結(jié)論
在一些視頻、圖像等高帶寬按口應(yīng)用中,Cyclone V器件的HMC理論上能夠達(dá)到至少12.8Gbps的帶寬,如果DQ位寬變?yōu)?2位,則理論帶寬翻倍到25.6Gbps,這也是一個(gè)HMC所能達(dá)到的理論帶寬的上限。部分Cyclone V器件帶有2個(gè)HMC,則整體的理論帶寬上限值為51.2Gbps,已能夠滿足高帶寬存儲(chǔ)場(chǎng)合對(duì)FPGA和DDR3間接口帶寬的要求。