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

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

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



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

    物理層分為邏輯物理層和電氣物理層。邏輯物理層完成對(duì)數(shù)據(jù)包的合成分解、8 b/10 b編碼和10 b/9 b解碼、并串轉(zhuǎn)換和串并轉(zhuǎn)換;電氣物理層負(fù)責(zé)對(duì)每路串行數(shù)據(jù)差分驅(qū)動(dòng)的傳輸與接收及阻抗匹配;數(shù)據(jù)鏈路層是其中間層,主要負(fù)責(zé)鏈路管理、與數(shù)據(jù)完整性相關(guān)的功能,包括錯(cuò)誤檢測(cè)和錯(cuò)誤改正以及產(chǎn)生和處理數(shù)據(jù)鏈路層包。事務(wù)層是PCI Express架構(gòu)的上層,其主要功能是接收、緩沖和分發(fā)事務(wù)包TLP(Transaction Layer Packet)。TLP通過使用存儲(chǔ)器、I/O、配置和消息事務(wù)來傳遞信息。為了最大限度地提高器件之間的通信效率,事務(wù)層強(qiáng)制遵循符合PCIE的事務(wù)排序規(guī)則,并通過基于信用的流量控制來管理TLP緩沖空間。
 在PCI-Express系統(tǒng)中,CPU由兩種事務(wù)來訪問其架構(gòu)中的存儲(chǔ)器映射輸入輸出和配置映射輸入輸出位置。一種是程控輸入輸出(Programmed Input Output)方式,該方式在數(shù)據(jù)傳輸?shù)倪^程中需要CPU的直接參與,其速度較慢、效率較低;另一種是直接內(nèi)存訪問DMA(Direct Memory Access)方式,該方式在實(shí)現(xiàn)高速外設(shè)和主存儲(chǔ)器之間成批交換數(shù)據(jù)時(shí),不需要CPU的直接參與,而在RAM與設(shè)備之間完成傳輸時(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è)計(jì),向用戶開放事務(wù)層接口,在進(jìn)行PCI-Express相關(guān)設(shè)計(jì)時(shí),用戶只需要配置相關(guān)參數(shù)來完成物理層和數(shù)據(jù)鏈路層的設(shè)計(jì),從而只專注于事務(wù)層設(shè)計(jì)與開發(fā),縮短了產(chǎn)品的研發(fā)周期。
 本文采用總線主控DMA方式,完成了PCI Express數(shù)據(jù)事務(wù)層的接口設(shè)計(jì)。使用Verilog HDL語言編寫,實(shí)現(xiàn)了處理器內(nèi)存與用戶邏輯之間數(shù)據(jù)的高效傳輸。
1 PCI-Express數(shù)據(jù)事務(wù)層DMA方式設(shè)計(jì)
1.1 設(shè)計(jì)結(jié)構(gòu)

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

 

 

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

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

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

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

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

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

    綜上可以看出,本文的設(shè)計(jì)有效減少了數(shù)據(jù)傳輸過程中的等待時(shí)間,大幅度地提高了數(shù)據(jù)傳輸速率,充分發(fā)揮了PCI Express總線的優(yōu)越性能。
參考文獻(xiàn)
[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è)計(jì)教程[M]. 北京: 北京航空航天大學(xué)出版社, 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].北京:機(jī)械工業(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]. 北京: 清華大學(xué)出版社,2007.
 

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