《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 解決方案 > Xilinx PCI-Express核總線接口設(shè)計與實現(xiàn)

Xilinx PCI-Express核總線接口設(shè)計與實現(xiàn)

2011-10-17
作者:董永吉, 陳庶樵, 李玉峰, 李印海
來源:來源:電子技術(shù)應用2011年第8期



    隨著計算機技術(shù)的飛速發(fā)展,PCI總線已經(jīng)遠遠不能滿足當前處理器和I/O設(shè)備對帶寬的更高需求。傳統(tǒng)PCI和PCI-X[1]總線都是多點并行互連總線(即多臺設(shè)備共享一條總線),并行總線之間存在相互干擾、時鐘抖動,這些因素制約了其帶寬。PCI-SIG(Peripheral Component Interconnect Special Interest Group)推出的第三代I/O系統(tǒng)PCIE(PCI-Express)[2]能夠?qū)崿F(xiàn)兩臺設(shè)備之間點對點的串行通信,使用交換器還可實現(xiàn)多臺PCI-Express設(shè)備的互連,而且具有管腳少、帶寬高、外圍傳播能力強、兼容性能好等特點。目前,PCI-Express 1.0a發(fā)送和接收的數(shù)據(jù)速率可達2.5 Gb/s。
  類似于OSI(Open System Interconnection)網(wǎng)絡(luò)模型,PCI-Epxress引入了分層概念,層與層之間透明,各自完成獨立功能的同時又緊密聯(lián)系。PCIE總共分為三層:物理層、數(shù)據(jù)鏈路層和事務(wù)層。其層次結(jié)構(gòu)[3]如圖1所示。

    物理層分為邏輯物理層和電氣物理層。邏輯物理層完成對數(shù)據(jù)包的合成分解、8 b/10 b編碼和10 b/9 b解碼、并串轉(zhuǎn)換和串并轉(zhuǎn)換;電氣物理層負責對每路串行數(shù)據(jù)差分驅(qū)動的傳輸與接收及阻抗匹配;數(shù)據(jù)鏈路層是其中間層,主要負責鏈路管理、與數(shù)據(jù)完整性相關(guān)的功能,包括錯誤檢測和錯誤改正以及產(chǎn)生和處理數(shù)據(jù)鏈路層包。事務(wù)層是PCI Express架構(gòu)的上層,其主要功能是接收、緩沖和分發(fā)事務(wù)包TLP(Transaction Layer Packet)。TLP通過使用存儲器、I/O、配置和消息事務(wù)來傳遞信息。為了最大限度地提高器件之間的通信效率,事務(wù)層強制遵循符合PCIE的事務(wù)排序規(guī)則,并通過基于信用的流量控制來管理TLP緩沖空間。
 在PCI-Express系統(tǒng)中,CPU由兩種事務(wù)來訪問其架構(gòu)中的存儲器映射輸入輸出和配置映射輸入輸出位置。一種是程控輸入輸出(Programmed Input Output)方式,該方式在數(shù)據(jù)傳輸?shù)倪^程中需要CPU的直接參與,其速度較慢、效率較低;另一種是直接內(nèi)存訪問DMA(Direct Memory Access)方式,該方式在實現(xiàn)高速外設(shè)和主存儲器之間成批交換數(shù)據(jù)時,不需要CPU的直接參與,而在RAM與設(shè)備之間完成傳輸時,該方式可減少CPU的占用率,大大提高了數(shù)據(jù)的吞吐率,使系統(tǒng)的性能大幅度提升。DMA方式有兩種類型:第三方DMA(third-party DMA)和第一方DMA(first-party DMA)或稱總線主控DMA(Bus-mastering DMA)。第三方DMA通過系統(tǒng)主板上的DMA控制器的仲裁來獲得總線和傳輸數(shù)據(jù)。而第一方DMA則完全由接口卡上的邏輯電路來完成,與快取內(nèi)存結(jié)合在一起,提高了數(shù)據(jù)的存取及傳輸性能。
    Xilinx公司Virtex-5系列FPGA提供了PCIE的IP核[4-5],支持以上幾種事務(wù)訪問方式,在核中固化了物理層和數(shù)據(jù)鏈路層的相關(guān)設(shè)計,向用戶開放事務(wù)層接口,在進行PCI-Express相關(guān)設(shè)計時,用戶只需要配置相關(guān)參數(shù)來完成物理層和數(shù)據(jù)鏈路層的設(shè)計,從而只專注于事務(wù)層設(shè)計與開發(fā),縮短了產(chǎn)品的研發(fā)周期。
 本文采用總線主控DMA方式,完成了PCI Express數(shù)據(jù)事務(wù)層的接口設(shè)計。使用Verilog HDL語言編寫,實現(xiàn)了處理器內(nèi)存與用戶邏輯之間數(shù)據(jù)的高效傳輸。
