PCIE的DMA和PIO介紹

2021-09-24 23:10:56 字數 1127 閱讀 6918

轉至:

在pcie中有兩種資料傳輸方式:

dma(direct memory access),直接記憶體訪問,在該模式下,資料傳送不是由cpu負責處理,而是由乙個特殊的處理器dma控制器來完成,因此占用極少的cpu資源。

所以,總的來說,使用dma模式時,計算機的執行速度會比使用pio模式快很多。

在xilinx中生成ip核後,工程資料夾下會有這兩個資料夾:

[xilinx_pcie_bmd] xilinx fpga 開發 pcie bmd dma的verilog hdl原始碼[example_design] xilinx pcie匯流排 pio模式下的控制器**。包含接收傳送模組,儲存模組,控制模組等。

下面主要介紹pcie的dma資料傳輸:

dma分為讀和寫種操作,兩種操作在細節上不同。

這裡先簡單介紹一下dma讀過程:1、驅動程式向作業系統申請一片物理連續的記憶體;2、主機向該位址寫入資料;3、主機將這個記憶體的實體地址告訴fpga;4、fpga向主機發起讀tlp請求—連續發出多個讀請求;5、主機向fpga返回cpld包—連續返回多個cpld;6、fpga取出cpld包中的有效資料;7、fpga傳送完資料後通過中斷等形式通知主機dma完成;

dma寫過程如下:1、驅動程式向作業系統申請一片物理連續的記憶體;2、主機將這個記憶體的實體地址告訴fpga;3、fpga向主機發起寫tlp請求,並將資料放入tlp包中—連續發出多個寫請求;4、fpga傳送完資料後通過中斷等形式通知主機dma完成;5、主機從記憶體中獲取資料;

1.3寫tlp請求dma寫的操作相對簡單,只需要fpga單向發起寫tlp操作即可完成,至於有沒有真正寫入記憶體一般不需要fpga關心;而驅動程式需要等待一定時間讓資料正真寫入記憶體—中斷處理的時間已經足夠讓資料寫入記憶體,所以也不必特別關心。

發起寫tlp請求可以連續傳送,但是注意《tx_engine.v》中要處理讀tlp請求、寫tlp請求和cpld,所以有時會遇到三種請求競爭的情況。如果想要提高dma的效率可以重新設定三種請求的優先順序。

1.4讀tlp請求dma讀的操作相對複雜,需要fpga向主機發出讀請求,主機再返回資料。fpga控制邏輯必須計算發起了多少個讀tlp請求,再計算收到的資料是否足夠。

硬碟的PIO模式和DMA模式

ide資料傳輸模式 隨著技術的發展,產品對資料傳輸速度要求的提高,ide介面硬碟的資料傳輸模式,經歷過三個不同的技術 變化,由最初的pio模式,到dma模式,再到ultra dma模式。pio模式 pio的英文拼寫是 programming input output model pio模式是一種通過...

PIO模式和DMA模式的區別

硬碟和記憶體之間資料傳送的兩種方式 一是pio模式,二是dna模式 pio模式下通過cpu來控制硬碟和記憶體之間的資料傳輸,是一種通過cpu執行i o埠指令來進行資料的讀寫的資料交換模式。dma模式下,cpu並不全程參與資料的傳送工作,只需下達命令即可。dma方式下有控制器和通道,cpu只須向dma...

對流式DMA和一致性DMA的認識

一致性dma dma alloc coherent dev,size,dma handle,gfp 流式dma dma map single dev,addr,size,direction dma unmap single dev,dma handle,size,direction 一致性dma可以...