<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Virtex-5的PCI-Express總線接口設(shè)計和實現(xiàn)

          基于Virtex-5的PCI-Express總線接口設(shè)計和實現(xiàn)

          作者: 時間:2011-04-06 來源:網(wǎng)絡(luò) 收藏


          3
          本文的硬件主要就是單片XC5VLX50T,并在該FPGA內(nèi)具體應(yīng)用,完成的測試和使用。本文的應(yīng)用有如下幾個特性:
          (1)主機通過控制FPGA內(nèi)部的寄存器文件來啟動和停止DMA操作,支持endpoint到root的全雙工DMA讀寫。
          (2)使用LogiCORE產(chǎn)生的Endpoint Block Plus進(jìn)行PCI-Express總線接口。該硬核集成了PCIE協(xié)議中的物理層、數(shù)據(jù)鏈接層的解析,提供傳輸層接口(TRN)供設(shè)計者對相應(yīng)的事務(wù)層數(shù)據(jù)包的處理。
          (3)PCI-Express總線接口支持x4通道的,主機操作系統(tǒng)為嵌入式Linux 2.6.10系統(tǒng)。在Windows XP下也進(jìn)行PCI-Express接口測試。
          FPGA是整個設(shè)計的最關(guān)鍵部分,主要實現(xiàn):PCI-Express硬核;在硬核的用戶接口和傳輸接口實現(xiàn)PCI-Express傳輸本地總線的時序邏輯;并且在其內(nèi)部完成DMA控制時序邏輯。FPGA是PCI-Express總線接口和應(yīng)用模塊數(shù)據(jù)傳輸?shù)耐ǖ?。在Host端使用嵌入式的MPC8548作為主機系統(tǒng)應(yīng)用CPU,設(shè)計相應(yīng)的驅(qū)動和應(yīng)用程序配合FPGA內(nèi)部代碼的調(diào)試。圖4為該系統(tǒng)的拓?fù)淇驁D。

          本文引用地址:http://www.ex-cimer.com/article/150893.htm


          使用LogiCORE產(chǎn)生的Endpoint Block Plus中,定義了兩個基地址memory空間,一個用于DMA寄存器的操作,一個用于用戶邏輯空間。本文主要介紹的就是用戶應(yīng)用層接口的實現(xiàn),該接口將通過TRN進(jìn)行相應(yīng)的事務(wù)層數(shù)據(jù)包的處理。
          用戶應(yīng)用層接口主要包括如下幾個模塊:a.TX Engine模塊;b.RX Engine模塊;c.Egress Data Presenter模塊;d.Read Request Wrapper模塊;e.DMA Control/Status Registers模塊。這幾個模塊之間的拓?fù)潢P(guān)系如圖5所示。


          TX Engine:該模塊主要用于產(chǎn)生和發(fā)送事務(wù)層數(shù)據(jù)包:Posted事務(wù)包(存儲器、I/O、配置讀寫事務(wù))、non_Posted事務(wù)包(該總線事務(wù)包分兩步進(jìn)行,首先是發(fā)送端向接收端提交總線讀寫請求,之后接收端再向發(fā)送端發(fā)送完成包)和completion(完成)包。該模塊通過發(fā)送posted memory寫,non_Posted memory讀,和接收completion包來完成DMA的讀寫請求。該模塊的啟動由DMA Control/Status Registers模塊控制。該模塊又包括若干子模塊:posted packet generator模塊、non posted packet generator模塊、completion packet generator模塊和transmit TRN state machine模塊,上述三個generator模塊均由transmit TRN狀態(tài)機模塊控制,該狀態(tài)機的控制信號來自Endpoint Block Plus核以及DMA Control/StatusRegisters模塊。
          RX Engine:該模塊主要用于接收Endpoint BlockPlus模塊從RX TRN接口送出的事務(wù)層數(shù)據(jù)包,對不同的事務(wù)包進(jìn)行解析,根據(jù)相應(yīng)的包做相應(yīng)的處理,該模塊能處理如下三種事務(wù)包:完成包、memory讀包和memory寫包。該模塊又包括如下子模塊:接收TRN狀態(tài)機模塊、接收TRN監(jiān)控模塊、接收數(shù)據(jù)狀態(tài)機模塊以及兩個fifo用于存放完成包的接收數(shù)據(jù)和完成包中目的和源的地址以及數(shù)據(jù)包的長度,用于設(shè)置DMA Control/Status Registers模塊中的各個狀態(tài)。接收TRN狀態(tài)機模塊只負(fù)責(zé)TRN接口處的數(shù)據(jù)包的狀態(tài)和接收收據(jù),送給后面的模塊;接收TRN監(jiān)控模塊負(fù)責(zé)根據(jù)不同的TLP包來分配數(shù)據(jù)和狀態(tài),是直接將帶數(shù)據(jù)的完成包的數(shù)據(jù)寫到用戶應(yīng)用接口fifo,還是讀請求或?qū)懻埱骉LP包通知TX engine,組成相應(yīng)的包發(fā)送出去或者通知DMA控制器進(jìn)行相應(yīng)的DMA傳送控制;接收數(shù)據(jù)狀態(tài)機模塊對接收到的數(shù)據(jù)進(jìn)行相應(yīng)的處理。
          Egress Data Presenter:該模塊是專門為TX Engine模塊提供發(fā)送數(shù)據(jù)的模塊,要發(fā)送到主機的數(shù)據(jù)都在該模塊中進(jìn)行處理,它和TX Engine模塊間的數(shù)據(jù)位寬定義為64bit。
          Read Request Wrapper:該模塊主要用于TX Engine模塊和RX Engine模塊之間的通信控制接口,本文中設(shè)計DMA的讀寫操作每包可能的數(shù)據(jù)長度為:1KDW、2KDW、3KDW、4KDW、8 KDW、16 KDW之間可選。該選擇是由主機通過寫寄存器文件來進(jìn)行長度策略選擇的。
          DMA Control/Status Register:該模塊主要用于主機系統(tǒng)通過控制FPGA內(nèi)部的寄存器文件的設(shè)置來啟動和停止endpoint到root的DMA讀寫操作。包括一個控制寄存器以及若干個配置寄存器,配置寄存器有主機的目的地址、源地址信息,本地的目的地址、源地址信息,以及每次DMA的數(shù)據(jù)包長度等信息。由控制寄存器中的bit位的狀態(tài)來啟動所有的狀態(tài)機的控制,所以控制寄存器是整個操作的關(guān)鍵信號。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();