1 PCI-Express數(shù)據(jù)事務(wù)層DMA方式設(shè)計
1.1 設(shè)計結(jié)構(gòu)

 DMA方式硬件結(jié)構(gòu)如圖2所示,采用自頂向下設(shè)計方法[6-8],將FPGA內(nèi)部邏輯劃分為7個模塊。

 

 

    (1)PCIE核接口模塊:該模塊完成與Xinlinx PCIE核接口信號的對接及對PCIE核的初始化配置。
 (2)發(fā)送引擎模塊:該模塊按照PCI-ExpressTM Base
Specification Revision 1.0a協(xié)議將待發(fā)送的數(shù)據(jù)和寄存器信息封裝成事務(wù)包(TLP)傳輸?shù)絇CIE核接口模塊。
 (3)接收引擎模塊:該模塊按照協(xié)議將從PCIE核接口模塊接收下來的事務(wù)包解封裝,并根據(jù)TLPs的頭標中的信息將數(shù)據(jù)分流,分別寫入接收控制寄存器或是接收FIFO中。
 (4)DMA控制模塊:DMA控制寄存器由中斷原因寄存器、接收控制寄存器和發(fā)送控制寄存器構(gòu)成。中斷原因寄存器中存放中斷產(chǎn)生的原因。接收控制寄存器用來接收存放內(nèi)存讀請求MRd(Memory Read Request)操作的DMA控制信息,包括內(nèi)存讀請求地址寄存器、讀長度寄存器、讀包數(shù)寄存器、讀完成包數(shù)寄存器。發(fā)送控制寄存器用來存儲內(nèi)存寫請求MWR(Memory Write Request)的DMA控制信息,包括內(nèi)存寫請求地址寄存器、寫長度寄存器和寫包數(shù)寄存器。
 (5)輸入輸出緩存模塊:為了提高數(shù)據(jù)傳輸率、處理大量數(shù)據(jù)流、匹配具有不同傳輸率的系統(tǒng)以及緩存數(shù)據(jù)以備處理,利用了兩個獨立的FIFO數(shù)據(jù)通道。一個用于PCIE發(fā)送引擎模塊到用戶邏輯模塊傳輸數(shù)據(jù)時的緩存(稱為發(fā)送FIFO);另一個用于用戶邏輯模塊到PCIE接收引擎模塊傳輸數(shù)據(jù)時的緩存(稱為接收FIFO)。
 (6)用戶邏輯模塊:配置和讀取DMA控制寄存器及控制數(shù)據(jù)的輸入輸出。用戶邏輯通過讀取寄存器的值來控制中斷和數(shù)據(jù)的傳輸。
 (7)用戶接口模塊:提供用戶簡單的數(shù)據(jù)接口通道和控制信號,屏蔽復雜的控制操作并簡化用戶操作。
1.2 設(shè)計流程
1.2.1 DMA狀態(tài)流程

 (1)DMA狀態(tài)機如圖3所示,由如下幾個狀態(tài)組成:

 空閑狀態(tài):狀態(tài)機無數(shù)據(jù)傳輸時默認保持在該狀態(tài),當寫請求信號有效時,狀態(tài)機轉(zhuǎn)入寫配置請求狀態(tài);當讀請求信號有效時,狀態(tài)機轉(zhuǎn)入讀請求狀態(tài);當滿足中斷觸發(fā)條件時,狀態(tài)機轉(zhuǎn)入中斷申請狀態(tài)。
 (2)寫配置請求狀態(tài):通過該狀態(tài)FPGA將本次傳輸發(fā)送的數(shù)據(jù)長度及TLPs包數(shù)等信息發(fā)送給處理器,為大規(guī)模的數(shù)據(jù)傳輸做好準備。
 (3)寫發(fā)送數(shù)據(jù)狀態(tài):控制完成FPGA和HOST內(nèi)存之間的大規(guī)模數(shù)據(jù)傳輸。
 (4)讀請求狀態(tài):根據(jù)控制寄存器中的相關(guān)信息,發(fā)出數(shù)據(jù)的讀請求事務(wù)。
 (5)中斷申請狀態(tài):當硬件發(fā)送和接收的數(shù)據(jù)傳輸完畢或是空閑等待時間滿足一定觸發(fā)條件時,狀態(tài)機會在保存現(xiàn)場之后跳轉(zhuǎn)到中斷申請狀態(tài)。該狀態(tài)向處理器發(fā)出中斷申請,同時根據(jù)產(chǎn)生中斷的原因相應地置位中斷原因寄存器。
 (6)中斷響應狀態(tài):當處理器響應中斷后,硬件狀態(tài)機同步轉(zhuǎn)入中斷完成狀態(tài),同時清空中斷原因寄存器中相應的位,恢復中斷前的現(xiàn)場環(huán)境。
