何春茂
(廣州銳達(dá)測控科技有限公司,廣東廣州 510385)
基于FPGA硬核的PCI Express實(shí)現(xiàn)
何春茂
(廣州銳達(dá)測控科技有限公司,廣東廣州 510385)
PCI Express速度快,性能穩(wěn)定,廣泛使用于計(jì)算機(jī)與外圍設(shè)備的通信。根據(jù)PC平臺的運(yùn)動(dòng)控制器要求,采用Altera公司的EP4CGX30的硬核,實(shí)現(xiàn)PC機(jī)與DSP之間的通信,通過FPGA內(nèi)部自帶的RAM,采用FIFO的方式,實(shí)現(xiàn)全雙工通信,滿足DSP與PC的通信要求。
FPGA;PCI Express;硬核
目前,PC平臺的運(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,能滿足大多數(shù)PC平臺的運(yùn)動(dòng)控制器的通信需求。對于通信速度要求更快只需要采用PCI Express總線進(jìn)行通信。PCI Express總線是一種完全不同于過去PCI總線的一種全新總線規(guī)范,與PCI總線共享并行架構(gòu)相比,PCI Express總線是一種點(diǎn)對點(diǎn)串行連接的設(shè)備連接方式,點(diǎn)對點(diǎn)意味著每一個(gè)PCI Express設(shè)備都擁有自己獨(dú)立的數(shù)據(jù)連接,各個(gè)設(shè)備之間并發(fā)的數(shù)據(jù)傳輸互不影響,而對于過去PCI那種共享總線方式,PCI總線上只能有一個(gè)設(shè)備進(jìn)行通信,一旦PCI總線上掛接的設(shè)備增多,每個(gè)設(shè)備的實(shí)際傳輸速率就會下降,性能得不到保證。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)異的信號完整性。PCI-SIG兼容收發(fā)器型號支持多種串行協(xié)議,支持2.5 GHz的收發(fā)頻率。FPGA實(shí)現(xiàn)PCI Express通信、伺服驅(qū)動(dòng)器的控制及各信號的采集與輸出。
DSP采用的是TI公司的TMS320C6713,它是32位高速浮點(diǎn)型DSP,時(shí)鐘最高頻率為300 MHz,通過EMIF總線的方式和FPGA通信。DSP用來完成運(yùn)動(dòng)控制運(yùn)算,硬件如圖1所示。
圖1 硬件平臺
PCI Express體系結(jié)果分為四個(gè)層,分別為:物理層(Physical layer)、數(shù)據(jù)鏈路層(Link Lay?er)、處理層(Transaction Layer)、軟件層(Soft?ware Layer),其中,物理層、數(shù)據(jù)鏈路層及處理層已經(jīng)包含在硬核中,用戶要實(shí)現(xiàn)的就是軟件層。如圖2中的讀模塊和寫模塊。PC端發(fā)送數(shù)據(jù)下來時(shí),通過讀模塊,把接收到的數(shù)據(jù)放處FIFO,當(dāng)DSP通過EMIF總線檢測到FIFO內(nèi)部有數(shù)據(jù)時(shí),就可以從FIFO中讀出數(shù)據(jù)。當(dāng)DSP需要上傳數(shù)據(jù)時(shí),也通過EMIF總線把數(shù)據(jù)寫到FIFO,當(dāng)寫模塊檢測到FIFO有數(shù)據(jù)時(shí),就通過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,也可以開通多個(gè)存儲空間或I/O空間。PCI Read-only Registers是PC端對目標(biāo)設(shè)備身份進(jìn)行識別寄存器,可以選擇默認(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)鍵信號說明
Avalon-ST RX組:即在讀模塊內(nèi)完成這個(gè)功能。時(shí)序如圖3[1]所示。在rx_st_sop高電平時(shí),即表讀時(shí)序開始,讀第一個(gè)數(shù)據(jù),開始讀取數(shù)據(jù),rx_st_eop高電平處讀取最后一個(gè)數(shù)據(jù),即完成數(shù)據(jù)讀取,rx_st_valid高電平表示數(shù)據(jù)有效。
圖3 Avalon-ST RX時(shí)序
Avalon-ST TX組:在寫模塊內(nèi)完成這個(gè)功能,時(shí)序如圖4[1]所示。在core_clk_out上升沿處,把tx_st_sop置高,并寫入第一個(gè)數(shù)據(jù),同時(shí)把tx_st_valid置高,中間數(shù)據(jù)在tx_st_valid置高時(shí)輸入有效,最后一個(gè)數(shù)據(jù)寫入并把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為輸入信號,與配置的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í)鐘來驅(qū)動(dòng)。
Reset組:這組包括crst、npor、srst。crst為同步配置復(fù)位,高電平有效,可由pcie_rstn(pcie插槽復(fù)位引腳)和local_rstn(硬件復(fù)位引腳)邏輯與之后再取反得到的信號來驅(qū)動(dòng)。npor為異步上電復(fù)位,低電平有效,可local_rstn來驅(qū)動(dòng)。Srst為同步數(shù)據(jù)通路復(fù)位,高電平有效,可由lo?cal_rstn取反后來驅(qū)動(dòng)。
Interrupt組。這組由上層中斷應(yīng)用模塊來驅(qū)動(dòng)??僧a(chǎn)生MSI Interrupts和Legacy Interrupt二種中斷。其中MSI Interrupts如圖5[1]所示。在app_mis_req高電平下,寫入app_mis_tc和 pp_msi_num,當(dāng)硬核承認(rèn)信號app_msi_ack為高時(shí),將產(chǎn)生一個(gè)MSI報(bào)文向處理器申請中斷,完成MSI中斷操作。
圖5 MSI Interrupt
Legacy Interrupt操作時(shí)序如圖6[1]所示。將app_int_sts信號置高,然后等待app_int_ack變高,即產(chǎn)生一個(gè)Assert_INTA信息報(bào)文向處理器申請中斷。
圖6 Legacy Interrupt
其他信號組用戶可以根據(jù)需要進(jìn)行選擇使用。
PCI Express硬核已經(jīng)生成了數(shù)據(jù)鏈路層和處理層,用戶只需要完成應(yīng)用層,即完成接收、發(fā)送及中斷等模塊。PCI Express通信報(bào)文有內(nèi)存讀、內(nèi)存寫、配置讀、配置寫、I/O讀、I/O寫、信息、完成等報(bào)文。而作為終端設(shè)備,接收到PC端發(fā)送的內(nèi)存讀報(bào)文后,需要返回完成報(bào)文,當(dāng)收到內(nèi)存寫報(bào)文時(shí),則無需返回報(bào)文。報(bào)文是按一定格式進(jìn)行填充或讀取,其中內(nèi)存讀報(bào)文格式如圖7[2]所示。
圖7 讀內(nèi)存報(bào)文
其中,TC字段定義報(bào)文的傳送類型,TD位表示TLP中的TLP Digest是否有效,EP位表示當(dāng)前TLP中的數(shù)據(jù)是否有效,Attr定義報(bào)文的模型,Length為報(bào)文的有效負(fù)載,即需要讀取的雙字(DW)個(gè)數(shù),Requestor ID設(shè)備的總線號(Bus Num?ber)、設(shè)備號(Device Number)和功能號(Function Number)組成,Tag由八位組成,決定了發(fā)送端能夠暫存256個(gè)同類型的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è)備的總線號、設(shè)備號和功能號組成,該字段內(nèi)容保存在地址為OxF的傳輸層配置寄存器內(nèi),可以通過tl_cfg_ctl總線來讀取該值,本文生成的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字段存放在存儲器讀完成TLP中第一個(gè)數(shù)據(jù)所對應(yīng)地址的最低位,對應(yīng)內(nèi)存讀報(bào)文中Address[6:0]。Byte12開始,填入內(nèi)存數(shù)據(jù)。
圖9 PCI Express硬核發(fā)送數(shù)據(jù)
圖10 PCI Express硬核接收數(shù)據(jù)
完成代碼設(shè)計(jì),編譯之后,把應(yīng)用程序加載到FPGA配置芯片,把卡插入電腦PCI Express插槽,開機(jī)后,打開Driver Wizard調(diào)試軟件,可以看到有個(gè)Altera-device的PCI設(shè)備,雙擊BARO,進(jìn)入BAR0讀寫操作框。根據(jù)數(shù)據(jù)流程模塊,DSP向FPGA發(fā)送FIFO寫處一個(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讀寫框內(nèi),向地址0X64寫數(shù)據(jù)0x87654321。在FPGA端 , SignalTap II Logic Analyzer顯示接收到數(shù)據(jù)0x87654321,如圖10所示。
采用PCI Express方式實(shí)現(xiàn)PC機(jī)與DSP之間的通信,具有較快的通信速率,完全滿足實(shí)時(shí)通信要求。采用PCI Express硬核,能夠縮短開發(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)控制及檢測。己發(fā)表論文2篇。
(編輯:向 飛)
2014-04-29