基于IP核的PCI Express接口設計
現代測控系統和通信領域對數據傳輸速率的要求越來越高。相比PC 中其他技術的發展,總線技術的發展顯得相對緩慢,總線性能已經成為制約系統性能發揮的瓶頸。傳統的ISA, EISA 總線等已無法適應高速數據傳輸的要求,PCI 總線技術雖然經過了不斷的修正和發展,但是由于它固有的缺陷,使其應用領域受到限制。PCI Express 總線以其優異的性能和低廉的造價引起了業界的廣泛關注,具有廣闊的應用前景。本文介紹PCI Express 總線接口的設計方法,,并實現一個基于IP核的PCI Express 總線接口。
本文引用地址:http://www.ex-cimer.com/article/201808/387966.htm1 PCI Express 總線簡介
PCI Express 總線是Intel 公司于1997 年提出的第3 代I/O 技術,是種全新的串行總線技術。與PCI 總線相比,PCI Express 總線具有以下特點:
(1)在數據傳輸模式上,PCI Express 總線采用雙工串行傳輸模式,一條PCI Express 通道由2 對LVDS 差分線對組成:
一對負責發送,另一對負責接收,單向數據傳輸速率為2.5 Gb/s。
(2)具有很好的靈活性,一個PCI Express 物理連接可以根據實際需要配置成×1,×2,×4,×8,×16,×32 個并行的數據通
道,滿足不同設備之間通信帶寬的要求。
(3)在軟件層與PCI 總線完全兼容,原有PCI 總線的驅動程序可以完全移植到PCI Express 總線架構的系統中。
(4)串行連接采用自同步時鐘技術,時鐘內嵌于串行數據的8 bit/10 bit 編碼中,可實現數據傳輸率的自適應調整。
PCI Express 協議定義了3 層結構:物理層,數據鏈路層和事務層。每個層次按照協議中規定的內容,完成相應的數據處理功能。
2 PCI Express 接口設計方法
PCI Express 總線的接口的設計方法大體有2 種:使用專用接口芯片或者使用可以實現PCI Express 物理接口的可編程器件。
專用接口芯片實現了 PCI Express 總線的物理層、數據鏈路層和事務層的控制邏輯。例如,PEX 8311 是PLX 公司推出的第1 款本地總線到PCI Express×1 的橋接芯片,符合PCI Express 1.0 規范,支持自動極性反轉、CRC 校驗、鏈路設備電源管理,具有直接主模式、直接從模式、DMA 和數據預取等功能。
使用 PEX 8311 實現PCI Express 接口,用戶僅需實現相對簡單的本地總線接口即可,降低了開發難度。但是這種方法受限于專用接口芯片的性能,用戶無法根據自身的需求提升接口的性能。
可編程器件設計方案的基本思想是由 FPGA 實現PCI Express 的上層電路,利用Philip 公司或TI 公司提供的PHY(物理層)器件實現物理層接口,通常需要購買Xilinx 公司或Altera 公司提供的IP 核與PHY 器件配合使用。在有些FPGA 產品中,集成有PCI Express 接口的硬核模塊,可以采用相應的產品實現PCI Express 接口的功能。例如,Xilinx 公司Virtex-5 LXT/SXT/FXT/TXT 系列FPGA 器件中,集成有PCI Express 硬核端點模塊,能夠自動完成數據鏈路層和物理層的數據處理功能。采用這種方法,用戶只需要設計處理事務層數據包的邏輯電路即可。還可以根據自己的需求,設計具有特殊功能的電路結構,發揮接口的性能,但是這種方法的開發難度較大,開發周期相對較長。
3 PCI Express 接口實現
本設計采用 Xilinx 公司Virtex-5 系列xc5vlx30t 芯片,使用該芯片內部的PCI Express Endpoint 硬核端點模塊,設計了處理事務層數據的邏輯電路,實現了計算機內存與用戶邏輯之間數據的正確傳輸。其中,控制狀態機的設計和DMA 控制器的設計是重點、難點,下面詳細介紹具體的實現過程。
3.1 接口電路的設計
在接口電路中,PCI Express 物理層和數據鏈路層的電路采用Xilinx 公司的PCI Express Endpoint Block plus v1.5 硬核端點模塊實現,能夠有效完成接口物理層和數據鏈路層的數據處理功能,提供給上層一個事務層數據接口。
上層電路主要由 5 部分電路構成,分別是核配置與輔助控制模塊、數據發送控制器、數據接收控制器、數據輸入FIFO和數據輸出FIFO,如圖1 所示,最終提供給用戶FIFO 類型的用戶邏輯接口。

圖 1 PCI Express 接口電路結構
核配置與輔助控制模塊與硬核端點模塊緊密聯系,完成硬核端點模塊中通道寬度、時鐘頻率、設備號、版本號、存儲空間類型與大小等一系列可控制參數的配置與一些基本功能的控制。
硬核端點模塊提供的事務層數據接口為 64 bit 的數據發送接口和64 bit 的數據接收接口以及控制數據發送和接收的一系列控制信號接口。數據接收控制器將收到的事務層包進行解析,根據數據包的類型進行相應的處理。數據發送控制器用于將所要發送的數據按照事務層包的格式進行封裝后,發送到硬核端點模塊。
數據輸入 FIFO 和數據輸出FIFO 共同構成了數據通道,均為雙端口FIFO,用于連接PCI Express 接口和用戶邏輯。數據輸入FIFO 用于保存從接口收到的數據;用戶邏輯電路輸出的數據保存到數據輸出FIFO 中后發送到接口電路。
3.2 控制狀態機的設計
數據發送控制器和數據接收控制器負責事務層數據的封裝和解析工作,是本設計中的關鍵電路模塊。這兩個模塊均采用有限狀態機方式進行設計,下面詳細介紹這2 個模塊狀態機的設計。
接收控制器從硬核端點模塊中收到事務層包(TLP),根據TLP 的格式,第56 bit~第62 bit 為表示數據包類型的標志位。按照標志位中的信息,對TLP 的內容進行解析,進行相應的數據操作。所設計的狀態機的狀態轉換圖如圖2 所示,各個狀態的說明如表1 所示。

