何春茂
(廣州銳達(dá)測(cè)控科技有限公司,廣東廣州 510385)
基于FPGA硬核的PCI Express實(shí)現(xiàn)
何春茂
(廣州銳達(dá)測(cè)控科技有限公司,廣東廣州 510385)
PCI Express速度快,性能穩(wěn)定,廣泛使用于計(jì)算機(jī)與外圍設(shè)備的通信。根據(jù)PC平臺(tái)的運(yùn)動(dòng)控制器要求,采用Altera公司的EP4CGX30的硬核,實(shí)現(xiàn)PC機(jī)與DSP之間的通信,通過(guò)FPGA內(nèi)部自帶的RAM,采用FIFO的方式,實(shí)現(xiàn)全雙工通信,滿(mǎn)足DSP與PC的通信要求。
FPGA;PCI Express;硬核
目前,PC平臺(tái)的運(yùn)動(dòng)控制卡應(yīng)用上,大多采用了PCI的通信方式,如雷賽科技公司的MDC1380、MDC1410等,固高科技公司的GE-200-SV-PCI、GE-300-SG-PCI等。PCI總線時(shí)鐘頻率為33.3 MHz/66 MHz,最大數(shù)據(jù)傳輸速率為133 Mb/s,能滿(mǎn)足大多數(shù)PC平臺(tái)的運(yùn)動(dòng)控制器的通信需求。對(duì)于通信速度要求更快只需要采用PCI Express總線進(jìn)行通信。PCI Express總線是一種完全不同于過(guò)去PCI總線的一種全新總線規(guī)范,與PCI總線共享并行架構(gòu)相比,PCI Express總線是一種點(diǎn)對(duì)點(diǎn)串行連接的設(shè)備連接方式,點(diǎn)對(duì)點(diǎn)意味著每一個(gè)PCI Express設(shè)備都擁有自己獨(dú)立的數(shù)據(jù)連接,各個(gè)設(shè)備之間并發(fā)的數(shù)據(jù)傳輸互不影響,而對(duì)于過(guò)去PCI那種共享總線方式,PCI總線上只能有一個(gè)設(shè)備進(jìn)行通信,一旦PCI總線上掛接的設(shè)備增多,每個(gè)設(shè)備的實(shí)際傳輸速率就會(huì)下降,性能得不到保證。PCI Express總線有X1、X2、X4、X8、X16、X32通道規(guī)格?,F(xiàn)在已經(jīng)發(fā)展到了PCI-E 3.0。由于受限于FPGA器件的支持,本文使用了PCI-E 2.0規(guī)范。支持最大頻率為2.5 GHz,最大傳輸速度為512 Mb/s(雙工)。
本文采用了Altera公司的Cyclone IV系列器件EP4CGX30F23,屬于低成本、低功耗FPGA。該器件有29 440個(gè)邏輯單元,1.08Mbits內(nèi)嵌Memory模塊,290個(gè)最大I/O接口。同時(shí),采用了Altera成熟的GX收發(fā)器技術(shù),具有出眾的抖動(dòng)性能和優(yōu)異的信號(hào)完整性。PCI-SIG兼容收發(fā)器型號(hào)支持多種串行協(xié)議,支持2.5 GHz的收發(fā)頻率。FPGA實(shí)現(xiàn)PCI Express通信、伺服驅(qū)動(dòng)器的控制及各信號(hào)的采集與輸出。
DSP采用的是TI公司的TMS320C6713,它是32位高速浮點(diǎn)型DSP,時(shí)鐘最高頻率為300 MHz,通過(guò)EMIF總線的方式和FPGA通信。DSP用來(lái)完成運(yùn)動(dòng)控制運(yùn)算,硬件如圖1所示。
圖1 硬件平臺(tái)
PCI Express體系結(jié)果分為四個(gè)層,分別為:物理層(Physical layer)、數(shù)據(jù)鏈路層(Link Lay?er)、處理層(Transaction Layer)、軟件層(Soft?ware Layer),其中,物理層、數(shù)據(jù)鏈路層及處理層已經(jīng)包含在硬核中,用戶(hù)要實(shí)現(xiàn)的就是軟件層。如圖2中的讀模塊和寫(xiě)模塊。PC端發(fā)送數(shù)據(jù)下來(lái)時(shí),通過(guò)讀模塊,把接收到的數(shù)據(jù)放處FIFO,當(dāng)DSP通過(guò)EMIF總線檢測(cè)到FIFO內(nèi)部有數(shù)據(jù)時(shí),就可以從FIFO中讀出數(shù)據(jù)。當(dāng)DSP需要上傳數(shù)據(jù)時(shí),也通過(guò)EMIF總線把數(shù)據(jù)寫(xiě)到FIFO,當(dāng)寫(xiě)模塊檢測(cè)到FIFO有數(shù)據(jù)時(shí),就通過(guò)AVLON-ST TX總線把數(shù)據(jù)打包傳輸給硬核,完成數(shù)據(jù)的通信流程。如圖2所示。
圖2 數(shù)據(jù)流程
3.1 硬核的生成
在quartus工程內(nèi),點(diǎn)擊工具菜單下面Mega?wizard Plug-In Manager,選擇IP Compiler for PCI Express。在System Settings菜單下,選擇Hard IP For PCI Express,Lanes選擇通道,該器件最大支持x4通道,本文選擇x1,Port Type框內(nèi)選擇Na?tive EndPoint,作為終端設(shè)備。PC機(jī)輸入的差分參考時(shí)鐘Xcvr ref_clk選擇100 MHz,Application clock(應(yīng)用時(shí)鐘頻率)為125 MHz。點(diǎn)擊下一步進(jìn)入PCI resisters配置。在配置空間里,默認(rèn)選擇一個(gè)64-bit Prefetchable memory,也可以開(kāi)通多個(gè)存儲(chǔ)空間或I/O空間。PCI Read-only Registers是PC端對(duì)目標(biāo)設(shè)備身份進(jìn)行識(shí)別寄存器,可以選擇默認(rèn),也可以更改。如圖4所示。點(diǎn)擊Next進(jìn)入PCI Capabilities設(shè)置,默認(rèn)四條MSI中斷線。后面的配置選擇默認(rèn)即可,最后點(diǎn)擊Finish,生成PCI Express硬核文件。
3.2 硬核關(guān)鍵信號(hào)說(shuō)明
Avalon-ST RX組:即在讀模塊內(nèi)完成這個(gè)功能。時(shí)序如圖3[1]所示。在rx_st_sop高電平時(shí),即表讀時(shí)序開(kāi)始,讀第一個(gè)數(shù)據(jù),開(kāi)始讀取數(shù)據(jù),rx_st_eop高電平處讀取最后一個(gè)數(shù)據(jù),即完成數(shù)據(jù)讀取,rx_st_valid高電平表示數(shù)據(jù)有效。
圖3 Avalon-ST RX時(shí)序
Avalon-ST TX組:在寫(xiě)模塊內(nèi)完成這個(gè)功能,時(shí)序如圖4[1]所示。在core_clk_out上升沿處,把tx_st_sop置高,并寫(xiě)入第一個(gè)數(shù)據(jù),同時(shí)把tx_st_valid置高,中間數(shù)據(jù)在tx_st_valid置高時(shí)輸入有效,最后一個(gè)數(shù)據(jù)寫(xiě)入并把tx_st_eop置高。完成一幀數(shù)據(jù)的發(fā)送。
圖4 Avalon-ST TX時(shí)序
Clock組 : 這 組 包 括 refclk、 pld_clk、core_clk_out、 pclk_in、 app_clk、 cal_blk_clk、clk250_out、clk500_out、fixedclk_serdes、recon?fig_clk等。其中refclk為輸入信號(hào),與配置的ref_clk一至,由 PC端提供,core_clk_out、app_clk、clk250_out、clk500_out為硬核輸出時(shí)鐘,供應(yīng)用層使用,core_clk_out用于發(fā)送接收模塊, app_clk用 于 中斷 模 塊。 pld_clk由core_clk_out驅(qū)動(dòng),保持應(yīng)用層時(shí)鐘與硬核時(shí)鐘一至。pclk_in為仿真時(shí)鐘,連接到 refclk。cal_blk_clk為發(fā)送基準(zhǔn)時(shí)鐘,連接至core_clk_out。reconfig_clk,serdes、分別為固定的50 M、125 M時(shí)鐘,必須于外部時(shí)鐘驅(qū)動(dòng),可用PLL鎖相環(huán)產(chǎn)生50 M和125 M的時(shí)鐘來(lái)驅(qū)動(dòng)。
Reset組:這組包括crst、npor、srst。crst為同步配置復(fù)位,高電平有效,可由pcie_rstn(pcie插槽復(fù)位引腳)和local_rstn(硬件復(fù)位引腳)邏輯與之后再取反得到的信號(hào)來(lái)驅(qū)動(dòng)。npor為異步上電復(fù)位,低電平有效,可local_rstn來(lái)驅(qū)動(dòng)。Srst為同步數(shù)據(jù)通路復(fù)位,高電平有效,可由lo?cal_rstn取反后來(lái)驅(qū)動(dòng)。
Interrupt組。這組由上層中斷應(yīng)用模塊來(lái)驅(qū)動(dòng)??僧a(chǎn)生MSI Interrupts和Legacy Interrupt二種中斷。其中MSI Interrupts如圖5[1]所示。在app_mis_req高電平下,寫(xiě)入app_mis_tc和 pp_msi_num,當(dāng)硬核承認(rèn)信號(hào)app_msi_ack為高時(shí),將產(chǎn)生一個(gè)MSI報(bào)文向處理器申請(qǐng)中斷,完成MSI中斷操作。
圖5 MSI Interrupt
Legacy Interrupt操作時(shí)序如圖6[1]所示。將app_int_sts信號(hào)置高,然后等待app_int_ack變高,即產(chǎn)生一個(gè)Assert_INTA信息報(bào)文向處理器申請(qǐng)中斷。
圖6 Legacy Interrupt
其他信號(hào)組用戶(hù)可以根據(jù)需要進(jìn)行選擇使用。
PCI Express硬核已經(jīng)生成了數(shù)據(jù)鏈路層和處理層,用戶(hù)只需要完成應(yīng)用層,即完成接收、發(fā)送及中斷等模塊。PCI Express通信報(bào)文有內(nèi)存讀、內(nèi)存寫(xiě)、配置讀、配置寫(xiě)、I/O讀、I/O寫(xiě)、信息、完成等報(bào)文。而作為終端設(shè)備,接收到PC端發(fā)送的內(nèi)存讀報(bào)文后,需要返回完成報(bào)文,當(dāng)收到內(nèi)存寫(xiě)報(bào)文時(shí),則無(wú)需返回報(bào)文。報(bào)文是按一定格式進(jìn)行填充或讀取,其中內(nèi)存讀報(bào)文格式如圖7[2]所示。
圖7 讀內(nèi)存報(bào)文
其中,TC字段定義報(bào)文的傳送類(lèi)型,TD位表示TLP中的TLP Digest是否有效,EP位表示當(dāng)前TLP中的數(shù)據(jù)是否有效,Attr定義報(bào)文的模型,Length為報(bào)文的有效負(fù)載,即需要讀取的雙字(DW)個(gè)數(shù),Requestor ID設(shè)備的總線號(hào)(Bus Num?ber)、設(shè)備號(hào)(Device Number)和功能號(hào)(Function Number)組成,Tag由八位組成,決定了發(fā)送端能夠暫存256個(gè)同類(lèi)型的TLP,Last BE表示最后一個(gè)數(shù)據(jù)是否有效,F(xiàn)irst BE表示第一個(gè)數(shù)據(jù)是否有效。應(yīng)用層需要根據(jù)Length及Address,使用完成報(bào)文返回相應(yīng)的數(shù)據(jù),完成報(bào)文格式如圖8[3]。
圖8 完成報(bào)文
其中,Completer ID也是由設(shè)備的總線號(hào)、設(shè)備號(hào)和功能號(hào)組成,該字段內(nèi)容保存在地址為OxF的傳輸層配置寄存器內(nèi),可以通過(guò)tl_cfg_ctl總線來(lái)讀取該值,本文生成的PCI Express硬核得到的Completer ID是0X0200。Status字段保存當(dāng)前完成報(bào)文的完成狀態(tài)。Byte Count字段記錄源設(shè)備還需要從目標(biāo)設(shè)備中,獲得多少字節(jié)的數(shù)據(jù)就能完成全部數(shù)據(jù)傳遞,當(dāng)前TLP中的有效負(fù)載也被Byte Count字段統(tǒng)計(jì)在內(nèi)。Low Address字段存放在存儲(chǔ)器讀完成TLP中第一個(gè)數(shù)據(jù)所對(duì)應(yīng)地址的最低位,對(duì)應(yīng)內(nèi)存讀報(bào)文中Address[6:0]。Byte12開(kāi)始,填入內(nèi)存數(shù)據(jù)。
圖9 PCI Express硬核發(fā)送數(shù)據(jù)
圖10 PCI Express硬核接收數(shù)據(jù)
完成代碼設(shè)計(jì),編譯之后,把應(yīng)用程序加載到FPGA配置芯片,把卡插入電腦PCI Express插槽,開(kāi)機(jī)后,打開(kāi)Driver Wizard調(diào)試軟件,可以看到有個(gè)Altera-device的PCI設(shè)備,雙擊BARO,進(jìn)入BAR0讀寫(xiě)操作框。根據(jù)數(shù)據(jù)流程模塊,DSP向FPGA發(fā)送FIFO寫(xiě)處一個(gè)0x78574632的數(shù)據(jù)后,當(dāng)FIFO有數(shù)據(jù)時(shí),使用Driver Wizard讀該地址數(shù)據(jù),進(jìn)而觸發(fā)數(shù)據(jù)發(fā)送模塊,使用Quartus II自帶的SignalTap II Logic Analyzer可以看到發(fā)送的時(shí)序,如圖9所示。Driver Wizard信息框內(nèi)提示讀到的數(shù)據(jù)。
在Driver Wizard讀寫(xiě)框內(nèi),向地址0X64寫(xiě)數(shù)據(jù)0x87654321。在FPGA端 , SignalTap II Logic Analyzer顯示接收到數(shù)據(jù)0x87654321,如圖10所示。
采用PCI Express方式實(shí)現(xiàn)PC機(jī)與DSP之間的通信,具有較快的通信速率,完全滿(mǎn)足實(shí)時(shí)通信要求。采用PCI Express硬核,能夠縮短開(kāi)發(fā)周期,提高了產(chǎn)品的可靠性和穩(wěn)定性。
[1]IP Compiler for PCI Express User Guide[EB/OL].www. altera.com.cn.
[2]馬鳴錦,朱劍冰,何紅旗,等.PCI、PCI-X和PCI Ex?press的原理及體系結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2007.
[3]楊子元,包啟亮,王旭,等.基于PCIE/104總線的高速數(shù)據(jù)接口設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(14):75-78.
Implementation of PCI Express Based on FPGA Hardcore
HE Chun-mao
(Guangzhou Ruida measurement and Control Technology Co.,Ltd,Guangzhou510385,China)
Because the PCI Express fast,stable performance,it is widely used in computer and peripheral equipment communication. According to the motion controller PC platform,using Altera's EP4CGX30 hardcore,realized communication between PC and DSP,through the FPGA internal RAM,adopt FIFO mode,implemented full duplex communication,to meet the requirements of communication between DSP and PC.
FPGA;PCI Express;hardcore
TP393
:A
:1009-9492(2014)10-0081-04
10.3969/j.issn.1009-9492.2014.10.022
何春茂,男,1980年生,江西石城人,碩士。研究領(lǐng)域:工業(yè)自動(dòng)控制及檢測(cè)。己發(fā)表論文2篇。
(編輯:向 飛)
2014-04-29