1.2.2 存儲器寫傳輸流程
 存儲器寫傳輸有兩種情況:FPGA發(fā)送存儲器寫請求至HOST內(nèi)存和HOST內(nèi)存發(fā)送存儲器寫請求至FPGA,即FPGA接收存儲器的寫請求。
    FPGA發(fā)送存儲器寫請求TLPs流程如圖4(a)所示。首先,用戶接口模塊將待發(fā)送的數(shù)據(jù)依次傳送到發(fā)送FIFO中,同時通過用戶邏輯模塊在發(fā)送控制寄存器中配置該次傳輸?shù)男畔?,包括存儲器寫請求的目的地址、本次傳輸?shù)據(jù)的長度和本次傳輸?shù)目俆LPs包數(shù)。其次,當發(fā)送FIFO中待發(fā)送的數(shù)據(jù)準備就緒時,開始發(fā)送FIFO中數(shù)據(jù)。當用戶接口模塊待發(fā)送數(shù)據(jù)全部傳輸完畢之后,F(xiàn)PGA發(fā)出中斷請求通知處理器傳輸完畢,處理器響應中斷后,一次完整的存儲器寫請求事務(wù)結(jié)束。
 只要FPGA的接收FIFO中數(shù)據(jù)未溢出,即可接收HOST內(nèi)存的MWr TLPs。接收引擎模塊根據(jù)接收到的TLP頭表中類型和格式字段的編碼判斷其類型,按照協(xié)議規(guī)定的格式解開其封裝,發(fā)送數(shù)據(jù)到接收FIFO中,進而傳送到用戶接口模塊。整個傳輸流程如圖4(b)所示。

1.2.3 存儲器讀/完成傳輸流程
 存儲器讀/完成傳輸有兩種情況:FPGA發(fā)送存儲器讀請求和接收帶數(shù)據(jù)的完成返回包CPLD(Completion with Data);FPGA接收存儲器讀請求和發(fā)送帶數(shù)據(jù)的完成返回包。
 FPGA發(fā)送存儲器讀請求MRd TLPs和接收CPLD TLPs流程如圖5(a)所示,只要接收FIFO沒有溢出,F(xiàn)PGA即可發(fā)起存儲器讀事務(wù)。每次發(fā)出MRd請求之前,需要通過用戶邏輯模塊在接收控制寄存器中配置該次傳輸需要讀取的信息,包括內(nèi)存讀請求的源地址、本次接收數(shù)據(jù)的長度和本次接收的總TLPs包數(shù)。HOST內(nèi)存從MRd頭信息中獲知本次事務(wù)要讀取設(shè)備存儲空間的地址和長度,并根據(jù)此發(fā)送CPLD到FPGA。接收引擎模塊根據(jù)協(xié)議包格式在CPLD中提取出承載的數(shù)據(jù),并將數(shù)據(jù)傳送到用戶接口模塊。當請求的數(shù)據(jù)全部接收完畢之后,F(xiàn)PGA發(fā)出中斷請求通知處理器傳輸完畢,處理器響應中斷后,一次完整的存儲器讀請求事務(wù)結(jié)束。
 當FPGA接收MRd和發(fā)送CPLD TLP時,接收引擎模塊根據(jù)接收到的MRd攜帶的信息,從存儲空間中讀取數(shù)據(jù)到發(fā)送FIFO中,當發(fā)送FIFO中的數(shù)據(jù)準備就緒后,F(xiàn)PGA開始發(fā)送CPLD,直到全部被讀取的數(shù)據(jù)都發(fā)送完畢后,結(jié)束本次數(shù)據(jù)傳輸。整個傳輸流程如圖5(b)所示。

