• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      PCI Express總線接口的DMA傳輸設(shè)計①

      2017-10-20 03:09:18王紅志姚愷豐
      計算機系統(tǒng)應(yīng)用 2017年10期
      關(guān)鍵詞:狀態(tài)機存儲器寄存器

      王紅志 ,王 超 ,欒 勇 ,姚愷豐

      1(中國科學院大學,北京 100049)2(中國科學院 沈陽計算技術(shù)研究所 高檔數(shù)控國家工程研究中心,沈陽 110168)3(沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)4(國家電網(wǎng)公司東北分部電力調(diào)控分中心,沈陽 110180)

      PCI Express總線接口的DMA傳輸設(shè)計①

      王紅志1,2,王 超2,3,欒 勇2,3,姚愷豐4

      1(中國科學院大學,北京 100049)2(中國科學院 沈陽計算技術(shù)研究所 高檔數(shù)控國家工程研究中心,沈陽 110168)3(沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)4(國家電網(wǎng)公司東北分部電力調(diào)控分中心,沈陽 110180)

      在認真理解PCI Express協(xié)議及其應(yīng)用技術(shù)的此基礎(chǔ)上,使用FPGA實現(xiàn)PCI Express總線接口的DMA傳輸設(shè)計.本文主要從DMA發(fā)送模塊、DMA接收模塊和DMA狀態(tài)控制模塊三個部分對設(shè)計進行詳細的介紹.最后,在基于Linux系統(tǒng)的PC機中實現(xiàn)PCI-E的驅(qū)動程序,使用BEEcube公司的miniBEE作為測試平臺對設(shè)計進行檢測并給出結(jié)果.

      FPGA; PCI Express; DMA; Linux; 驅(qū)動程序

      1 引言

      系統(tǒng)總線也被叫做計算機總線、內(nèi)部總線,在系統(tǒng)中用來連接的CPU、顯卡、硬盤等功能部件.隨著計算機技術(shù)的快速發(fā)展,CPU的處理速度越來越快,最近二十年占據(jù)著主導地位的PCI及其拓展的PCI-X系列總線已滿足不了實際的應(yīng)用需求,系統(tǒng)總線已經(jīng)成為制約計算機系統(tǒng)性能繼續(xù)提高的瓶頸.

      在這個背景下,PCI Express(以下簡稱 PCI-E)總線規(guī)范一提出,迅速就得到了廣泛的青睞.與原有的總線相比,PCI-E采用點對點串行連接的設(shè)備連接方式,每個設(shè)備都擁有獨立的數(shù)據(jù)鏈路,可以達到遠超出PCI總線的傳輸速率; 以數(shù)據(jù)包的方式進行數(shù)據(jù)傳輸,保證了端對端的可靠性傳輸,同時還支持電源管理和熱插拔以及熱交換等功能; 較好的靈活性,可根據(jù)實際的帶寬需求,給PCI-E的接口物理連接配置不同的鏈路模式,包括 x1、x4、x8、x16 以及 x32 鏈路模式; 具有較好的向后兼容性,PCI-E繼承PCI的配置空間,基于PCI總線的系統(tǒng)軟件幾乎可以不經(jīng)修改,直接在PCIE體系結(jié)構(gòu)中使用.

      基于以上,特別是高傳輸速率的優(yōu)勢,在高速的DMA控制器傳輸方式中,相比于原有總線尤為明顯,因此PCI-E總線協(xié)議具有巨大的應(yīng)用前景.目前PCI-E總線的最新規(guī)范為V3.0版本,本文基于較為成熟的V2.0版本,提出了應(yīng)用于總線接口中的高速DMA傳輸?shù)脑O(shè)計方案.

      2 設(shè)計方案

      本設(shè)計DMA模塊介于DDR模塊和上位機之間,在該模塊的控制下,實現(xiàn)FPGA平臺上數(shù)據(jù)以DMA的方式在DDR模塊和PC上位機之間的傳輸.圖1是基于FPGA的PCI-E接口DMA設(shè)計的模塊圖,其中DMA模塊主要有DMA狀態(tài)控制模塊、發(fā)送引擎模塊、接收引擎模塊、DMA發(fā)送和接收模塊幾個部分.本設(shè)計選擇 Xilinx Virtex-6 提供的 Integrated Block for PCI-E IP 核,該 PCI-E IP 核實現(xiàn)了 PCI-E 物理層、數(shù)據(jù)鏈路層和傳輸層間協(xié)議信號的轉(zhuǎn)變,因此可以在它的基礎(chǔ)上直接進行DMA控制設(shè)計,可以大大的降低設(shè)計的復雜度.

      圖1 PCI-E DMA 接口 DMA 設(shè)計的模塊

      2.1 數(shù)據(jù)包TLP簡介

      PCI-E的層次結(jié)構(gòu)與網(wǎng)絡(luò)層次結(jié)構(gòu)類似,有設(shè)備核心層、處理層、數(shù)據(jù)鏈路層和物理層.在各層間以數(shù)據(jù)包的形式傳送信息,其中鏈路處理層數(shù)據(jù)包(TLP)是最主要的數(shù)據(jù)類型,其結(jié)構(gòu)如圖2所示.首先在核心層生產(chǎn)數(shù)據(jù)包,再依次通過事務(wù)層、數(shù)據(jù)鏈路層和物理層,最終發(fā)向另外一個PCI-E層次結(jié)構(gòu).數(shù)據(jù)包中的頭和數(shù)據(jù)部分由FPGA的代碼產(chǎn)生,其他部分都是IP核自動生成的.PC上位機將地址等信息放在TLP頭后,然后將該數(shù)據(jù)包發(fā)給FGPA,FPGA解析數(shù)據(jù)包,并將解析所得的結(jié)果保存在自己的空間中.

      圖2 TLP 結(jié)構(gòu)及其頭格式

      2.2 DMA傳輸設(shè)計

      從圖1中可知DMA傳輸模塊主要分成發(fā)送模塊、接收模塊和DMA狀態(tài)控制三個子模塊,以下依次從這三個模塊進行詳細介紹.

      2.2.1 DMA 發(fā)送模塊設(shè)計

      發(fā)送模塊分成發(fā)送引擎和DMA發(fā)送控制兩個子模塊.DMA發(fā)送控制子模塊把要發(fā)送的數(shù)據(jù)轉(zhuǎn)換成TLP的格式,然后將其傳遞給發(fā)送引擎模塊; 發(fā)送引擎子模塊負責把待發(fā)送的數(shù)據(jù)生成TLP數(shù)據(jù)包,然后將其發(fā)送給PCI-E IP核.發(fā)送引擎子模塊需要在狀態(tài)機的控制下生成存儲器讀寫TLP等請求.圖3是發(fā)送引擎模塊的狀態(tài)機圖.

      圖3 發(fā)送引擎的狀態(tài)機

      引擎狀態(tài)機默認處于TX_IDLE狀態(tài).當收到“存儲器寫開始”信號,狀態(tài)機由空閑狀態(tài)進入MWR_QWO狀態(tài),將 32 地址和 64 位數(shù)據(jù)寫入 PCI-E IP 核內(nèi).之后判斷寫操作是否完成,若未完成,進入MWR_QWN繼續(xù)寫入數(shù)據(jù),之后每寫入一次判斷一次直到數(shù)據(jù)寫入完成.寫操作完成之后,便由MWR_QWN狀態(tài)進入MWR_IRQ中斷狀態(tài)進行中斷處理,最后恢復到TX_IDLE空閑狀態(tài),完成一次存儲器寫事務(wù); 當收到“存儲器讀開始”信號,狀態(tài)機由空閑狀態(tài)進入MWR_QWO狀態(tài),然后將 32位的讀地址寫入 PCI-E IP 核內(nèi).存儲器讀屬于非轉(zhuǎn)發(fā)事務(wù),所以DMA模塊通過PCI-E IP向PC上位機發(fā)送讀請求包,每發(fā)送一個讀請求包,PC上位機就向DMA模塊發(fā)送一個讀完成包,接收引擎負責接收數(shù)據(jù); 當收到“請求發(fā)送完成數(shù)據(jù)”信號,狀態(tài)機由空閑狀態(tài)進入CPLD_QWO狀態(tài),在這個狀態(tài)下發(fā)送帶數(shù)據(jù)的32位完成包,數(shù)據(jù)發(fā)送完之后進入CPLD_WIT狀態(tài),然后判斷PCI-E IP是否發(fā)送完畢,若發(fā)送完就恢復TX_IDLE空閑狀態(tài),否則繼續(xù)等待.

      2.2.2 DMA 接收模塊設(shè)計

      接收模塊分成接收引擎和DMA接收控制兩個子模塊.接收引擎子模塊從 PCI-E IP 接收數(shù)據(jù),然后通過模塊內(nèi)部的狀態(tài)機完成寄存器讀寫和存儲器讀等操作事務(wù); DMA接收控制子模塊負責把TLP數(shù)據(jù)包轉(zhuǎn)換為DDR的數(shù)據(jù)位寬,以及向發(fā)送引擎模塊發(fā)送存儲器讀請求包.圖4是接收引擎模塊的狀態(tài)機圖.

      圖4 接收引擎狀態(tài)機圖

      接收狀態(tài)機默認處于RX_IDLE狀態(tài).存儲器讀完成事務(wù):發(fā)送引擎向PC上位機發(fā)送存儲器讀請求,隨后PC上位機會向接收引擎發(fā)送存儲器讀完成包,接收引擎分析收到的數(shù)據(jù)包得到事務(wù)的類型等有用信息后,開始進行“存儲器讀”操作.狀態(tài)機由RX_IDLE空閑狀態(tài)轉(zhuǎn)到CPLD_QWO狀態(tài),然后將接收到的TLP拆包得到有效數(shù)據(jù)發(fā)送給后端模塊,若操作還未完成,進入CPLD_QWN狀態(tài)繼續(xù)接收數(shù)據(jù),否則恢復到RX_IDLE空閑狀態(tài); 寄存器讀事務(wù):接收引擎分析收到的TLP數(shù)據(jù)包,得到事務(wù)的類型等信息后,發(fā)起“寄存器讀”操作.狀態(tài)機由RX_IDLE空閑狀態(tài)轉(zhuǎn)到MRD_QWO狀態(tài),然后將解析TLP得到的讀地址觸發(fā)“請求讀寄存器完成”信號后進入MRD_WIT等待狀態(tài),同時將DMA控制模塊中讀到的寄存器數(shù)值通過發(fā)送引擎?zhèn)鬟f給PC上位機,最后恢復到RX_IDLE空閑狀態(tài); 寄存器寫事務(wù):接收引擎分析收到的TLP數(shù)據(jù)包,得到事務(wù)的類型等信息后,發(fā)起“寄存器寫”操作.狀態(tài)機由RX_IDLE空閑狀態(tài)轉(zhuǎn)到MWR_QWO狀態(tài),然后在該狀態(tài)下解析TLP中32位的寄存器寫地址和寫數(shù)據(jù),并將這些寫入DMA控制模塊中相應(yīng)的寄存器中,若寫入成功,恢復到RX_IDLE空閑狀態(tài),否則繼續(xù)等待.

      2.3 DMA狀態(tài)控制模塊

      DMA狀態(tài)控制模塊解析從PC上位機接收到的命令,并通知接收引擎、發(fā)送引擎等相關(guān)模塊完成對應(yīng)的操作.PC上位機中的驅(qū)動讀寫一組寄存器來控制和配置DMA狀態(tài)控制模塊,這些寄存器被映射到PC機的PCI地址空間中,同時通過硬連接和FPGA內(nèi)的其他模塊相連.

      本設(shè)計PCI-E端點設(shè)備使用BAR0空間,設(shè)置其大小為1024Byte,用以存儲與DMA控制相關(guān)的存儲器配置和PCI-E IP配置空間狀態(tài)等信號,包括TLP數(shù)量、TLP大小、DMA地址、DMA讀寫事務(wù)啟動信號等.以DMA的方式通過PCI-E總線接口將DDR中的數(shù)據(jù)傳給PC上位機,執(zhí)行讀寫操作,都必須先完成DMA寄存器的配置,圖5是DMA寄存器配置流程圖.

      3 驅(qū)動編寫與測試

      本設(shè)計在Linux系統(tǒng)中實現(xiàn)PCI-E的驅(qū)動程序.將PCI-E設(shè)備看作字符設(shè)備進行處理,系統(tǒng)首先把字符設(shè)備映射到文件系統(tǒng)的文件和目錄中,調(diào)用讀寫等函數(shù)操作相應(yīng)的設(shè)備.在fs.h頭文件里聲明結(jié)構(gòu)體file_operations,該結(jié)構(gòu)體提供開關(guān)讀寫和ioctl等一系列操縱函數(shù).載入驅(qū)動程序后,系統(tǒng)利用上述聲明的結(jié)構(gòu)體中所定義的函數(shù)操縱相應(yīng)的設(shè)備.操縱過程分成兩步,驅(qū)動程序首先將內(nèi)核與設(shè)備掛接起來,然后按照設(shè)備文件的類型,調(diào)用相應(yīng)的函數(shù)操縱設(shè)備.

      圖5 DMA 寄存器配置圖

      測試平臺使用的是BEEcube公司的miniBEE,以miniBEE中的Virtex6 FPGA邏輯芯片實現(xiàn)數(shù)據(jù)的存儲和控制,除了FPGA處理板,平臺還包括Linux上位機和PCI-E總線.再使用檢測FPGA內(nèi)部信號的ChipScope軟件,結(jié)合在Linux系統(tǒng)中實現(xiàn)的PCI-E設(shè)備驅(qū)動程序,對本文設(shè)計的高速DMA傳輸進行了測試,測試結(jié)果見圖6,PCI-E DMA 模塊 DMA 讀操作事務(wù)總線帶寬可以達到965MBps,DMA寫操作事務(wù)總線帶寬可以達到882MBps,大大提升了數(shù)據(jù)傳輸?shù)乃俣?再將在FPGA里產(chǎn)生線性數(shù)并上傳到PC機,通過matlab查看這些線性數(shù),見圖7可以看出數(shù)據(jù)是線性的,說明數(shù)據(jù)在DMA中傳輸比較可靠.

      圖6 DMA 讀寫速度實驗結(jié)果

      圖7 線性數(shù) matlab 圖

      4 結(jié)語

      本設(shè)計通過FPGA內(nèi)置的PCI-E IP核實現(xiàn)DMA傳輸?shù)脑O(shè)計方案,在實際的應(yīng)用中可以靈活配置.與其它PCI-E的DMA傳輸設(shè)計相比,本設(shè)計主要針對PCI-E在數(shù)控控制系統(tǒng)中的應(yīng)用,并能更好的發(fā)揮PCI-E高傳輸速率的優(yōu)勢.經(jīng)測試,DMA讀寫操作的速度可以很好的滿足數(shù)控實際中的應(yīng)用需求.

      1王齊.PCI Express 體系結(jié)構(gòu)導讀.北京:機械工業(yè)出版社,2010.

      2Corbet J,Rubini A,Kroah-hartman G.LINUX 設(shè)備驅(qū)動程序.魏永明,耿岳,鐘書毅,譯.北京:中國電力出版社,2006.

      3李曉寧,姚遠程,秦明偉.基于 PCIe 的高速接口設(shè)計.微型機與應(yīng)用,2016,35(1):27–29,32.

      4信侃.基于 Xilinx FPGA 的 PCIe 總線接口設(shè)計與實現(xiàn).無線電通信技術(shù),2014,40(4):94–96.

      5李碩,劉芳,肖儂.基于 FPGA 的 PCIe SSD 設(shè)計與實現(xiàn).中國科技論文,2014,9(4):403–406.

      6汪精華,胡善清,龍騰.基于 FPGA 實現(xiàn)的 PCIE 協(xié)議的DMA 讀寫模塊.微計算機信息,2010,26(29):7–9.[doi:10.3969/j.issn.2095-6835.2010.29.003]

      7李木國,黃影,劉于之.基于 FPGA 的 PCIe總線接口的 DMA傳輸設(shè)計.計算機測量與控制,2013,21(1):233–235,249.

      8李麗斯,崔志華,殷曄,等.基于 FPGA 的 PCIe 總線 DMA控制器的設(shè)計與驗證.計算機測量與控制,2014,22(4):1166–1168.

      9鄒晨,高云.基于FPGA的PCIe總線DMA傳輸?shù)脑O(shè)計與實現(xiàn).電光與控制,2015,22(7):84–88.

      DMA Transmission Design of Bus Interface Based on PCI Express

      WANG Hong-Zhi1,2,WANG Chao2,3,LUAN Yong2,3,YAO Kai-Feng4

      1(University of Chinese Academy of Sciences,Beijing 100049,China)2(National Engineering Research Center for High-End CNC,Shenyang Institute of Computing Technology,Chinese Academy of Sciences,Shenyang 110168,China)3(Shenyang Golding NC Intelligent Tech.Co.Ltd.,Shenyang 110168,China)4(State Grid Corporation of Northeast Branch of the Power Control Sub-Centers,Shenyang 110180,China)

      The DMA transfer design of PCI Express bus interface is realized by FPGA based on the in-depth understanding of PCI Express protocol and its application technology.This paper mainly introduces three parts of the design:DMA sending module,DMA receiving module and DMA state control module in detail.Finally,it realizes PCI-E driver in one PC based on Linux system,then uses miniBEE as a test platform of BEEcube Company to test the design and give the results.

      FPGA; PCI Express; DMA; Linux; driver

      王紅志,王超,欒勇,姚愷豐.PCI Express 總線接口的 DMA 傳輸設(shè)計.計算機系統(tǒng)應(yīng)用,2017,26(10):286–289.http://www.c-sa.org.cn/1003-3254/6007.html

      高檔數(shù)控機床與基礎(chǔ)制造裝備國家科技重大專項(2014ZX04001041)

      2017-01-17; 采用時間:2017-02-20

      猜你喜歡
      狀態(tài)機存儲器寄存器
      靜態(tài)隨機存儲器在軌自檢算法
      Lite寄存器模型的設(shè)計與實現(xiàn)
      基于有限狀態(tài)機的交會對接飛行任務(wù)規(guī)劃方法
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      存儲器——安格爾(墨西哥)▲
      基于Nand Flash的高速存儲器結(jié)構(gòu)設(shè)計
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      FPGA設(shè)計中狀態(tài)機安全性研究
      黑龍江科學(2011年2期)2011-03-14 00:39:36
      基于反熔絲FPGA的有限狀態(tài)機加固設(shè)計
      一種可重構(gòu)線性反饋移位寄存器設(shè)計
      南开区| 哈尔滨市| 榆中县| 寿宁县| 信宜市| 浑源县| 宁陕县| 临夏市| 峨山| 仙居县| 盱眙县| 铜鼓县| 大悟县| 苏尼特左旗| 永安市| 浮山县| 民丰县| 镇巴县| 吉水县| 突泉县| 澄迈县| 当阳市| 克什克腾旗| 陇南市| 高邮市| 噶尔县| 金溪县| 吴桥县| 富蕴县| 临湘市| 尉犁县| 连云港市| 望城县| 积石山| 合阳县| 苏尼特右旗| 大庆市| 太湖县| 敖汉旗| 清水县| 清流县|