圖2 接收控制器狀態機

系統復位后,接收控制器狀態機處于空閑狀態,等待接收數據包,收到TLP 后跳轉到相應的狀態進行存儲器或者I/O的讀寫操作。在操作過程中,對存儲器或者I/O 的狀態進行監控,如果目標設備沒有準備好,則進入等待狀態直到目標設備就緒。在存儲器或者I/O 的讀寫操作完成后,狀態機又返回空閑狀態。在各個狀態中接收控制器產生相應的控制信號完成數據的寫入以及對發送控制器的操作。
與接收控制器狀態機相比,發送控制器狀態機相對簡單,只有3 個狀態,狀態轉換圖見圖3,各個狀態的說明見表2。

系統復位后,發送控制器狀態機處于復位狀態。當從接收控制器收到發送數據的命令后,如果需要發送的是一個載荷數據,則將從存儲器或者I/O 中取出的載荷數據填充到TLP中的相應位置后發送到端點模塊;如果需要發送的只是一個響應或者標志信息,則直接封裝成一個TLP 發送到端點模塊。
3.3 DMA 控制器的設計
由于串行總線結構與傳統的并行總線結構不同,因此存儲器的讀寫操作都是以數據包的形式傳輸。普通的讀寫操作一次最多只能進行64 bit 數據的讀寫,使得總線多數時間處于等待狀態,嚴重影響了PCI Express 總線的數據傳輸速率。本文設計出相應的DMA 控制器,實現了DMA 方式的數據傳輸。
DMA 控制器的主要電路結構為14 個與DMA 操作相關的寄存器,通過對這些控制寄存器的讀寫,設定DMA 方式數據讀寫操作的地址范圍和數據大小,完成DMA 數據讀寫操作。這些寄存器的定義和功能描述如表3 所示。

在設計了上述14 個DMA 控制寄存器后,接收控制器和發送控制器的狀態機也要進行相應的調整,以適應DMA 操作的需要。在接收控制器狀態機中加入了2 個狀態,分別用于接收數據傳輸過程中的第1 個DMA 數據包和剩余的DMA數據包。在發送控制器狀態機中也加入了2 個狀態,分別用于發送數據傳輸過程中的第1 個DMA 數據包和剩余的DMA數據包。為了達到盡可能高的數據傳輸速率,在接收和發送過程中都使用了64 bit 數據傳輸模式。
在設計了如上所述的 DMA 控制器后,PCI Express 總線接口就可以用DMA 方式進行數據的讀寫操作。進行DMA 讀/寫操作的具體過程如下:(1)寫中斷控制寄存器,打開中斷;(2)寫讀/寫地址寄存器,設置讀/寫數據的起始地址;(3)寫讀/寫包長度寄存器,設置讀/寫數據包的大小;(4)寫讀/寫包數量寄存器,設置讀/寫數據包的數量;(5)寫控制寄存器,啟動DMA 讀/寫操作;(6)等待中斷服務寄存器發出中斷;(7)收到中斷,讀中斷服務寄存器;(8)寫中斷控制寄存器,關閉中斷。
4 仿真與性能測試
使用 Verilog 語言編寫代碼實現本設計,使用Modelsim SE 6.2g 對該設計進行功能仿真。從數據寫入FIFO 的仿真波形圖中可以看到,未采用DMA 方式時,每次只能夠將一個數據寫入到FIFO 中,在2 次寫操作之間存在較長的等待時
間;采用DMA 方式時,可以根據用戶的設置連續寫入多個數據,消除了2 次操作之間的等待時間,大大提高了數據傳輸速率。
自行設計了采用Xilinx 公司xc5vlx30t 芯片的PCI Express×4 接口數據傳輸卡;使用Xilinx 公司的ISE 9.2 對設計代碼進行綜合和布局布線, 生成配置文件, 下載到xc5vlx30t 芯片中;使用DELL Precision 690 工作站,在Windows 環境下編寫測試程序對數據傳輸卡PCI Express 接口數據傳輸的速率進行測試。
采用多種數據量對 PCI Express 接口進行DMA 方式讀數據測試,得到的結果如圖4 所示,硬件層數據傳輸速率穩定在840 Mb/s。

圖4 實際測試讀數據速率
采用多種數據量對 PCI Express 接口進行DMA 方式寫數據測試,得到的結果如圖5 所示,硬件層數據傳輸速率穩定在720 Mb/s。

圖5 實際測試寫數據速率
從圖 4、圖5 可以看出,DMA 控制器有效減少了數據傳輸過程中的等待時間,大幅度地提高了數據傳輸速率,發揮了PCI Express 總線的優越性能。
5 結束語
本文采用基于 Xilinx 公司硬IP 核的方法設計實現了PCI Express 總線接口及數據的傳輸。對于DMA 控制器的設計,能提高數據傳輸的速率,使PCI Express 總線的性能得到充分發揮。
評論