本次的工作是完成剛流片的FPGA中PCIe IP核的bring up,也就是芯片的中PCIe的第一個使用者,將PCIe IP核正常使用起來,並配合公司的EDA團隊,完成PCIe IP核到用戶的呈現。
經過兩個月的調試和文檔閱讀,對PCIe也有了初步的認識,對於PCIe的學習主要來自3個方面:
1、 王齊老師的《PCI Express 體系結構導讀》和王齊老師的博客http://blog.sina.com.cn/s/blog_6472c4cc0100qbvp.html。非常感謝王齊老師的書,對於學習PCIe協議無疑是最佳的學習資料。
2、《PCI Express Base Specification 3.0》PCIe的標准協議。
3、 Synopsys公司提供 PCIe ip相關的data sheet。
以下是對PCIe建立鏈接過程的記錄,主要針對Sysnosys 的PCIe的IP,但是同時應該也有普遍的適用性:
1.1 端口身份的識別
該部分是PCIe 底層Core識別PCIe端口的過程,PCIe總線中的有3中角色:RC(root complex)、EP(end point)、switch。他們在PCIe總線中拓撲結構如下圖所示:
經過兩個月的調試和文檔閱讀,對PCIe也有了初步的認識,對於PCIe的學習主要來自3個方面:
1、 王齊老師的《PCI Express 體系結構導讀》和王齊老師的博客http://blog.sina.com.cn/s/blog_6472c4cc0100qbvp.html。非常感謝王齊老師的書,對於學習PCIe協議無疑是最佳的學習資料。
2、《PCI Express Base Specification 3.0》PCIe的標准協議。
3、 Synopsys公司提供 PCIe ip相關的data sheet。
以下是對PCIe建立鏈接過程的記錄,主要針對Sysnosys 的PCIe的IP,但是同時應該也有普遍的適用性:
1.1 端口身份的識別
該部分是PCIe 底層Core識別PCIe端口的過程,PCIe總線中的有3中角色:RC(root complex)、EP(end point)、switch。他們在PCIe總線中拓撲結構如下圖所示:
PCIe的IP Core在上電后首要的任務就是通過外部的IO或者寄存器,識別自身在PCIe的系統中扮演的角色,不同的角色也決定其在后續的過程中不同的啟動和配置流程。
作為用戶,在例化這個IP核時,需要做的第一個事情就是通過接口配置PCIe的device_type。
1.2 關注時鍾與復位
在使用PCIe的IP時,再需要關注的是該內核的時鍾和復位過程。可能作為用戶,該過程硬件已經幫你做完了,但是也最最好熟悉一下結構和流程,並確保core的內部時鍾已經啟動,復位已經成功。
在實際的應用過程中,測試的第一步就是將PCIe core的時鍾拉到芯片外部進行測試。
1.3 Disable PCIe的LTSSM的狀態機
LTSSM(Link Training and Status State Machine )是PCIe最為核心的一個狀態機,PCIe總線在進行鏈路訓練時,將使用LTSSM狀態機。而在啟動LTSSM之前,用戶一般需要進行參數的配置,所以在Core啟動后,先會將LTSSM狀態機disable。
1.4 通過DBI配置參數
該部分是配置PCIe參數的部分,DBI(data bus interface)是synopsys定義的訪問PCIe寄存器的接口,PCIe協議規定了兩種配置空間:PCI Configuration Space和 PCIe Extend configuration Space。而往往IP的生成商,會加入一個屬於自己的配置空間,synopsys添加的配置空間為:Port
logic Synosys Register。
其中PCI Configuration Space中主要由:PCI configuration header、PCI Power Management Capability、PCI Express Capability 、MSI Capability、MSI-X Capability VPD Capability組成。
PCI configuration header:提供了關於Vendor ID和Device ID等信息,其中比較重要的是Base Address Register(BAR),該寄存器設計到PCIe設備的地址空間的分配。
PCI Power Management Capability:該部分是系統電源管理的寄存器,這些Capability一般都會包含一個Status寄存器、一個Control寄存器、一個Capability寄存器。其中control寄存器通常是需要用戶配置的,而Capability主要是供用戶訪問,以知道當前部分的參數設置的情況,而status寄存器是提供用戶訪問,以獲得當前部分(比如電源)的具體的狀態。
PCI Express Capability:該結構存放了一些和PCIe總線相關的信,包括PCIe鏈路和插槽的信息。
MSI、MSI-X:為中斷控制的capability,與Power Management capability寄存器的結構是類似的。
PCIe Extend configuration Space是PCIe設備獨有的,PCI設備並不支持該結構,實際上絕大多數的PCIe設備也不支持該結構。
Port logic SynosysRegister:是synopsys公司針對自身的IP,定義的與接口相關的寄存器,該部分寄存器多與物理層相關。
在此時的測試過程中,以進行Loopback測試為例,主要需要設置的參數包括PCI configurationheader和Port logicSynosys Register。
1、 Set the PIPE Loopback Enable bit
2、 Set the Loopback Enable bit
3、 設置BAR地址分配寄存器。
1.5 啟動LTSSM
app_ltssm_enable=1;LTSSM狀態機的跳轉如下圖所示,而當狀態機進入Loopback狀態機后,表示PCIe工作正常。
1.6 檢測LTSSM狀態機
檢測LTSSM狀態的方式有兩種:
1、 通過Port logic Synosys Register中寄存器Debug Register 0中的最低6bit查詢
2、 通過cxpl_debug_info IO直接查詢。
在確認LTSSM狀態機進入Loopback之后,用戶需要查詢數據鏈路層的狀態,通過PCI ExpressCapability register中的 Link status Register 的Data Link Layer Active位,可以確認PCIe數據鏈路層正常工作,用戶可以進行TLP包的發送與接收。