基于Wishbone和端點(diǎn)IP的PCIE接口設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:介紹了FPGA內(nèi)嵌的PCI Express硬核端點(diǎn)模塊和Wishbone片上總線規(guī)范。應(yīng)用VHDL語言,編程實(shí)現(xiàn)了Wishbone總線的主從端口,以及TLP包的編碼和解碼功能。在FPGA上運(yùn)行程序并使用Chipscope測試時(shí)序波形,驗(yàn)證了接口數(shù)據(jù)傳輸?shù)姆€(wěn)定性和正確性。
關(guān)鍵詞:PCI Express總線;FPGA;PCIE端點(diǎn)模塊;Wishbone
0 引言
當(dāng)前,基于FPGA實(shí)現(xiàn)PCI Express接口有兩種方案,一是采用第三方PHY接口器件和FPGA實(shí)現(xiàn);二是采用集成GTP的FPGA來實(shí)現(xiàn)。集成GTP的FPGA實(shí)現(xiàn)PCI Express接口在鏈路效率、兼容性測試及資源可用性等方面有其獨(dú)特的優(yōu)勢。隨著技術(shù)的發(fā)展和對傳輸數(shù)據(jù)速率和靈活性要求的提高,將更加趨于利用高性能FPGA(即集成GTP的FPGA)來實(shí)現(xiàn)PCIExpress接口功能。但是,要在FPGA上實(shí)現(xiàn)PCI Express通信橋接,還需要用戶根據(jù)PCI Express協(xié)議構(gòu)建自己的軟IP或者向第三方或FPGA供應(yīng)商購買IP核。構(gòu)建IP核的難題在于其難度較大且開發(fā)周期較長;向第三方或FPGA供應(yīng)商購買的IP,存在專利費(fèi)用問題。對于一些驗(yàn)證性開發(fā),其重點(diǎn)一般在于應(yīng)用功能的實(shí)現(xiàn),而希望公共模塊(如PCI Express接口)的開發(fā)在滿足性能的前提下,盡量少花時(shí)間和費(fèi)用,從而縮短開發(fā)周期和成本。因此,利用已有可獲取資源,實(shí)現(xiàn)PCI Express接口成為這類開發(fā)中的首選。
Xilinx的V5/V6系列FPGA芯片中已集成了硬核端點(diǎn)的PCI Express模塊,提供了PCI Express接口的底層配置,相當(dāng)于提供了一個(gè)專用協(xié)議與PCI Express之間的橋梁。在PCI Express硬核端點(diǎn)上集成片上總線,實(shí)現(xiàn)PCI Express與應(yīng)用模塊互聯(lián),將能更快地實(shí)現(xiàn)PCI Express接口的開發(fā)。
目前比較常見的片上總線規(guī)范有IBM公司的CoreConnect,ARM公司的AMBA和Silicore Corp公司的Wishbone。CoreConnect和AMBA規(guī)范復(fù)雜,在設(shè)計(jì)中需要建立連接橋以連接不同IP核。相對于其他兩種接口規(guī)范,Wishbone接口規(guī)范具有簡單、高效、易于實(shí)現(xiàn)等特點(diǎn),而且完全免費(fèi)。因此,本文采用Wishbone總線規(guī)范實(shí)現(xiàn)PCI Exprpess接口。
1 Wishbone基本原理、Xilinx集成端點(diǎn)IP及TLP包結(jié)構(gòu)
1.1 Wishhone的基本原理
Wishbone最先是由Silicore公司提出的,現(xiàn)在己被移交給OpenCores組織維護(hù)。其開放性、簡單性和靈活性受到廣大設(shè)計(jì)者的青睞,現(xiàn)在己有不少的用戶群體,特別是一些免費(fèi)的IP核,采用Wishbone標(biāo)準(zhǔn)。除了具備地址/數(shù)據(jù)總線寬度可變、互聯(lián)結(jié)構(gòu)可變及仲裁機(jī)制靈活等片上總線的共同特點(diǎn)外,Wishhone還包括以下特征:
(1)支持點(diǎn)到點(diǎn)、共享總線、十字交叉和基于交換結(jié)構(gòu)的互聯(lián);
(2)支持常用的總線數(shù)據(jù)傳輸協(xié)議,如單字節(jié)讀寫周期、塊傳輸周期、控制操作及其他的總線事務(wù)等;
(3)主/從結(jié)構(gòu),支持多控制器和64位地址空間,從端部分地址解碼;握手協(xié)議使得每個(gè)核都可以控制數(shù)據(jù)的傳輸速度;
(4)用戶自定義標(biāo)記(TAG),確定數(shù)據(jù)傳輸類型、中斷向量等;
(5)接口簡單、緊湊,總線實(shí)現(xiàn)的邏輯單元少。
Wishhone采用主端(Master)和從端(Slave)的架構(gòu)。主端模塊發(fā)出數(shù)據(jù)傳送請求,然后通過一個(gè)接口網(wǎng)絡(luò)和從端進(jìn)行數(shù)據(jù)交換,其系統(tǒng)結(jié)構(gòu)如圖1所示。這個(gè)接口網(wǎng)絡(luò)稱之為INTERCON,各終端之間訪問通過INTERCON,INTERCON內(nèi)部可根據(jù)訪問情況采用不同的互連方式,Wishbone將它稱為可變互聯(lián)網(wǎng)絡(luò)??勺兓ヂ?lián)網(wǎng)絡(luò)的連接形式有點(diǎn)對點(diǎn)、數(shù)據(jù)流、共享總線和交叉總線等。
Wishbone可變的互連方式允許系統(tǒng)設(shè)計(jì)工程師可以采用不同的IP核互連方式,以滿足不同場合的要求。根據(jù)需要,本設(shè)計(jì)采用點(diǎn)對點(diǎn)的總線互連方式。圖2給出了點(diǎn)對點(diǎn)的MASTER/SLAVE主從接口圖。其中SYSCON為產(chǎn)生時(shí)鐘和復(fù)位信號,TAGN為用戶自定義信號。
Wishbone數(shù)據(jù)傳輸?shù)奈帐謾C(jī)制如圖3所示。準(zhǔn)備傳輸數(shù)據(jù)時(shí),Master設(shè)置STB_O輸出信號為有效(Wishbone設(shè)置高電平為有效電平),表示開始對Slave進(jìn)行訪問;當(dāng)接收完數(shù)據(jù),Master的ACK_I信號接收到Slave發(fā)出的完成信號,然后Master取消STB_O信號。Slave可以置RTY_O為高,表示Slave現(xiàn)在忙,以后再試;還可以置ERR_O為高,表示出錯(cuò)。在Master和Slave傳輸數(shù)據(jù)期間,兩端都可以控制數(shù)據(jù)的傳輸速度。
1.2 Xilinx集成硬核端點(diǎn)IP結(jié)構(gòu)
Xilinx的端點(diǎn)IP符合PCIe協(xié)議V1.1,集成了PCI Express協(xié)議中的物理層(PHY)、數(shù)據(jù)鏈接層(DLL)和傳輸層(TLL),其結(jié)構(gòu)框圖如圖4所示,包含有以下幾個(gè)接口:時(shí)鐘及復(fù)位接口;事務(wù)層接口;管理接口;緩存接口;收發(fā)器接口;配置和狀態(tài)接口。
事務(wù)層接口,與用戶應(yīng)用設(shè)計(jì)連接。在本次設(shè)計(jì)中連接到Wishbone從接口。
時(shí)鐘及復(fù)位接口,包含DCM所需的反饋時(shí)鐘。在本次設(shè)計(jì)中系統(tǒng)參考時(shí)鐘為100 MHz,用戶時(shí)鐘為62.5MHz。
收發(fā)器接口,與GTP相連。包含多條發(fā)送和接收鏈路,每條鏈路包含一對發(fā)送和一對接收信號,發(fā)送和接收信號都是差分信號,本文采用X1。
緩存接口,與事務(wù)層和數(shù)據(jù)鏈路層相連。用來實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)木彌_。這三個(gè)緩存器已在CORE Generator中進(jìn)行了例化和配置。Block RAM數(shù)據(jù)通路為64位寬。三個(gè)Block RAM接口均與端點(diǎn)模塊的其余部分同步運(yùn)行。每個(gè)接口都具備單獨(dú)的讀寫地址、數(shù)據(jù)和控制信號。
管理接口,用于訪問端點(diǎn)模塊中的各種寄存器和信號,包括PCI Express配置空間、各種控制和狀態(tài)寄存器。管理接口還包含用于統(tǒng)計(jì)數(shù)據(jù)和監(jiān)測的輸出信號以及一個(gè)讀取流量控制信用輸出的接口。
配置及狀態(tài)接口包含控制和狀態(tài)、錯(cuò)誤、后端接口配置以及中斷端口。
收發(fā)器接口、存儲器接口以及時(shí)鐘和復(fù)位接口在CORE Generator封裝中自動(dòng)連接。這些接口在封裝之外均不可見。
1.3 TLP包結(jié)構(gòu)
PCI Express協(xié)議是基于TLP包傳輸?shù)模赑CIExpress設(shè)備之間傳輸?shù)腡LP結(jié)構(gòu)如圖5所示。數(shù)據(jù)發(fā)送時(shí),來自軟件層/核心設(shè)備的核心信息包括頭以及數(shù)據(jù)部分(某些TLP不包含數(shù)據(jù)),經(jīng)事務(wù)層添加摘要部分,發(fā)往數(shù)據(jù)鏈路層后附加序列號及LCRC,最后在物理層添加幀開始及結(jié)束標(biāo)志后發(fā)送;數(shù)據(jù)接收時(shí),逐層去掉附加部分,最后將頭及數(shù)據(jù)部分送至軟件層/核心設(shè)備。
在每個(gè)頭中含有類型及格式兩個(gè)字段,它們定義頭剩余部分的格式,用來指定事務(wù)的類型、頭的大小、數(shù)據(jù)有效載荷是否存在等。事務(wù)(在PCI Express請求者和完成者之間進(jìn)行的操作)包括存儲器事務(wù)、I/O事務(wù)、配置事務(wù)和消息事務(wù)。事務(wù)分為三個(gè)類別:posted(不需要響應(yīng),不需要返回完成包,存儲器寫和消息屬于此類事務(wù)),非posted(需要響應(yīng))和完成包。
本文設(shè)計(jì)的基于Wishbone的PCI Express接口的讀寫操作針對存儲器空間,其中存儲器讀寫操作TLP頭的格式如圖6所示。類型字段(Fmt)為00000b時(shí)表示存儲器讀或者寫;格式字段(Type)為00/01b時(shí)表示3DW/4DW的存儲器讀操作,為10/11b時(shí)表示3DW/4DW的存儲器寫操作。
2 基于Wishboen的PCI Express接口實(shí)現(xiàn)
2.1 實(shí)現(xiàn)原理
本文基于Xilinx FPGA的PCI Express集成硬核端點(diǎn)模塊和Wishhone片上總線,實(shí)現(xiàn)了主機(jī)和外接存儲器問通過PCI Express的接口通信。PCI Express接口基于協(xié)議包傳輸機(jī)制,因此,集成端點(diǎn)模塊的數(shù)據(jù)傳輸均以TLP包的形式進(jìn)行。實(shí)現(xiàn)數(shù)據(jù)傳輸可通過以下步驟進(jìn)行(以PCI Express讀傳輸為例):
(1)待傳輸數(shù)據(jù)存儲在應(yīng)用模塊中的數(shù)據(jù)緩存器中,數(shù)據(jù)緩存器可以使用片外存儲器也可以使用片內(nèi)RAM資源。本設(shè)計(jì)使用的是片內(nèi)RAM資源;
(2)數(shù)據(jù)通過集成在存儲器端的Wishbone總線輸入到數(shù)據(jù)緩存區(qū)(Tx_ram)中,在數(shù)據(jù)緩存區(qū)(Tx_ram)中根據(jù)規(guī)定格式形成TLP包;
(3)根據(jù)PCI Express協(xié)議,將在數(shù)據(jù)緩存區(qū)(Tx_ram)中的TLP包通過集成端點(diǎn)模塊發(fā)送出去。
PCI Express寫傳輸是上述的逆過程。
其原理框圖如圖7所示。
2.2 設(shè)計(jì)買現(xiàn)
Xilinx的V5/V6系列FPGA提供了一個(gè)PCI Express硬核端點(diǎn)模塊,此端點(diǎn)模塊提供了一個(gè)PCI Express接口通信的底層配置,但沒有包含對TLP包的編碼及解碼邏輯。因此,需要在設(shè)計(jì)中實(shí)現(xiàn)TLP包的編碼及解碼邏輯功能。編碼是將來自Wishbone片上總線的數(shù)據(jù)打包成TLP格式存入Tx_ram;解碼即是在Rx_ram中提取TLP包的有效載荷。在解碼邏輯中,最重要的就是要根據(jù)包頭的類型字段和格式字段來正確確定事務(wù)的類型、頭的大小、有效載荷是否存在。
在應(yīng)用模塊的存儲器端和FPGA端點(diǎn)IP核之間實(shí)現(xiàn)Wishbone的點(diǎn)對點(diǎn)連接,存儲器端接口為主端口,與硬核接口端為從端口。實(shí)現(xiàn)了32 b/16 b/8 b的單個(gè)存儲器的讀和寫以及主機(jī)到應(yīng)用模塊間的DMA傳輸。需要注意的是,在Wishbone讀/寫操作的時(shí)候,一個(gè)時(shí)鐘周期只能進(jìn)行一個(gè)雙字的傳送,對多個(gè)雙字進(jìn)行讀寫時(shí)需要多個(gè)時(shí)鐘周期。
主機(jī)到應(yīng)用模塊間的DMA傳輸包括DMA寫操作和DMA讀操作,其狀態(tài)流程如圖8所示。
DMA寫操作實(shí)現(xiàn)的主要方法是主機(jī)將TLP包頭中的各個(gè)字段正確填充,按照32位并組裝成TLP包頭,通過主機(jī)PCI Express接口傳輸?shù)郊啥它c(diǎn)硬核。硬核收到數(shù)據(jù)后,緩存到Rx_ram中,在解碼邏輯控制下,根據(jù)包頭類型(10/11b)及格式字段(00000b)發(fā)起Wishbone寫操作,將TLP包的有效載荷寫入存儲器中。
在進(jìn)行PCI Express的DMA讀操作時(shí),數(shù)據(jù)通過wishbone總線讀入,在編碼邏輯控制下,數(shù)據(jù)按照TLP包格式寫入Tx_ram中,將數(shù)據(jù)打包成一個(gè)3DW完成包,等待端點(diǎn)模塊發(fā)送。
2.3 功能仿真
本設(shè)計(jì)在XUPV5 LX110T開發(fā)板上進(jìn)行了功能驗(yàn)證試驗(yàn)。首先利用Xilinx公司的CORE Generator工具生成PCI Express端點(diǎn)IP核,其主要參數(shù)是鏈路數(shù)為X1,基地址0使能,地址類型為32位,訪問類型為Memory類型,用戶時(shí)鐘輸入為62.5 MHz。編程設(shè)計(jì)完成后,通過JTAG接口下載到FPGA芯片中,用Chipscope進(jìn)行測試,波形圖如圖9~圖10所示。
通過數(shù)據(jù)傳輸試驗(yàn)測試,Wishhone轉(zhuǎn)PCI Express接口的傳輸速率能達(dá)到80 MB/s以上,系統(tǒng)工作穩(wěn)定。目前,Wishbone實(shí)現(xiàn)了32 b/16 b/8 b的單個(gè)存儲器的讀和寫和DMA讀寫。如能夠編程實(shí)現(xiàn)Wishbone大字節(jié)塊的突發(fā)傳輸,傳輸速率將大大提高,這也是下一步開發(fā)的重點(diǎn)。
3 結(jié)語
測試試驗(yàn)結(jié)果證明,采用Wishbone和端點(diǎn)IP實(shí)現(xiàn)PCI Express總線接口,具有較高的通信速率,能滿足許多應(yīng)用的一般通信要求,特別是開發(fā)過程簡化且極大地縮短了開發(fā)時(shí)間。這種設(shè)計(jì)模式能夠更加專注于應(yīng)用功能的實(shí)現(xiàn)而不必在一些公共模塊(如PCIExpress)上花費(fèi)更多的時(shí)間和成本。另外,本文采用FPGA芯片內(nèi)嵌PCI Express End point Block硬核來進(jìn)行PCI Express的設(shè)計(jì),實(shí)現(xiàn)方式也為相似產(chǎn)品開發(fā)提供了有益參考。