UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在內(nèi)的多種不同功能的IP核都會有一頁設置為PCIe:BARs,設置IP核的Base address register 的相關參數(shù),如圖1所示:
圖1 PCIe:BARs 配置圖
一般來說在FPGA中使用PCIe核都是Endpoint mode,我們的PC主機端是Rootpoint mode,一般會有一個Root Complex的混合管理器,來管理接入PCIe總線的端點設備。對于PC機來說,當PC機識別該PCIe設備后便會識別到BAR n相對應的基地址和地址空間(不過該基地址是PC機的Root Complex主動分配的,還是PCIe設備內(nèi)部固定的還有疑問)。設別基本配置信息后,PC機便可以對PCIe的內(nèi)存空間進行讀寫操作了。
而PCIe IP核本身能夠引出AXI總線接口,該AXI接口是memory map 型的,所以就肯定存在自己的地址空間,本文所提的PCIe to AXI Translation便是PCIe的地址空間到AXI的地址空間的轉換。
這里就圖1中的BAR0來說明下PCIe to AXI Translation的轉換過程。BAR0的配置為:64bit數(shù)據(jù)位寬、32kilobytes地址范圍、PCIe to AXI Translation為0x0000000012340000。此時的PCIe IP核的BAR0是拓展連接到外部的AXI總線的,該總線連接到另外一個DDR4 MIG IP核,如圖2所示。圖中重點標注的AXI總線便是PCIe核引出的AXI總線。
圖2 PCIe核拓展AXI接口
假設PC機設別到的PCIe BAR0的基地址為0x0000000000000000,在FPGA內(nèi)部DDR4的AXI基地址為0x0000000012340000。現(xiàn)在PC機想要往FPGA內(nèi)部的DDR4地址空間的0x000000001234000F地址寫入數(shù)據(jù),那么PC機應該對PICe內(nèi)存空間的0x000000000000000F寫入數(shù)據(jù),然后由PCIe to AXI Translation的關系,便會把0x000000000000000F轉換到0x000000001234000F上實現(xiàn)對AXI總線的操作,進而實現(xiàn)對DDR4的寫入操作。圖3可以看出具體的轉換操作。
圖3 PCIe to AXI Translation 轉換圖
既然有PCIe to AXI Translation,那相應的也有AXI to PCIe Translation了,圖4是AXI to PCIe Translation的轉換圖,不過這種操作應用不多,原理也跟PCIe to AXI Translation差不多,這就不再贅述了。
圖4 AXI to PCIe Translation 轉換圖
-
PCIe
+關注
關注
16文章
1342瀏覽量
85151 -
AXI
+關注
關注
1文章
136瀏覽量
17253
發(fā)布評論請先 登錄
使用rt_malloc申請內(nèi)存空間失敗,顯示沒有內(nèi)存怎么解決?
請教高手,安卓智能手機的內(nèi)存空間不夠問題
Linux內(nèi)存點滴 用戶進程內(nèi)存空間
請問66ak2h內(nèi)存空間申請如何實現(xiàn)
在MPFS2文件之前預留內(nèi)存空間的最佳方法是什么?
DM8127使用SWOSD_TI_alloc()分配內(nèi)存空間怎么加大?
如何與ctypes庫創(chuàng)建的數(shù)組共享內(nèi)存空間?
RTThread的動態(tài)內(nèi)存空間該如何去分配呢
在stm32f429上的輕量級算法運行時所用的內(nèi)存空間要怎么得到呢?
C51程序中兩種對內(nèi)存空間地址寫數(shù)據(jù)的方法說明

評論