概覽:
在內部,子系統可以配置為實現多達8個獨立的物理DMA引擎(最多4個H2C和4個C2H)。這些DMA引擎可以映射到單獨的AXI4Stream接口,也可以將共享的AXI4內存映射(MM)接口映射到用戶應用程序。在axis4 MM接口上,PCI Express?的DMA/橋接子系統生成請求和預期完成。axis4 - stream接口僅支持數據
H2C (Host-to-Card)通道向PCIe發出讀請求,并向用戶應用提供數據或生成寫請求。
卡到主機(C2H)通道要么在用戶端等待數據,要么在用戶端生成一個讀請求,然后生成一個寫請求,其中包含收到的數據到PCIe
PCIe的DMA/橋接子系統也使主機能夠訪問用戶邏輯。到達PCIe到DMA旁路基址寄存器(BAR)的寫請求由DMA處理。來自寫請求的數據通過PL邏輯的NoC接口轉發給用戶應用程序。PCIe的DMA/橋接子系統也使主機能夠訪問用戶邏輯。到達PCIe到DMA旁路基址寄存器(BAR)的寫請求由DMA處理。來自寫請求的數據通過PL邏輯的NoC接口轉發給用戶應用程序。
BAR是什么意思??
H2C通道?的數量在AMD Vivado?集成設計環境(IDE)中配置。H2C通道處理從主機到卡的DMA傳輸。它負責根據最大讀請求大小和可用的內部資源拆分讀請求。DMA通道根據rnum_rid保持最大未完成請求數,rnum_rid是未完成的H2C通道請求ID參數的數量。讀請求的每次拆分(如果有的話)都會消耗一個額外的讀請求條目。當DMA通道收到用戶界面上按順序完成寫操作的確認時,向PCIe RQ塊發出讀操作后,請求是未完成的。在傳輸完成后,DMA通道發出回寫或中斷來通知主機。H2C通道也在其讀和寫接口上分割事務。在到主機的讀接口上,事務被分割以滿足配置的最大讀請求大小,并基于可用的Data FIFO空間。數據FIFO空間在讀取請求時分配,以確保讀取完成的空間。PCIe RC塊將完成數據返回到分配的數據緩沖區位置。為了最小化延遲,在接收到任何完成數據后,H2C通道開始向用戶界面發出寫請求。它還將寫請求分解為最大有效負載大小。在AXI4-Stream用戶界面上,這種分割是透明的。當啟用多個通道時,axis4 Master接口上的事務(就是請求??)在所有選定的通道之間交錯進行。采用簡單輪詢協議服務所有通道。事務粒度取決于主機最大有效負載大小(MPS)、頁面大小和其他主機設置。
C2H通道處理從卡到主機的DMA傳輸。C2H通道的實例化數量在AMD Vivado?IDE中控制。類似地,未完成傳輸的數量是通過wnum_rid配置的,它是C2H通道請求id的數量。在AXI4-Stream配置中,DMA傳輸的細節是在AXI4-Stream接口上接收數據之前設置的。這通常是通過接收DMA描述符來完成的。在準備好請求ID并啟用通道之后,通道的AXI4Stream接口可以接收數據并對主機執行DMA。在AXI4 MM接口配置中,請求id是在發出對AXI4 MM接口的讀請求時分配的。與H2C通道類似,在寫請求完成之前,給定的請求ID是未完成的。對于C2H通道,寫請求完成是指PCIe IP指示的寫請求已經發出。當啟用多個通道時,axis4 Master接口上的事務在所有選定的通道之間交錯進行。采用簡單輪詢協議服務所有通道。事務粒度取決于主機的MaxPayload Size (MPS)、頁面大小和其他主機設置。
AXI4-Lite Master該模塊實現了axis4 - lite主總線協議。主機可以通過該接口向用戶邏輯生成32位讀、32位寫請求。讀或寫請求通過PCIe接收到AXI4-Lite主BAR。讀完成數據通過目標橋通過PCIe IP CC總線返回給主機
AXI4-Lite Slave該模塊實現了AXI4-Lite從總線協議。用戶邏輯只能掌握在DMA內部寄存器上的32位讀或寫操作。不能通過該接口訪問PCIe集成塊寄存器。該接口不生成對主機的請求。
Host-to-Card Bypass Master到達PCIe到DMA旁路BAR的主機請求被發送到該模塊。旁路主端口是一個ax4mm接口,支持讀寫訪問
IRQ模塊從用戶邏輯接收可配置數量的中斷線,從每個DMA通道接收一條中斷線。該模塊負責通過PCIe產生中斷。可以在IP配置期間指定對MSI- x、MSI和遺留中斷的支持。注意:在IP配置期間,主機可以從指定的支持中斷列表中啟用一種或多種中斷類型。IP在給定時間只生成一種中斷類型,即使有多個中斷類型被啟用。MSI- x中斷優先于MSI中斷,MSI中斷優先于Legacy中斷。主機軟件不能切換(啟用或禁用)中斷類型,而有一個中斷斷言或掛起。
配置模塊,DMA寄存器空間,包含PCIe?解決方案IP配置信息和DMA控制寄存器,存儲與PCIe的DMA/Bridge子系統相關的PCIe IP配置信息。該配置信息可以通過寄存器讀取讀取到配置模塊中適當的寄存器偏移量
PCIe DMA引擎只是將數據移到或移出PCIe地址位置。在典型的操作中,主機中的應用程序在FPGA和主機內存之間移動數據。為了完成這種傳輸,主機在系統內存中設置緩沖空間,并創建DMA引擎用來移動數據的描述符。描述符的內容將取決于許多因素,包括為DMA引擎選擇哪個用戶界面。如果選擇了AXI4-Stream接口,則C2H傳輸不使用源地址字段,H2C字段不使用目的地址。這是因為AXI4-Stream接口是一個不使用地址的FIFO類型接口。如果選擇了AXI內存映射接口,則C2H傳輸的源地址為AXI地址,目的地址為PCIe地址。對于H2C傳輸,源地址是PCIe地址,目的地址是AXI地址。數據傳輸流程:pg195? ? ? ?p20-23
描述符:像鏈表一樣,前一個描述符包含指向下一個描述符的信息,知道最后一個描述符。DMA具有Bit_width * 512深度FIFO來保存描述符引擎中的所有描述符。這個描述符FIFO與所有選定的通道共享,并且僅在內部模式下使用(而不是在描述符旁路模式下使用)。?對于具有2H2C和2C2H設計的Gen3x8, AXI位寬度為256位。FIFO深度為256位* 512 = 32b * 512 = 16kb(512個描述符)。這個FIFO由4個DMA引擎共享。//描述符獲取引擎可以通過AMD Vivado?IDE參數在每個通道的基礎上繞過。啟用了描述符旁路的通道從其各自的c2h_dsc_byp或h2c_dsc_byp總線接受描述符。在通道接受描述符之前,必須設置控制寄存器運行位。當繞過描述符時,不使用NextDescriptorAddress和NextAdjacentCount以及Magic描述符字段。控制寄存器位中的ie_descriptor_stopped位不會阻止用戶邏輯寫入額外的描述符。所有寫入通道的描述符都會被處理,除非在通道緩沖區已滿時寫入新的描述符//(大概的意思就是bypass是接收描述符的通路,當啟用的bypass,描述符就從bypass上傳輸)??//每個引擎都能夠將完成的描述符計數寫回主機內存。這允許驅動程序輪詢主機內存以確定DMA何時完成,而不是等待中斷。
DMA H2C Stream:
對于主機到卡的傳輸,從源地址處的主機讀取數據,但描述符中的目標地址是未使用的。數據包可以跨越多個描述符。包的終止由EOP控制位表示。帶有EOP位的描述符在數據的最后一個節拍上斷言AXI4-Stream用戶界面上的tlast。
交付給axis4 - stream接口的數據將為每個描述符打包。如果Tkeep不是數據路徑寬度的倍數,則除了描述符數據傳輸的最后一個周期外,Tkeep都是1s。DMA不會跨多個描述符打包數據。(就是說 stream模式下不適用目的地址,只是用帶有EOP的描述符,當EOP出現的時候,tlast拉高,表示不再接收數據)
DMA C2H?Stream:
對于卡到主機的傳輸,從AXI4-Stream接口接收數據并將其寫入目標地址。數據包可以跨越多個描述符。C2H通道在啟用時接受數據,并具有有效的描述符。當接收到數據時,它按順序填充描述符。當描述符被完全填充或由于接口上的數據包結束而關閉時,C2H通道將信息用預定義的WB Magic值16'h52b4(表10:C2H流回寫字段)回寫到主機上的回寫地址,并根據需要更新EOP和長度。對于C2H AXI4-Stream接口上的有效數據周期,與給定數據包關聯的所有數據必須是連續的(就是說 接收數據填充描述符,描述符就像計數器一樣,當描述符滿了的時候,stream會向主機回寫一個信息。)C2H流描述符的長度(目標緩沖區的大小)必須始終是64字節的倍數。
端口描述:用于PCI Express?的AMD DMA/Bridge子系統直接連接到用于PCIe的集成塊。PCIe集成塊IP的數據路徑接口有64、128、256或512位寬,根據IP配置的不同,接口的工作頻率最高可達250mhz。數據路徑寬度適用于除AXI4-Lite接口以外的所有數據接口。AXI4-Lite接口固定為32位寬。
7系列Gen2和Virtex 7 Gen3: PCIe參考時鐘。應該從參考時鐘IBUFDS_GTE2的O端口驅動。
從PCIe邊緣連接器復位信號復位
PCIe派生時鐘輸出m_axi*和s_axi*接口。ax_aclk是從GT塊的TXOUTCLK引腳派生出來的時鐘;在斷言axi_aresetn時,不期望它連續運行。
輸輸出?Active-High標識?連接到主機設備
內部信號在手冊31-43頁
寄存器空間,有關寄存器的描述核定義在手冊43-75頁
Clocking and Resets:
axi_aclk輸出是用于所有AXI接口的時鐘,應該驅動所有相應的AXI Interconnect ack信號。
對于在AXI橋接模式下的PCIe的DMA/橋接子系統,有一個可選的dma_bridge_resetn輸入引腳,它允許您重置所有內部橋接引擎和寄存器以及由ax_aresetn引腳驅動的所有AXI外設。
Lane Width: The subsystem requires the selection of the initial lane width
帶寬:子系統要求選擇初始車道寬度
Maximum Link Speed: The subsystem requires the selection of the PCIe Gen speed.
最大鏈路速度:子系統需要選擇PCIe Gen速度。
參考時鐘頻率:默認為100mhz,也支持125mhz和250mhz
復位:您可以在User Reset和Phy ready之間選擇。一旦鏈路建立,用戶復位來自PCIe核心。當PCIe鏈路斷開時,斷言User Reset, XDMA進入復位模式。當鏈接恢復時,用戶重置被解除。當選擇Phy ready選項時,XDMA不受PCIe鏈路狀態的影響。
GT DRP時鐘選擇:選擇內部時鐘(默認)或外部時鐘。
GT Selection, Enable GT Quad Selection:選擇0號通道所在的Quad。
AXI地址寬度:目前只支持64位寬度。
AXI數據寬度:選擇64、128、256位或512位(僅適用于UltraScale+)。該子系統允許您選擇接口寬度
AXI時鐘頻率:根據通道寬度/速度選擇62.5 MHz、125 MHz或250 MHz。
DMA接口選項:選擇AXI4內存映射和AXI4- stream
數據保護:默認禁用奇偶校驗,當啟用Check Parity時,XDMA會對從PCIe讀數據進行奇偶校驗,并對寫入PCIe的數據進行奇偶校驗,當“傳播奇偶校驗”被啟用時,XDMA將奇偶校驗傳播到用戶AXI接口。用戶負責在用戶AXI接口上檢查和生成奇偶校驗。
PCIe ID Tab:啟用PCIe-ID接口:通過啟用此選項,PCIe_ID端口作為輸入端口,您希望連接到所需的適當值。
在Endpoint配置中,核心最多支持6個32位BAR或3個64位BAR,以及擴展只讀存儲器(ROM) BAR。bar有兩種大小:
約束:PCI Express?的DMA/橋接子系統需要定時和其他物理實現約束的規范,以滿足PCI Express的指定性能要求。這些約束在Xilinx Design constraints (XDC)文件中提供。生成的XDC中的引腳和層次結構名稱對應于所提供的示例設計
示例設計:
當啟用axis4 - stream接口時,每個H2C流通道都被循環回C2H通道。如下圖所示,示例設計給出了axis4流的環回設計。限制是您需要選擇相同數量的H2C和C2H通道才能正常運行。這個示例設計還顯示了PCIe到DMA旁路接口和PCIe到axis - lite Master的選擇。
User IRQ Example Design:
用戶IRQ示例設計使主機能夠連接到axis4 - lite Master接口以及用于PCI Express?示例設計的默認DMA/Bridge子系統。在示例設計中,用戶中斷生成器模塊和外部塊RAM集成在這個AXI4-Lite接口上。主機可以使用該接口通過寫入用戶中斷生成器模塊的寄存器空間來生成用戶IRQ,也可以對外部1K塊RAM進行讀寫。下圖顯示了示例設計。
設置驅動程序:p123,暫時還沒看