《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 基于IP-core的64位PCI接口設(shè)計與實現(xiàn)

基于IP-core的64位PCI接口設(shè)計與實現(xiàn)

2009-01-14
作者:王 偉, 符 權(quán), 徐佩霞

??? 摘? 要:介紹一種Linux下的基于64位PCI總線和多片F(xiàn)PGA的高速計算平臺的設(shè)計和實現(xiàn),利用Altera公司的PCI軟核——PCI_mt64構(gòu)建此平臺的PCI橋接口模塊,設(shè)計出一種兼容總線寬度64位/32位、時鐘66MHz的PCI規(guī)范的接口模塊,以及與此相配合的DMA狀態(tài)機,并給出Linux驅(qū)動的關(guān)鍵部分。?

????關(guān)鍵詞: PCI_mt64; 現(xiàn)場可編程門陣列; DMA; Linux驅(qū)動

?

??? PCI(Peripheral Component Interconnection)總線接口是目前一種應(yīng)用廣泛、可兼容支持32/64位的局部總線接口,它同時支持多組外圍設(shè)備,不受制于處理器,數(shù)據(jù)吞吐量大(32位時峰值高達132MB/s,64位時峰值高達528MB/s)[1]。連接到PCI總線上的設(shè)備分為主設(shè)備和從設(shè)備,接口設(shè)計成為PCI總線與設(shè)備進行數(shù)據(jù)傳輸?shù)臉蛄骸5牵琍CI總線協(xié)議十分復(fù)雜,不容易實現(xiàn)。目前實現(xiàn)PCI接口的有效方案有兩種:使用專用總線接口器件和專用PCI軟核IP-core。?

??? 目前,業(yè)界基于32位PCI總線使用較多的接口芯片是AMCC公司的S59xx系列和PLX公司的PLX系列。而對于64位的PCI總線,目前PLX公司的9656芯片雖然可以支持,但在設(shè)備本地端,9656芯片只能提供32位的接口,并不是完全的64位PCI接口芯片,數(shù)據(jù)的處理速度因此而受到限制。?

??? 另一方面,Linux操作系統(tǒng)是一種基于GNU通用公共許可證(GPL)架構(gòu)下、源碼公開的免費操作系統(tǒng),繼承了Unix穩(wěn)定有效的特點,采用先進的內(nèi)存管理機制,能有效地利用物理內(nèi)存;與Windows相比,Linux在安全性、漏洞修補上都具有其獨特的優(yōu)勢,因此,目前Linux在工業(yè)、政府部門都有著廣泛的應(yīng)用。?

??? 本文介紹一種在Linux操作系統(tǒng)下的、64位66MHz高速PCI的FPGA通用并行計算平臺的設(shè)計與實現(xiàn)。該平臺采用Altera公司提供的IP軟核PCI_mt64[2-3],自行設(shè)計本地端64位橋接口;同時,采用多片F(xiàn)PGA運行不同的算法,并在FPGA內(nèi)部實現(xiàn)算法的并行化,從而大大提高了PC機對大運算量的數(shù)字信號處理的能力。系統(tǒng)已成功應(yīng)用到MD5 的快速解密。?

1 系統(tǒng)設(shè)計的目的?

??? 目前信號處理對于實時性要求的提高,雖然也使CPU的運算頻率日益提高,可以大大提高某些大運算量應(yīng)用計算的速度,但是獨占CPU資源并不是一個很好的選擇;同時由于成本及其他因素的考慮,也不可能專門使用多臺小型機進行計算。在這種情況下,將信號處理算法并行化,運行于高性能的FPGA,并通過適當?shù)目偩€接口,可以達到既不占用CPU資源,同時又有多臺小型機同時運算的性能。?

??? 本硬件平臺的設(shè)計目的是將64位66MHz的PCI接口與FPGA結(jié)合起來,使得該硬件平臺既可以保證數(shù)據(jù)量的高速吞吐和數(shù)據(jù)處理的實時性要求,又可以在運算處理過程中不占用CPU資源。另外,由于采用多片高性能FPGA,因此也可以選擇在該平臺上同時運行多個算法,如陣列信號處理中的DOA算法、波束形成算法等。?