2 硬件驗證
 本文使用Verilog HDL語言編寫代碼輸入、代碼調(diào)試、功能仿真、綜合、布局布線后,再進行仿真、時序分析和驗證,最后下載到Xilinx公司的XCVSX50T芯片中,使用ChipScope對設(shè)計進行硬件分析和驗證。采用聯(lián)想天啟M430E電腦搭建測試環(huán)境,在Windows XP系統(tǒng)下編寫測試代碼對PCI Express接口數(shù)據(jù)傳輸?shù)乃俾蔬M行測試。測試過程分為兩個步驟:(1)對該設(shè)計功能的正確性進行驗證;(2)對該設(shè)計的傳輸性能進行測試與分析。
2.1 功能驗證
 首先對FPGA發(fā)送MWr事務(wù)進行驗證。設(shè)定每個TLP負載定長為32個長字,配置FPGA用戶接口模塊每次發(fā)送100 TLPs,總共要發(fā)送12 800 B數(shù)據(jù)。用ChipScope截取TLPs的時序如圖6所示。其次對FPGA發(fā)送MRd,接收CPLD事務(wù)進行驗證,配置FPGA用戶接口模塊從HOST內(nèi)存中每次讀取100 TLPs,每個TLP的負載定長為32個長字,F(xiàn)PGA共要接收12 800 B數(shù)據(jù)。用ChipScope截取TLPs的時序如圖7所示。
  通過對圖6、圖7的時序分析表明,該設(shè)計能夠?qū)崿F(xiàn)PCI-Express事務(wù)層功能,可以正常進行事務(wù)層上的會話,滿足PCI-ExpressTM Base Specification Revision 1.0a協(xié)議,證明了本設(shè)計功能的可讀性和可靠性。

2.2 性能分析
    測試中PCI-Express采用了X4通道,每個通道最大傳輸速率為2.5 Gb/s,理論最大的帶寬可以達到10 Gb/s,但由于PCI-Express采用了8 b/10 b編碼,所以實際傳輸?shù)挠行挒? Gb/s。圖8為HOST內(nèi)存與FPGA之間的傳輸速率,實際測試中,F(xiàn)PGA傳輸數(shù)據(jù)到HOST內(nèi)存的速率穩(wěn)定后達到0.9 GB/s(7.2 Gb/s),達到理論帶寬的90%;HOST內(nèi)存?zhèn)鬏敂?shù)據(jù)到FPGA的速率穩(wěn)定后達到0.96 GB/s(7.6 Gb/s),達到理論帶寬的96%。

    綜上可以看出,本文的設(shè)計有效減少了數(shù)據(jù)傳輸過程中的等待時間,大幅度地提高了數(shù)據(jù)傳輸速率,充分發(fā)揮了PCI Express總線的優(yōu)越性能。
參考文獻
[1] PCI Special Interest Group PCI local bus specification 2.3[S]. 2002.
[2] PCI Special Interest Group.PCI-ExpressTM base specification Revision 1.0a base[S]. 2003.
[3] BUDRUD R, ANDERSON D, SHANLEY T. PCI express system architecture[M]. MindShare, Inc, 2003.
[4] XILINX Inc. Virtex-5 Integrated Endpoint Block for PCI Express Designs[R]. 2009.
[5] XILINX Inc. LogiCORE? IP endpoint block plus v1.14 for PCI Express[R]. 2010.
[6] 夏宇聞. Verilog數(shù)字系統(tǒng)設(shè)計教程[M]. 北京: 北京航空航天大學出版社, 2008.
[7] HALL S H, HALL G W, MCCALL J A. High-speed digital system design a handbook of interconnect theory and design practices[M].北京:機械工業(yè)出版社,2000.
[8] JOHNSON H, GRAHAM M. High-speed digital design: a handbook of black magic[M]. 北京: 電子工業(yè)出版社,2010.
[9] HYUN E, Seng Kwangsu. Design and verification for PCI express controller[C]. ICITA'05, 2005:581-586.
[10] 馬鳴錦,朱劍冰,何紅旗,等. PCI、PCI-X和PCI Express的原理及體系結(jié)構(gòu)[M]. 北京: 清華大學出版社,2007.
 

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。