引言
隨著CompactPCI在中國大范圍的普及和使用,越來越多的企業(yè)開始研制基于CompactPCI接口的產(chǎn)品,市場上有一些專用PCI接口芯片。FPGA(現(xiàn)場可編程門陣列)技術(shù)的快速發(fā)展使得萬門以上乃至幾十萬門邏輯陣列的使用越來越普遍。與專用PCI接口芯片相似,很多FPGA制造商都提供了PCI接口核邏輯。設(shè)計者可以將PCI用戶邏輯與PCI Core集成在一片F(xiàn)PGA里,并且可以在頂層通過仿真來驗證PCI接口以及用戶邏輯設(shè)計的正確與否,這樣可以大幅度提高調(diào)試速度、縮短開發(fā)周期、提高電路板的集成度和系統(tǒng)的性能。目前,開發(fā)者最常用的兩種PCI IP核是ALTERA公司的PCI MEGACORE和XILINX公司的PCI Logicore。本文所介紹的PCI_MT64 IP核是ALTERA公司開發(fā)的一個功能強大的CPCI接口內(nèi)核,最高能實現(xiàn)64位的數(shù)據(jù)寬度和66MHz的工作頻率。文章介紹了PCI_MT64的工作原理以及此IP核在CPCI總線數(shù)據(jù)采集卡的應(yīng)用設(shè)計,并通過本地邏輯設(shè)計測試了此IP核的功能。
PCI_MT64 IP核的原理和結(jié)構(gòu)
根據(jù)用戶性質(zhì)的不同,CPCI接口類型分為兩種:MASTER(主設(shè)備) 和TARGET(從設(shè)備)。ALTERA公司據(jù)此開發(fā)了多種 PCI IP核:PCI_MT64、PCI_MT32、PCI_T64和PCI_T32。由于設(shè)計需要完成66MHz、64位寬度數(shù)據(jù)傳輸,且在主模式下DMA控制器才能工作,因此選擇了PCI_MT64。
PCI_MT64是支持33/66MHz工作頻率、64位PCI總線、支持主/從模式的PCI IP功能模塊。當(dāng)其寬度為64位、系統(tǒng)時鐘為66 MHz時,峰值傳輸速率為528 MB/s。其主要由8個模塊組成,如圖1所示。
圖1 PCI_MT64的模塊結(jié)構(gòu)
參數(shù)配置寄存器:提供參數(shù)確定的寄存器,包括設(shè)備識別、供應(yīng)商識別、分類代碼、修訂版本、基址寄存器和子系統(tǒng)供應(yīng)商等信息。在設(shè)計中,ALTERA公司提供了參數(shù)化的圖形界面,用戶只需按PCI協(xié)議輸入或選擇合理的值即可完成該寄存器的配置。
PCI側(cè)地址/數(shù)據(jù)緩沖模塊:用來緩存PCI總線側(cè)的地址數(shù)據(jù)輸入、輸出信號。
PCI側(cè)主/從模式控制模塊:用于控制PCI總線的主設(shè)備和從設(shè)備的各種時序操作。
Local側(cè)主/從模式控制模塊:用于控制PCI_MT64與本地邏輯的各種操作。
Local側(cè)地址/數(shù)據(jù)/命令/字節(jié)使能模塊:接收和輸出用戶側(cè)的所有地址、數(shù)據(jù)、命令、字節(jié)使能等信號。
奇偶校驗模塊:用于對數(shù)據(jù)、地址、命令進行奇偶校驗。
PCI_MT64 IP核在CPCI數(shù)據(jù)采集卡中的應(yīng)用設(shè)計
PCI_MT64 IP核在CPCI數(shù)據(jù)采集卡中的功能:與CPCI總線之間的通信和數(shù)據(jù)傳輸,并做奇偶校驗以保證正確性,即將復(fù)雜的CPCI總線信號轉(zhuǎn)換為相對簡單易操作的CPCI本地總線信號,它從CPCI總線側(cè)獲得傳輸命令和讀寫數(shù)據(jù)的地址后,一方面對這個操作命令做出反應(yīng),將其傳達給本地邏輯,另一方面將CPCI總線傳送過來的數(shù)據(jù)地址映射為本地邏輯可識別的地址。當(dāng)本地端總線準(zhǔn)備好后,PCI IP核會收到本地邏輯做出的響應(yīng)信號,然后根據(jù)主從模式,讀/寫命令的不同執(zhí)行相應(yīng)的時序。簡單的說,它是CPCI總線和本地邏輯的橋梁,所以首先要設(shè)計CPCI本地側(cè)邏輯實現(xiàn)PCI IP核功能驗證,如圖2所示。
圖2 CPCI本地端邏輯設(shè)計
以上設(shè)計能快速評估PCI IP核的功能,當(dāng)PCI_MT64作為一個主設(shè)備,主模式控制邏輯連接DMA控制器來完成一次PCI主模式讀寫傳輸。當(dāng)PCI_MT64作為一個從設(shè)備,它觸發(fā)從模式控制邏輯來執(zhí)行一次從模式傳輸。CPCI數(shù)據(jù)采集卡使用DMA方式上傳數(shù)據(jù),即將數(shù)據(jù)采集模塊的數(shù)據(jù)處理后,緩存到FIFO,從FIFO中傳輸數(shù)據(jù)到上位機;使用從模式寫傳輸發(fā)送控制命令到板卡不同寄存器。當(dāng)進行一次從模式傳輸時,PCI IP核不能啟動總線操作,只能依賴于主設(shè)備從其中讀取數(shù)據(jù)或向其傳送數(shù)據(jù),相關(guān)設(shè)計較為簡單,而DMA模式是PCI_MT64配合自主設(shè)計的DMA控制器來實現(xiàn)的,所以DMA控制器是整個設(shè)計的關(guān)鍵。
DMA控制器由DMA寄存器和DMA狀態(tài)機兩個模塊構(gòu)成。DMA寄存器是主機控制DMA的窗口,包括控制狀態(tài)寄存器、地址寄存器、字節(jié)寄存器、中斷狀態(tài)寄存器和本地地址寄存器。DMA寄存器的地址直接映射到PCI的地址空間,其基地址對應(yīng)PCI IP核中的配置寄存器Bar0。主機通過設(shè)置在存儲器地址空間的DMA寄存器來控制DMA傳輸。DMA狀態(tài)機是控制主模式寫傳輸?shù)暮诵?,產(chǎn)生主模式傳輸需求的各種信號。狀態(tài)跳轉(zhuǎn)條件來自DMA寄存器,IP核以及DMA FIFO。狀態(tài)機流程圖如圖3所示。
圖3 DMA狀態(tài)機
以鏈?zhǔn)?/a>DMA傳輸為例介紹其流程:主機首先把多組字節(jié)寄存器和地址寄存器的值寫入描述符FIFO,每一組字節(jié)寄存器和地址寄存器就是一個描述符;主機再寫本地地址寄存器和控制狀態(tài)寄存器即啟動了DMA狀態(tài)機,開始鏈?zhǔn)降臄?shù)據(jù)傳輸。狀態(tài)機跳入裝載DMA狀態(tài),通過對DMA FIFO的讀取將需要的值寫入寄存器中,經(jīng)寄存器有效狀態(tài)進入等待請求狀態(tài)。當(dāng)外部FIFO數(shù)據(jù)準(zhǔn)備好,DMA狀態(tài)機向主機發(fā)送總線請求信號,并等待主機的總線允許信號,此時狀態(tài)機進入等待允許狀態(tài);一旦接收到主機的總線允許信號,整個DMA傳輸開始,狀態(tài)機也進入數(shù)據(jù)傳輸狀態(tài)。在數(shù)據(jù)傳輸周期中,字節(jié)寄存器的值逐漸減少直到零時,一個描述符傳輸完成,每一個描述符傳輸完成的時候,狀態(tài)機并不進入結(jié)束狀態(tài),而是直接進入空閑狀態(tài),開始下一次描述符的傳輸,所以不產(chǎn)生中斷。等到DMA FIFO為空的時候,狀態(tài)機認為本次鏈?zhǔn)紻MA傳輸完成,進入到結(jié)束狀態(tài),此時產(chǎn)生中斷,一次鏈?zhǔn)紻MA傳輸結(jié)束。
實驗調(diào)試及分析
PCI_MT64 IP核在CPCI數(shù)據(jù)采集卡中的應(yīng)用主要是完成數(shù)據(jù)的高速傳輸,包括從模式寫傳輸方式的數(shù)據(jù)下傳(控制命令)和DMA方式的數(shù)據(jù)上傳(采集卡數(shù)據(jù))。在QuartusII9.0環(huán)境下,運用Megacore PCI Complier對PCI_MT64進行設(shè)置,并對CPCI本地端邏輯進行了綜合編譯,生成網(wǎng)表文件,運用Testbench工具對從模式寫傳輸方式進行仿真,驗證了PCI_MT64 IP核的穩(wěn)定性。其時序仿真如圖4所示。
圖4 從模式單周期寫仿真時序
圖4中是一個對地址為8000H的MEM域空間的單周期寫操作,在第3個時鐘周期,F(xiàn)RAME#低電平有效,此時pci_ad的值是8000H,pci_cben的值是0111B,表示存儲器寫,在TRDY#和IRDY#同時有效的時候,數(shù)據(jù)由pci_ad傳給l_dato,這里寫入的數(shù)據(jù)是66666666H。由仿真圖可以看到,pci_ad和l_dato的數(shù)據(jù)是一樣的,所以從模式單周期寫傳輸正確。單周期讀寫適合少量數(shù)據(jù)傳輸,不同寄存器控制命令的發(fā)送及DMA寄存器的設(shè)置都是通過從模式下單周期讀寫實現(xiàn)的。
為測試PCI_MT64 IP核的本地端邏輯設(shè)計,調(diào)用基于Windriver編寫的驅(qū)動程序和用戶界面實現(xiàn)數(shù)據(jù)的傳輸。這樣,既驗證了CPCI數(shù)據(jù)采集卡硬件邏輯的正確性,又驗證了軟件的正確性。其測試結(jié)果如圖5所示。
圖5 應(yīng)用軟件測試界面
圖5中數(shù)據(jù)采樣率為500MHz,輸入信號頻率為16MHz,一個周期的采樣點數(shù)N=500/16=31.25,故250個點內(nèi)應(yīng)有250/31.25=8個周期的數(shù)據(jù)。采樣數(shù)據(jù)的幅值以十六進制格式在列表框中顯示。波形顯示了有限數(shù)據(jù)的連續(xù)傳輸,沒有任何數(shù)據(jù)丟失,驗證了基于PCI_MT64 IP核在數(shù)據(jù)采集卡中采用DMA方式傳輸數(shù)據(jù)的完整性及傳輸速度。
結(jié)束語
PCI_MT64 IP核能有效的滿足CPCI數(shù)據(jù)采集卡對數(shù)據(jù)高速傳輸?shù)囊?,實現(xiàn)CPCI接口功能,并能與用戶邏輯配合工作,實現(xiàn)數(shù)據(jù)的緩存和傳輸。相較于使用PCI專用芯片實現(xiàn)接口功能的方法,本設(shè)計具有電路板集成性能高、功耗低、成本低、方便移植等優(yōu)點。