??? 以下對端口的定義及說明均是基于實現(xiàn)該算法,而整個系統(tǒng)平臺適用于多種大計算量的數(shù)字信號處理。?

2 系統(tǒng)硬件架構(gòu)?

??? 本系統(tǒng)利用1片Altera 公司的EP1S20F780C7芯片作為橋芯片,負責(zé)加載本地橋模塊、配置算法FPGA、DMA操作、數(shù)據(jù)輪詢下發(fā)以及運算結(jié)果上行接收和中斷;采用4片Altera公司的 EP2S60F484C5作為數(shù)據(jù)處理芯片,可以加載不同的信號處理算法,從而實現(xiàn)平臺的通用化。?

??? 在該系統(tǒng)架構(gòu)中,PCI橋模塊的設(shè)計實現(xiàn)、DMA狀態(tài)機的操作流程和中斷的處理是其中的重點和難點,下面分別予以說明。?

2.1 PCI橋模塊的設(shè)計?

??? 在本系統(tǒng)中,為了縮短開發(fā)周期,采用了Altera公司的IP軟核PCI_mt64,這樣系統(tǒng)的設(shè)計就規(guī)避了PCI局部總線規(guī)范和PCI配置寄存器的實現(xiàn),而能夠集中精力進行本地橋模塊的設(shè)計。本地橋模塊結(jié)構(gòu)如圖1所示,其基本設(shè)計思想如下:?

?

?

??? (1)橋模塊要實現(xiàn)對I/O空間與Memory空間的管理、各種控制信號(包括中斷)的產(chǎn)生和數(shù)據(jù)流的處理。其中,I/O空間定義一般寄存器和中斷寄存器;Memory空間則包括了DMA寄存器和FIFO初始地址寄存器,其又包括以下子模塊:Interrupt模塊、FIFO管理模塊和DMA引擎(FIFO、Memory空間實現(xiàn)方式)。其中FIFO管理模塊又可根據(jù)功能劃分為三個部分:橋FIFO(Bridge FIFO)、結(jié)果數(shù)據(jù)FIFO(Result FIFO)和FPGA配置FIFO(FPGA Configure FIFO)。?

??? 中斷模塊發(fā)出DMA傳輸?shù)南嚓P(guān)控制中斷,如完成中斷、算法運算結(jié)果的相關(guān)中斷。在本系統(tǒng)中,算法結(jié)果中斷分為三種,分別對應(yīng)于運算有結(jié)果、運算中斷查詢和運算無結(jié)果,這三種類型中斷由算法FPGA通過串行接口通知橋模塊。由于串行命令的可編碼,因此中斷種類可以根據(jù)不同的算法、不同的場合而更改。?

??? 在橋模塊中,最重要的部分是主從控制模塊的實現(xiàn),其功能是執(zhí)行與PCI-core的交互、響應(yīng)PCI中的控制信號,并發(fā)出相應(yīng)的、符合PCI時序的主從控制信號。?

??? (2)主從控制模塊中,Local Target部分只負責(zé)對32位寄存器的讀寫,功能較為簡單,不需要啟動DMA操作,在Linux驅(qū)動中可以在IOCTL中通過writeX( )和readX( )兩個函數(shù)對存儲空間進行讀寫,也可以通過inX( )和outX( )兩個函數(shù)對I/O空間讀寫寄存器。其中X表示數(shù)據(jù)類型:l表示long word,w表示short word,b表示byte[4]。?

??? (3) Local Master要進行大數(shù)據(jù)量讀寫,需要兼容32/64位,同時與DMA模塊配合完成DMA數(shù)據(jù)傳輸,因此功能較為復(fù)雜。具體說明如下:?

