基于Virtex-5的PCI-Express總線接口設(shè)計和實現(xiàn)
3 PCI-Express總線接口設(shè)計
本文的硬件主要就是單片XC5VLX50T實現(xiàn)PCI-Express總線接口,并在該FPGA內(nèi)設(shè)計具體應(yīng)用,完成PCI-Express總線接口的測試和使用。本文實現(xiàn)的應(yīng)用有如下幾個特性:
(1)主機通過控制FPGA內(nèi)部的寄存器文件來啟動和停止DMA操作,支持endpoint到root的全雙工DMA讀寫。
(2)使用LogiCORE產(chǎn)生的Endpoint Block Plus進(jìn)行PCI-Express總線接口設(shè)計。該硬核集成了PCIE協(xié)議中的物理層、數(shù)據(jù)鏈接層的解析,提供傳輸層接口(TRN)供設(shè)計者對相應(yīng)的事務(wù)層數(shù)據(jù)包的處理。
(3)PCI-Express總線接口支持x4通道的實現(xiàn),主機操作系統(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)鍵信號。
評論