<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于FPGA的高帶寬存儲接口設計

          基于FPGA的高帶寬存儲接口設計

          作者: 時間:2014-07-21 來源:網(wǎng)絡 收藏

            摘要:文中詳細地分析了公司 器件的硬核存儲控制器底層架構和外部接口,并在此基礎上對Controller和PHY進行了功能仿真。仿真結果表明硬核存儲控制器和PHY配合工作時的功能與設計預期相符,性能優(yōu)良,適合于在當前的外部存儲帶寬需求日益增長的場合下應用。

          本文引用地址:http://www.ex-cimer.com/article/255834.htm

            如今,越來越多的應用場景都需要能夠和外部存儲器之間建立數(shù)據(jù)傳輸通道,如視頻、圖像處理等領域,并且對數(shù)據(jù)傳輸通道的帶寬也提出了較大的需求,這就導致了FPGA和外部Memory接口的實際有效帶寬成為了制約系統(tǒng)性能的瓶頸,所以Memoiy控制器的效能,則成為提升系統(tǒng)性能的關鍵要素。最新一代28nm器件中的和Arria V系列FPGA都集成了硬核存儲控制器HMC(Hard Memory Controll er)單元,相比于以往的軟核解決方案,硬核解決方案能夠在幫助降低系統(tǒng)功耗的同時顯著提升接口工作性能,適合應用于對Memory接口帶寬有較大需求的場合。

            1 存儲器接口的底層架構

            QuartusII 11.0及以后版本提供的Controller控制器均為High Performance ControllerII(HPC II),相對于早期提供的HPC,有了部分功能和性能上的升級和改進。CycloneII/IV使用的是ALTMEMPHY,而可以使用新的UniPHY架構。存儲器接口的底層架構和外部接口如圖1所示。

            

           

            從圖1可見,整個存儲接口是由三部分組成的,Controller單元、PHY單元及一些相關接口。其中主要的便是Controller單元、PHY單元。Controller單元主要負責控制初始化、刷新等Memory的命令操作,還能夠完成訪問地址和數(shù)據(jù)的組織排序,支持大帶寬、較高的工作頻率。另外,Controller單元還支持數(shù)據(jù)重排,能夠降低訪問沖突,增加系統(tǒng)工作的效率。PHY單元工作在Controller單元和外部Memory之間,主要負責完成物理層的數(shù)據(jù)路徑及數(shù)據(jù)路徑的時序處理。

            Controller單元和PHY單元之間是通過 PHYInterface,即AFI接口進行連接的。與標準的DDR PHYInterface,即DFI接口相比,AFI接口更加適合基于ALTMEMPHY和UniPHY的開發(fā)。AFI接口可以被認為是DFI接口的子集,是對DFI接口進行了少量的簡化和修改而來的。

            2 MPFE的功能及底層架構

            在視頻和圖像處理領域,F(xiàn)PCA需要頻繁地訪問Memory接口,完成數(shù)據(jù)的寫入和瀆出操作。Cyclone V的HMC能夠支持多端口前端的并行訪問,極大地方便了讀寫數(shù)據(jù)交互的操作。多端口前端,即MPFE(Multi-port Front End),底層架構如圖2所示。

            

           

            MPFE可以使得FPGA的多個處理進程共享一個Memory的命令隊列。這樣不同的端口都可以訪問Memory接口,完成對Memory的讀寫操作。MP FE都是基于Avalon總線的時序進行地址、命令和數(shù)據(jù)的交互的。在實際有效帶寬一定的情況下,MPFE可以將帶寬按照不同的需求分配到相應的端口。

            如圖2所示,MPFE是由6個命令FIFO,4個64bit位寬的讀FIFO和4個64bit位寬的寫FIFO組成,通過這些FIFO來完成命令和數(shù)據(jù)的交互。其中,讀FIFO可以被配置為單向的讀FIFO,寫FIFO可以被配置為單向的寫FIFO,也可以在一個Port里使用雙向FIFO、此時該Port會調(diào)用1個讀FIFO和1個寫FIFO來完成。

            如果前端的數(shù)據(jù)位寬比較大,也可以將FIFO拼接起來,組合為128bit或256bit位寬的FIFO,128bit位寬情況下,會調(diào)用2個讀或寫FIFO 256bit位寬情況下,會調(diào)用4個讀或寫FIFO。如果一個Port設置為256bit位寬,同時設置為雙向FIFO.則該Port會消耗全部的讀寫FIFO,此時也就相當于將多端口前端作為單端口前端來使用了。

            如果前端的數(shù)據(jù)位寬比較小,也可以將64bit位寬的FIFO設置為32bit位寬,此時仍會占用1個FIFO,高32bit的數(shù)據(jù)位寬則會閑置。

            由此可見,MPFE在使用上十分靈活,能夠適應不同的應用方式,滿足FPGA內(nèi)部不同邏輯模塊對Memory的讀寫訪問。

            3 多端口前端的調(diào)度策略

            MPFE本身相當于一個調(diào)度器,采用分時復用的方式,對來自不同端口的數(shù)據(jù)和命令進行調(diào)度。若干個端口之間的調(diào)度遵循兩個條件,即端口的優(yōu)先級(Priority)和權重(Weight)。優(yōu)先級參數(shù)和權重參數(shù)是可以指定的,如圖3所示,在IP例化時的Controller Settings界面中,手動填寫端口的這兩個參數(shù)值。

            優(yōu)先級參數(shù)可以在1~7之間任意指定,優(yōu)先級參數(shù)值越大,代表該端口的優(yōu)先級越高。高優(yōu)先級的端口相對于低優(yōu)先級的端口會被優(yōu)先調(diào)度。優(yōu)先級是一個絕對的參數(shù),如果一個端口的優(yōu)先級設置為7,則這個端口享有最高優(yōu)先級,它在任何情況下都會被優(yōu)先調(diào)度,這樣另外的優(yōu)先級為6或更低優(yōu)先級的端口必須等待優(yōu)先級為7的端口工作完成之后才會被調(diào)度。

            如果兩個端門的優(yōu)先級一樣,那么相對的優(yōu)先級會取決于端口的權重參數(shù)。權重參數(shù)可以在0~31之間設置。為了避免高優(yōu)先級的某個端口長時間占用接口總線的帶寬,引入了加權循環(huán)調(diào)度算法(Weighted Round Robin,WRR),WRR算法仍然會優(yōu)先處理高優(yōu)先級的端口,但是低優(yōu)先級的端口也不會出現(xiàn)不被調(diào)度的情況。WRR是根據(jù)端口權重與所有排隊等待調(diào)度的端口的權重總和的比來平等地分配帶寬。因此,在處理多個端口的高優(yōu)先等級的業(yè)務時,可以確保每個端口都不會過度地占用接口的總線帶寬。

            

           

            在端口的優(yōu)先級參數(shù)都一樣的情況下,權重參數(shù)能夠決定端口間相對的帶寬分配,如圖3所示,端口0和端口1的優(yōu)先級均為1,權重參數(shù)值分別為4和6,則端口0和端口1分別會占用大致40%和60%的Memory接口總帶寬。

            4 HMC的ModelSim功能仿真

            仿真過程不僅能夠觀察到HMC內(nèi)部工作的時序,還能夠大致測箅出HMC工作時的有效帶寬。在系統(tǒng)設計開始階段,可以用于評估Memory接口實際有效帶寬是否滿足設計需求。如圖4和圖5所示。

          存儲器相關文章:存儲器原理



          上一頁 1 2 下一頁

          關鍵詞: FPGA Altera Cyclone V

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();