??? 數(shù)據(jù)上行:上行數(shù)據(jù)(解密結(jié)果)由算法FPGA通過串行通信發(fā)送至橋模塊,并經(jīng)過串并轉(zhuǎn)換存入Result FIFO,同時通知中斷產(chǎn)生模塊產(chǎn)生中斷。PC機接收到中斷后即準備讀取數(shù)據(jù):PC機端設(shè)置DMA寄存器(ACR、BCR、CSR),然后本地端根據(jù)DMA寄存器CSR的設(shè)置啟動DMA操作,完成Master寫的流程。?

??? 數(shù)據(jù)下行:由于下行數(shù)據(jù)(窮舉破解使用的密鑰)數(shù)據(jù)量大,而本地端的存儲空間有限,因此系統(tǒng)采用由PC機端設(shè)置DMA寄存器(一般設(shè)置為16KB),而本地端根據(jù)寄存器和存儲空間狀況,實現(xiàn)下列操作:啟動DMA、申請PCI總線、第一次PCI數(shù)據(jù)傳輸、傳輸完畢后判斷數(shù)據(jù)是否全部被傳輸,如未全部完成則再次申請PCI傳輸直到所有數(shù)據(jù)傳輸完成,此時申請DMA完成中斷。這個過程即是Master讀的流程。?

??? 在上下行的數(shù)據(jù)通路中,DMA的啟動首先是由PC機端寫入DMA控制寄存器(字節(jié)計數(shù)寄存器BCR,地址計數(shù)寄存器ACR)開始,再寫入控制狀態(tài)寄存器CSR中的啟動位。主從控制模塊檢測到啟動位置高后,即開始DMA主模式狀態(tài)機的實現(xiàn)。?

2.2 主模式下狀態(tài)機的實現(xiàn)?

??? 主動傳輸時DMA狀態(tài)機的實現(xiàn)如圖2所示,其各狀態(tài)說明(DMA狀態(tài)機的編號與圖2相對應(yīng),如表1所示。其中重要的狀態(tài)轉(zhuǎn)移條件說明如下:?

?

?

?

??? (1) WR_BUSY轉(zhuǎn)DONE:PC請求的數(shù)據(jù)全部傳輸完成,或上行FIFO空,或DMA從設(shè)備要求斷開。?

??? (2) RETRY轉(zhuǎn)DONE:當申請再一次的PCI數(shù)據(jù)傳輸時,檢查下一次需要傳輸?shù)臄?shù)據(jù)量是否滿足PCI傳輸?shù)囊螅鐥l件不滿足,轉(zhuǎn)入DONE。?

??? (3) RD_BUSY轉(zhuǎn)DONE:PCI數(shù)據(jù)傳輸尚未結(jié)束,下行FIFO已滿,或本次PCI傳輸結(jié)束,并且DMA_BCR要求的數(shù)據(jù)已全部傳輸結(jié)束,或DMA從設(shè)備要求斷開?

??? (4) RD_BUSY轉(zhuǎn)RETRY:當本次PCI進入傳輸期、PCI總線要求重新申請時,或者當前PCI的數(shù)據(jù)傳輸結(jié)束,而未傳完DMA_BCR要求的數(shù)據(jù)量。?

??? (5) IDLE轉(zhuǎn)LOAD:DMA_CSR寄存器啟動位置位,DMA_BCR符合DMA傳輸要求,本地端下行FIFO可寫或上?

行FIFO內(nèi)有數(shù)據(jù)。?

2.3 DMA方式?

??? Altera公司的PCI_mt64對進行內(nèi)存讀寫的單次PCI傳輸數(shù)據(jù)量的限制:如果用總線Memory Read命令,則每次僅可以傳輸16個字節(jié)的數(shù)據(jù);如果總線用Memory Read Multiple命令,則每次最多可以傳輸4 096B的數(shù)據(jù)。由于本系統(tǒng)的目的在于運行MD5快速解密算法,PC經(jīng)PCI下發(fā)到設(shè)備的數(shù)據(jù)量是巨大的(GB量級),若由PC機端來進行多次寫DMA寄存器然后啟動DMA,則其軟件耗時不可忍受;而當該平臺應(yīng)用于實時數(shù)據(jù)處理時,軟件耗時必須盡可能減小。因此,需要設(shè)計一種新的DMA傳輸方式:即由PC機端寫一次DMA寄存器,而由本地端進行多次DMA申請。?

