新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 利用WinDriver實現鏈式DMA

        利用WinDriver實現鏈式DMA

        作者: 時間:2013-07-13 來源:網絡 收藏

        摘要:協議由于其高速串行、系統拓撲簡單等特點被廣泛用于各種領域。Altera公司的Arria II GX FPGA內集成了支持傳輸功能的硬核,適應了總線高速度的要求。文中利用Jungo公司的軟件實現了的上層應用設計。首先給出了實現的基本過程,接著分析了鏈式DMA數據傳輸需要處理的幾個問題,給出了相應的解決辦法和策略。采用這些方法,保證了DAM數據傳輸的正確性,簡化了底層FPGA應用邏輯的設計。
        關鍵詞:鏈式DMA;;PCI Express;

        在計算機與外設的通訊過程中,DMA方式,即DirectMemory access(直接內存訪問),由于無需計算機CPU的干預就可以在內存和外設之間傳輸數據,是一種高效的數據交換方式。因為對于高速的設備,如PCI Express接口的板卡設備,如果采用普通方式在存儲器和外設之間傳輸大量的數據將占用太多的CPU時間,嚴重影響系統的性能。而使用DMA方式則使傳輸數據的操作中CPU的涉及減小到最少。
        要實現DMA的傳輸功能,在底層需要硬件本身具有這樣的功能模塊,即外設硬件可以主動發起數據傳輸。在上層則需要驅動與應用接口的配合。
        文中給出如下的一種DMA傳輸方式的實現。硬件外設是基于Altera公司PCI Express硬核的FPGA加密卡,其與主機的接口采用是PCI Expre ss接口。上層則采用了Jungo公司的軟件提供的驅動和API接口。

        1 鏈式DMA
        PCI Express是用來互聯諸如計算機和通信平臺應用中外圍設備的第三代高性能I/O總線。與原有的PCI并行總線相比,它沒有大量的數據和控制線,對于硬件電路設計者來說,省去了很多硬件設計工作。PCI Express的傳輸速度遠遠大于PCI總線,PCI Express 1.1版本單個鏈路的單向吞吐量能達到250 MB/s。對于需要與主機進行大容量傳輸的系統來說,該總線標準的優勢是非常明顯的。Altera公司的Arria IICX系列器件內建PCI Express硬核,無需PHY和IP核,有利于節約FPGA資源,簡化了PCI Express的接口設計。同時在用Quartus II軟件生成的基于PCI Express硬核的樣本工程中,集成了對DMA的支持功能,為進一步的硬件產品開發提供了基礎。
        實際應用中,DMA的傳輸方式可分為兩種:簡單DMA和鏈式DMA。簡單DMA只需要主機告訴設備要傳輸數據的主機地址、設備地址和傳輸數據的長度,然后啟動DMA傳輸即可。但簡單DMA每進行一次傳輸,都要進行上面的設置,效率較低。
        在用Quartus II軟件的MegaWizard。Plug-In Manager工具生成的基于PCI Express硬核的樣本工程中,實現了一個32 KB的帶有字節寫使能控制的雙端口RAM的,其讀寫數據總線寬度均為128位;并且實現了鏈式DMA的傳輸功能。這是一種效率遠遠高于簡單DMA的傳輸方式,它只需要1次啟動操作,就可以完成多次DMA傳輸。具體實現的方法是:在主機端,需要開辟一塊內存區域,用來存儲描述符表。所謂描述符表,是用來描述在主機與外設之間數據傳輸有關的地址與長度信息的,它由一個表頭和多個描述符組成,其中每一個描述符對應一次DMA操作。用戶根據自己的需求填寫該描述符表,如下表所示。

        本文引用地址:http://www.104case.com/article/148004.htm

        a.JPG


        在上表中,偏移地址是指到描述符表內存區域開始處的字節偏移地址。DMA長度用來設置本描述符對應的DMA傳輸的長度,是以32位雙字為單位的。主機地址用來指示數據在主機端存放的位置。設備地址用來指示數據在設備的中存放的位置。控制域用來控制在該描述符傳輸完成時設備是否更新描述符頭的EPLAST域。

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



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 邯郸市| 昌邑市| 天祝| 吉林省| 独山县| 阳江市| 福安市| 白河县| 吴桥县| 崇州市| 通州区| 育儿| 梁山县| 无棣县| 高台县| 库车县| 巴里| 叶城县| 科技| 高尔夫| 道孚县| 虞城县| 鄂托克旗| 中西区| 朝阳区| 理塘县| 赣榆县| 定日县| 溧阳市| 定结县| 方正县| 改则县| 忻州市| 景德镇市| 格尔木市| 宝应县| 江都市| 罗定市| 佛冈县| 贵州省| 宝兴县|