張銳+曹彥榮
摘 要 PCI Express總線是一種點對點串行連接的設備連接,每個設備都擁有自己獨立的數(shù)據(jù)連接,各個設備之間并發(fā)的數(shù)據(jù)傳輸互不影響,因此具有很高的傳輸速率。本設計使用Xilinx公司FPGA提供的PCIe IP硬核實現(xiàn)PCIe接口,并針對其高帶寬的優(yōu)勢,實現(xiàn)了PCIe總線的Brust數(shù)據(jù)傳輸方案,并經(jīng)過實際傳輸驗證,表明該設計方案可以滿足傳輸帶寬的要求。
關鍵詞 PCIE;FPGA;Burst讀寫
中圖分類號:TP274 文獻標識碼:A 文章編號:1671-7597(2014)07-0029-03
PCI Express總線是一種完全不同于過去PCI總線的一種全新總線規(guī)范,與PCI總線共享并行架構相比,PCI Express總線是一種點對點串行連接的設備連接方式,點對點意味著每一個PCI Express設備都擁有自己獨立的數(shù)據(jù)連接,各個設備之間并發(fā)的數(shù)據(jù)傳輸互不影響,而對于過去PCI那種共享總線方式,PCI總線上只能有一個設備進行通信,一旦PCI總線上掛接的設備增多,每個設備的實際傳輸速率就會下降,性能得不到保證。PCI Express總線利用串行連接特點,能輕松的將數(shù)據(jù)傳輸速度提到一個很高的頻率,遠遠超出PCI總線的傳輸速率。
PCI Express是一種復雜的協(xié)議,它的實現(xiàn)可以采用專用的協(xié)議芯片,但是缺乏靈活性和可配置性,限制了系統(tǒng)整體性能。另一種方式是采用FPGA邏輯來實現(xiàn),PCIE IP硬核一般只實現(xiàn)PCIE的物理層和數(shù)據(jù)鏈路層的協(xié)議,設計者可以在IP硬核基礎上完成PCIE的TLP(數(shù)據(jù)傳輸層)和應用層協(xié)議,雖然開發(fā)過程較復雜,但可根據(jù)應用需要進行靈活的配置,具有良好的可移植性,能更好的發(fā)揮PCIE高帶寬的優(yōu)勢。
Xilinx公司的Virtex 5系列FPGA芯片內(nèi)嵌PCI Express Endpoint Block硬核,為實現(xiàn)單片可配置PCI Expres總線解決方案提供了可能。本文在研究PCI Express 接口協(xié)議和PCI Express Endpoint Block硬核的基礎上,使用Virtex5 LX330T FPGA芯片設計PCI Express接口硬件電路,實現(xiàn)PCI Express數(shù)據(jù)傳輸。
1 PCIE接口Burst讀寫設計
1)FPGA內(nèi)置PCIe硬核特點。在接口電路中,PCI Express物理層和數(shù)據(jù)鏈路層的電路采用Xilinx公司的PCI Express Endpoint Block plus v1.9硬核端點模塊實現(xiàn),能夠有效完成接口物理層和數(shù)據(jù)鏈路層的數(shù)據(jù)處理功能,提供給上層一個事務層數(shù)據(jù)接口。
圖1 設計流程圖
上層電路主要由4部分電路構成,分別是核配置與輔助控制模塊、數(shù)據(jù)發(fā)送控制器、數(shù)據(jù)接收控制器、BAR地址空間管理,如圖1所示,最終通過BAR地址空間與用戶邏輯進行交互。
各個部分的作用如下。
①Endpoint for PCIe:FPGA內(nèi)的硬核,對外負責與其他PCIe設備協(xié)議通信對內(nèi)與TX、RX模塊進行64bit并行與高速串行的轉(zhuǎn)換。
②PIO_TO_CTRL:PCIe核配置與輔助控制。
③EP_RX:負責主機單字讀寫FPGA的狀態(tài)機實現(xiàn)和Burst模式下寫操作的數(shù)據(jù)接收。
④EP_TX:負責主機單字讀FPGA的狀態(tài)機實現(xiàn)和Burst模式下讀操作的數(shù)據(jù)發(fā)送。
⑤EP_MEM:映射為PCIe空間的幾個BAR地址空間,將電子盤控制寄存器映射到閃存陣列主控,將數(shù)據(jù)區(qū)映射到雙口數(shù)據(jù)緩沖區(qū)控制器。
由于PCIe核只支持單字訪問的模式,所以需要修改數(shù)據(jù)接收控制器EP_RX、數(shù)據(jù)發(fā)送控制器EP_TX、BAR地址空間管理模塊EP_MEM,實現(xiàn)對Burst訪問模式的支持。
2)TLP數(shù)據(jù)包結構。當處理器或者其他PCIe設備訪問PCIe設備時,所傳送的數(shù)據(jù)報文首先通過事務層被封裝為一個或者多個TLP數(shù)據(jù)包,之后才能通過PCIe總線的各個層次發(fā)送出去。TLP的基本格式如圖2所示。
圖2 TLP的基本格式
一個完整的TLP由1個或者多個TLP前綴、TLP頭、數(shù)據(jù)有效負載和摘要組成。在整個數(shù)據(jù)報文中,只有TLP頭和數(shù)據(jù)有效負載需要由用戶邏輯代碼來完成,其他部分都是PCIe核自動生成的。
TLP頭是TLP最重要的標志,包含了當前TLP的總線事物類型、路由信息等一系列信息。本文主要涉及到存儲器寫和存儲器讀事務。對于32bit地址空間的存儲器讀寫請求,其TLP頭格式如圖3所示,硬核同時也支持64bit地址空間的操作。請求者通過填寫TLP頭內(nèi)的正確信息以及地址并且將數(shù)據(jù)放在TLP頭的后面發(fā)送給接收者,接收者便會解析包內(nèi)的信息將正
圖3 存儲器讀寫請求報文頭格式
確的數(shù)據(jù)放到自己的地址空間中。
對于存儲器寫請求,EP_RX控制器接收到TLP頭和數(shù)據(jù)之后,只需要通過EP_MEM模塊將數(shù)據(jù)存入寄存器或者雙口緩沖區(qū)中
即可。
對于存儲器讀請求,EP_RX控制器接收讀請求之后,需要啟動EP_TX控制器將應答數(shù)據(jù)組織在TLP完成報文中,完成讀操作。完成報文的頭格式如圖4所示。
圖4 完成報文頭格式
3)Burst寫操作的設計與實現(xiàn)。PCIe硬核的PIO模塊本身已經(jīng)支持32bit地址空間的單字存儲器讀寫請求、64bit地址空間的單字存儲器讀寫請求和IO讀寫請求。本設計主要完成對32bit地址空間Burst方式的存儲器讀寫請求的支持。同時,考慮到實際應用中DMA控制器一般只支持數(shù)據(jù)8字節(jié)對齊的情況,所以本設計也只支持數(shù)據(jù)8字節(jié)對齊的Burst讀寫訪問。
對于存儲器寫請求,實現(xiàn)的主要方法是EP_RX將接收的TLP頭中各個字段正確解析,并區(qū)分是單字寫和Burst寫,確定寫操作的數(shù)據(jù)長度,如果是單字寫,就將接下來的64位數(shù)據(jù)存入寄存器或者雙口緩沖區(qū)中;如果是Burst寫,就將數(shù)據(jù)按照64位寫入雙口緩沖區(qū)中,每個時鐘周期,地址自動增加,直到數(shù)據(jù)全部寫入雙口緩沖區(qū)中。EP_RX控制器的狀態(tài)機如圖5所示。endprint
圖5 EP_RX控制器狀態(tài)機
圖6 EP_TX控制器狀態(tài)機
4)Burst讀操作的設計與實現(xiàn)。對于存儲器讀請求,EP_RX控制器對接收到的TLP進行解析,將請求數(shù)據(jù)的起始地址和長度發(fā)送給EP_TX控制器,然后啟動EP_TX完成數(shù)據(jù)傳遞。EP_RX控制器的狀態(tài)機如圖6所示。
在PCIe總線中,一個存儲器讀請求TLP可能收到目標設備發(fā)出的多個完成報文后,才能完成一次存儲器讀操作。因為在PCIe總線中,一個存儲器讀請求最多可以請求4KB大小的數(shù)據(jù)報文,而目標設備可能會使用多個存儲器讀完成TLP才能將數(shù)據(jù)傳遞完畢。
在PCIe設備的配置空間中,Link Control寄存器的RCB(Read Completion Boundary)位決定了讀完成報文的邊界,本文設計為64B。當讀請求跨越了RCB邊界時,需要分多個完成報文才能將數(shù)據(jù)傳遞完畢。
EP_TX收到完全請求,判斷是不帶有效載荷的完成報文,還是帶有效載荷的完成報文。如果是需要帶有效載荷,并且長度大于4個字節(jié)的情況就啟動Burst讀周期。
Burst讀周期先進行合法性檢查,對于起始地址或者請求長度不是8字節(jié)對齊的請求視為無效請求,不予響應。
對于合法讀請求,EP_TX控制器按RCB邊界進行完成周期拆分,具體的算法流程如圖7所示。
①對于數(shù)據(jù)同一個RCB邊界之內(nèi)的讀請求,第一個周期完成所有數(shù)據(jù)傳遞。
②對于數(shù)據(jù)跨RCB邊界的讀請求,按RCB區(qū)段劃分讀寫周期,先完成第一個周期,使得剩余數(shù)據(jù)的起始地址按64字節(jié)對齊;接下來每個周期傳遞64字節(jié),直到數(shù)據(jù)傳遞結束;最后一個周期可能不滿64字節(jié)。
圖7 讀完成的拆分算法
2 結果與驗證
在完成FPGA的程序編寫后,用Modlesim仿真環(huán)境對程序進行仿真。用VHDL實現(xiàn)TestBench作為激勵加載單元對EP_RX和EP_TX控制器進行功能仿真驗證。在實踐中進一步使用ChipScrop抓圖,主要分析由通過EP_RX和EP_TX控制器產(chǎn)生的PCIe總線傳輸信號時序是否滿足要求。
圖8捕獲了Burst的寫過程,由波形可以看出,EP_RX控制器正確解析Burst寫數(shù)據(jù)報文,并成功寫入雙口緩沖區(qū)中。
圖8 Burst寫時序
讀操作的過程相對復雜,圖9捕獲了Burst讀過程,EP_RX控制器接收到讀請求后啟動EP_TX控制器,EP_TX控制器將主機端發(fā)起的一個存儲器讀請求分成多個存儲器讀完成報文進行數(shù)據(jù)傳輸。
圖9 Burst讀時序
經(jīng)實驗測試,如表1所示,采用Burst方式的數(shù)據(jù)傳輸,速度明顯提高,有效提高了大容量存儲系統(tǒng)的傳輸帶寬。
參考文獻
[1]PCI Express Base Spec ification, 1. 0a ed[S].PC I SIG,2003.
[2]Xilinx.LogiCORE? Endpoint v3.6 for PCI Express User Guide[M].October 10,2007.
[3]馬鳴錦,朱劍冰.PCI、PCI-X和PCI Express的原理及體系結構[M].北京:清華大學出版社,2007.
[4]李木國,黃影,劉于之.基于FPGA的PCIe總線接口的DMA傳輸設計[J].計算機測量與控制,2013(01).
[5]沈輝,張萍.FPGA在PCI Express總線接口中的應用[J].現(xiàn)代電子技術,2010(14).
[6]汪精華,胡善清.基于FPGA實現(xiàn)的PCIE協(xié)議的DMA讀寫模塊[J].微計算信息,2010,26(10).
作者簡介
張銳(1982-),女,陜西西安人,工程師,研究生,研究方向:計算機硬件設計。endprint