??? 圖3給出了當PC機申請16KB數(shù)據(jù)傳輸時,一次PCI傳輸即4 096字節(jié)傳輸完、等待7個時鐘周期后(狀態(tài)Retry,mst_state = 6),再次申請總線并開始PCI傳輸?shù)倪^程。?

?

?

??? 鏈式DMA可以認為是一組DMA的進行,并且每次DMA的數(shù)據(jù)包大小和地址可以不同[5]。同樣這里采用的DMA也可以認為是一組DMA的進行,與鏈式DMA的區(qū)別在于DMA的讀寫地址必須是連續(xù)的,而相同點在于與每次傳輸?shù)臄?shù)據(jù)包的大小也是可以調(diào)節(jié)的。在DMA數(shù)據(jù)地址是連續(xù)的情況下,與鏈式DMA要寫入多次DMA描述符相比,本系統(tǒng)采用的DMA方式只需要寫一次DMA描述符,因此可以更有效率地完成DMA操作,其操作流程參如圖4所示。同時由于本系統(tǒng)狀態(tài)機中已存在的LOAD狀態(tài),若該狀態(tài)用于從DMA描述符FIFO中讀取描述符,則本文的DMA狀態(tài)機也可以用來實現(xiàn)鏈式DMA。?

?

?

2.4 Linux中斷處理?

??? Linux對于中斷的處理與Windows是不同的,比較靈活,下面作簡單介紹。?

??? Windows中斷處理,首先在中斷響應(yīng)函數(shù)中對PCI中斷做判斷,如果是本設(shè)備的中斷則做簡單操作(非數(shù)據(jù)處理),然后調(diào)用DPC(延時過程調(diào)用)例程,在中斷處理函數(shù)中做中斷處理中未完成的操作,如將數(shù)據(jù)由內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū)。

??? 對比Windows,Linux的中斷設(shè)計采用頂半部和底半部兩部分實現(xiàn):頂半部相當于中斷響應(yīng)函數(shù);底半部相當于Windows中的延時過程調(diào)用;Linux的底半部可以使用多種方式實現(xiàn),使用tasklet或者workqueue即可以實現(xiàn)操作。?

??? 普通的Linux中斷函數(shù)為void Demo_interrupt(int irq, void * dev_id, struct pt_regs * regs),如需要實現(xiàn)底半部(bottom half)時,首先使用頂半部中斷處理函數(shù):?

??? Irqreturn_t Demo_bh_interrupt (int irq, void * dev_id,struct pt_regs * regs) {?

??? /* …… */?

??? Tasklet_schedule(&Demo_tasklet);?//調(diào)用Demo_do_tasklet?

??? /* …… */?

??? Return IRQ_HANDLED;??? }?

??? 底半部函數(shù):void Demo_do_tasklet (unsigned long)。?

??? 在使用tasklet之前,首先需使用DECLARE_TASKLET(Demo_tasklet, Demo_do_tasklet, data)申明tasklet,但也可以使用struct work_queue Demo_wq申明work queue(工作隊列);申明之后需要將后半部處理函數(shù)Demo_do_tasklet ( )放入工作隊列中,可以使用下面的函數(shù):INIT_WORK(&Demo_wq, Demo_do_tasklet, NULL)。工作隊列的后半部函數(shù)與tasklet相同。?

3 設(shè)計結(jié)果與實測性能分析?

??? 使用VHDL編寫代碼,利用邏輯分析儀對運行在實際硬件上的PCI橋代碼進行分析,圖5為邏輯分析儀上所截得時序圖、PCI關(guān)鍵信號(包括被動模式和主動模式的)。?

?

?

??? 使用Altera的Quartus II 7.1對程序進行設(shè)計綜合,PCI接口最低時鐘頻率為80MHz。綜合生成網(wǎng)表文件,下載到FPGA,經(jīng)過實際測試,系統(tǒng)運行正常,其橋模塊占用4 913邏輯單元和557 056位的存儲單元。用安捷倫1 681AD型邏輯分析儀分析測試PCI關(guān)鍵信號,其結(jié)果:系統(tǒng)每傳輸16KB數(shù)據(jù)的總時間為164.487μs,數(shù)據(jù)傳輸時間為130.975μs,系統(tǒng)開銷為33.512μs,效率為79.5%。而與普通非鏈式DMA傳輸16KB數(shù)據(jù)的總時間比較,以32位66MHz頻率的PCI系統(tǒng)為測試平臺,可以得到如表2所示的結(jié)果。?

?

?

??? 從表2可以看出,本文所設(shè)計的DMA方法之所以效率會比傳統(tǒng)的非鏈式DMA的方法要高,在于軟件響應(yīng)的時間大大縮短,當要傳送的數(shù)據(jù)量越大時,DMA的平均數(shù)據(jù)率就會越高。?

??? 本文設(shè)計的系統(tǒng)平臺已經(jīng)成功地應(yīng)用于MD5的解密。通過實際性能的測試,基于IP-core的64位接口設(shè)計完全達到了預(yù)期的性能目標,并且該平臺可以滿足大運算量、實時性要求高的數(shù)字信號處理算法的要求。下一階段的工作,將在該平臺上實現(xiàn)陣列信號處理的算法,以達到高速實時處理,減少資源耗費的目的。?

參考文獻?

[1]?Altera Corporation. PCI local bus?specification revison 2.2. 1998.?

[2]?Altera Corporation. PCI megacore?function user guide. 2003.?

[3]?Altera Corporation. PCI-MT64 megacore function reference design. 2003.?

[4] CORBET J,RUBINI A,HARTMAN?G K. Linux?device driver 3rd. O′Reilly, 2005.?

[5]?張浩,徐寧儀,周祖成.基于PCI Core的鏈式DMA控制器設(shè)計. 計算機應(yīng)用, 2005,(3).

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美午夜电影网| 一区在线观看| 男人的天堂亚洲在线| 久久国产88| 欧美在线日韩| 欧美在线地址| 欧美伊久线香蕉线新在线| 午夜国产不卡在线观看视频| 亚洲制服少妇| 先锋影音网一区二区| 小辣椒精品导航| 欧美一级视频一区二区| 欧美一二区视频| 欧美亚洲免费电影| 欧美一区深夜视频| 久久精品99国产精品日本| 久久福利资源站| 久久久99爱| 久久综合色综合88| 欧美电影免费观看| 欧美人在线观看| 国产精品videosex极品| 国产精品一区在线播放| 国产日本欧美一区二区| 国产视频自拍一区| 韩日精品视频| 亚洲国产精品一区二区第一页| 亚洲黄色三级| 99精品视频一区| 亚洲综合欧美日韩| 亚洲国产1区| 一本色道久久综合亚洲精品高清| 亚洲午夜国产一区99re久久| 午夜精品亚洲| 久久综合伊人| 欧美日本国产| 国产精品午夜久久| 一区二区视频欧美| 亚洲精品在线电影| 亚洲午夜av| 久久精品人人做人人综合 | 亚洲视频你懂的| 欧美一区二区三区啪啪| 久久中文精品| 欧美日精品一区视频| 国产日韩久久| 亚洲国产精品一区二区尤物区| 日韩视频不卡| 欧美在线一区二区| 日韩一级黄色大片| 欧美在线视频a| 欧美黑人一区二区三区| 国产精品美女视频网站| 经典三级久久| 中文欧美日韩| 亚洲第一毛片| 亚洲欧美成人一区二区在线电影| 久久精品人人做人人综合| 欧美精品激情| 国产女主播一区二区三区| 亚洲第一二三四五区| 亚洲一区国产| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲激情成人网| 午夜国产精品影院在线观看 | 亚洲精品永久免费精品| 午夜精品在线| 99精品99久久久久久宅男| 性8sex亚洲区入口| 欧美韩国日本一区| 国产亚洲欧美日韩精品| 99精品国产99久久久久久福利| 欧美在线观看视频在线| 亚洲一区精彩视频| 欧美成人激情视频| 国产一区二区三区久久久久久久久| 日韩视频国产视频| 亚洲激情小视频| 欧美在线视频一区二区| 欧美日韩国产在线播放网站| 国产综合av| 亚洲欧美精品| 国产精品99久久久久久久vr| 久久一本综合频道| 国产伦精品一区二区三| 99在线|亚洲一区二区| 最新日韩精品| 久久综合久久综合久久综合| 国产精品欧美久久| 99re6这里只有精品视频在线观看| 亚洲国产日韩在线| 久久久综合精品| 国产精品亚洲成人| 中文在线资源观看网站视频免费不卡| 亚洲美女福利视频网站| 久久午夜精品| 国产欧美日韩综合精品二区| 中国亚洲黄色| 中文在线一区| 欧美另类极品videosbest最新版本| 国产一区二区三区在线观看精品| 亚洲一区二区在| 亚洲免费人成在线视频观看| 欧美日本免费| 最新中文字幕亚洲| 亚洲日韩视频| 欧美成人自拍视频| 在线欧美影院| 亚洲精品婷婷| 欧美激情在线| 亚洲精品久久在线| 日韩视频一区二区三区在线播放免费观看 | 老司机亚洲精品| 伊人精品视频| 亚洲国产精品第一区二区| 久久久夜精品| 狠狠色狠狠色综合| 久久国产精品久久精品国产| 欧美一区二区女人| 国产午夜亚洲精品羞羞网站| 欧美亚洲综合另类| 久久久91精品国产| 黄色亚洲免费| 亚洲国产日韩美| 欧美国产精品劲爆| 最新热久久免费视频| 日韩亚洲一区二区| 欧美日韩一区二区免费在线观看| 亚洲剧情一区二区| 亚洲一级在线| 国产精品入口麻豆原神| 午夜日韩电影| 久久夜色精品国产欧美乱| 亚洲高清电影| 在线视频亚洲欧美| 国产精品美女一区二区| 性色av一区二区三区| 久久久久久久999| 亚洲丰满少妇videoshd| 999亚洲国产精| 国产精品a级| 亚洲欧美中文字幕| 美女日韩欧美| 99视频一区二区三区| 欧美亚洲在线观看| 狠狠久久亚洲欧美| 亚洲九九九在线观看| 欧美视频网站| 欧美一级大片在线免费观看| 久久久久五月天| 亚洲激情在线播放| 亚洲专区在线视频| 国产日韩欧美91| 亚洲黄一区二区| 欧美日韩一区二区三区免费看| 正在播放欧美一区| 久久久午夜精品| 亚洲精品美女在线观看| 午夜精品美女久久久久av福利| 国产一区二区三区久久久久久久久| 亚洲日本电影在线| 国产精品久久久久毛片大屁完整版 | 亚洲欧洲视频在线| 亚洲专区国产精品| 红桃av永久久久| 一区二区三区视频在线| 国产精品视频精品| 亚洲精品一区二区三区婷婷月| 国产精品极品美女粉嫩高清在线| 久久精品国产2020观看福利| 欧美日本高清一区| 欧美一区二区免费视频| 欧美日韩不卡视频| 欧美有码视频| 欧美日韩精品免费看| 欧美在线综合视频| 欧美日韩高清免费| 久久aⅴ乱码一区二区三区| 欧美日韩在线观看一区二区三区| 欧美呦呦网站| 国产精品第一页第二页第三页| 亚洲高清视频中文字幕| 国产精品成人一区二区网站软件| 亚洲大胆av| 国产精品毛片va一区二区三区| 亚洲三级色网| 国产一区二区av| 亚洲午夜一区二区| 1769国内精品视频在线播放| 欧美影院久久久| 亚洲理论在线观看| 欧美+亚洲+精品+三区| 亚洲欧美中文另类| 欧美日在线观看| 亚洲人成毛片在线播放| 国产一区二区电影在线观看| 亚洲中字在线| 亚洲精品中文字幕女同| 久久综合九九| 欧美一区二区国产|