《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的PCI總線接口多通道DMA控制器的設(shè)計(jì)與實(shí)現(xiàn)
基于FPGA的PCI總線接口多通道DMA控制器的設(shè)計(jì)與實(shí)現(xiàn)
吳 杰 張保平
摘要: 利用FPGA芯片設(shè)計(jì)PCI總線接口的多通道DMA控制器的基本原理及實(shí)現(xiàn)方法,。
關(guān)鍵詞: FPGA PCI總線 DMA控制器 QuickLogic
Abstract:
Key words :

  摘  要: 利用FPGA芯片設(shè)計(jì)PCI總線接口的多通道DMA控制器的基本原理及實(shí)現(xiàn)方法。
  關(guān)鍵詞: FPGA  PCI  DMA  BD

   在現(xiàn)代測控系統(tǒng)和通信領(lǐng)域,,對(duì)數(shù)據(jù)傳輸速率要求越來越高,。對(duì)于一般的多通道通信應(yīng)用,為了減輕CPU負(fù)擔(dān)實(shí)現(xiàn)數(shù)據(jù)的高速傳輸,采用多路DMA控制器進(jìn)行DMA方式傳輸尤其重要。此外,總線性能也是制約通信能力的重要因素,,ISA、EISA和MCA等擴(kuò)展總線已無法適應(yīng)高速數(shù)據(jù)傳輸?shù)囊?,而PCI局部總線以其優(yōu)異的性價(jià)比和適應(yīng)性已成為大多數(shù)系統(tǒng)的主流總線,。多通道DMA控制器提供PCI和Local 2種總線接口,實(shí)現(xiàn)了CPU和通信控制器之間數(shù)據(jù)的DMA方式傳輸控制,;支持burst傳輸和BD操作,,完成二總線上多通道之間的總線仲裁和狀態(tài)轉(zhuǎn)換。因此,,利用FPGA芯片設(shè)計(jì)實(shí)現(xiàn)PCI界面的多通道DMA控制器成為多通道高速通信的首選解決方案,。
1  芯片選擇和設(shè)計(jì)應(yīng)用
  本設(shè)計(jì)選用Quicklogic公司的QL5232-208  FPGA芯片來滿足設(shè)計(jì)要求。QL5232-208可提供32位/33MHz PCI Master/Target ESP(硬核),,支持3.3V/5V PCI接口應(yīng)用環(huán)境,,符合PCI2.2規(guī)范。QL5232 有12萬門,、1 302個(gè)邏輯單元,,25 344位的RAM可用于構(gòu)建FIFO。目前的設(shè)計(jì)可實(shí)現(xiàn)4通道雙向DMA控制器,。內(nèi)部控制器和接口邏輯用VHDL語言實(shí)現(xiàn),,移植方便,可以加快開發(fā)進(jìn)程,。
  本多通道DMA控制器設(shè)計(jì)已經(jīng)應(yīng)用于路由器中多通道高速同步串行接口模塊,,其硬件框圖如圖1所示。它與CPU接口采用標(biāo)準(zhǔn)的32位PCI總線,,可以接多至5個(gè)高速串口模塊,,每個(gè)模塊可提供8個(gè)同/異步串行接口(V35/V28接口),同步串口速率可達(dá)2Mbps,。最大傳輸速率可達(dá)132MBps,,與后端控制器采用Local Bus接口。CPU采用Motorola 公司的MPC8240,,串口通信控制器采用SIEMENS公司的SAB82538(8串口同/異步串口通信控制器),。

 

2  多通道DMA控制器功能模塊
  多通道DMA控制器與CPU接口采用32位/33MHz PCI2.2局部總線,接口線包括CLK,、FRAME#,、TRDY#,、IRDY#、STOP#,、DEVSEL#,、IDSEL、AD[31:0],、C/BE[3:0]、PERR#,、SERR#,、REQ#、GNT#,、RST#,。與串口通信控制器采用Local Bus,接口信號(hào)線包括LCLK,、LHOLD,、LHOLDA、ADS#,、LW/R#,、BLAST#、LA[31:2],、LD[31:0],。
FPGA芯片包括ESP(PCI內(nèi)核)和可編程邏輯。ESP與CPU接口提供標(biāo)準(zhǔn)的PCI總線,,與內(nèi)部邏輯提供主/從控制器接口線,;可編程邏輯部分包括內(nèi)部寄存器、配置空間,、Slave直接寫模式,、DMA讀、DMA寫等功能模塊,。其內(nèi)部結(jié)構(gòu)框圖如圖2所示,。

 


  ESP是FPGA芯片內(nèi)含的硬核PCI 控制器,符合32位/33MHz PCI 2.2規(guī)范的主/從(Master/Target)控制器,。ESP作為Master時(shí),,支持0插入等待周期的PCI burst傳輸;作為Target時(shí),,讀操作插入3個(gè)等待周期,,寫操作自動(dòng)插入2個(gè)等待周期。PCI Master接口提供Mst_Burst_Req(Input)信號(hào),,由用戶控制請(qǐng)求使用PCI總線,。PCI Target接口提供Usr_Select,、Usr_Rdy(Input)信號(hào)由用戶控制設(shè)備地址是否譯碼選中及Target設(shè)備是否準(zhǔn)備好,可用于插入等待周期,;提供Usr_Adr_Valid(Output)信號(hào)則通知設(shè)備地址期開始,,地址和命令信息有效;提供Usr_Adr_Inc(Output)信號(hào)則指示前一個(gè)數(shù)據(jù)傳輸結(jié)束,,地址應(yīng)該增加,。此外,與用戶可編程的接口還提供讀寫信號(hào),、地址數(shù)據(jù)線,、命令/字節(jié)使能線、系統(tǒng)出錯(cuò)報(bào)告等信號(hào)線,。
  內(nèi)部寄存器包括DMA命令狀態(tài)寄存器,、中斷結(jié)果寄存器、BD list首址寄存器,、PCI通道訪問地址寄存器,、Local Bus通道訪問地址寄存器、DMA長度計(jì)數(shù)器(包括PCI總線DWORD計(jì)數(shù)器和Local Bus字節(jié)計(jì)數(shù)器),。為節(jié)省資源,,用RAM實(shí)現(xiàn)這些寄存器功能。配置空間實(shí)現(xiàn)標(biāo)準(zhǔn)的256字節(jié)寄存器空間配置,?;芳拇嫫饔玫?0位要求210字節(jié)的PCI空間。配置空間模塊還實(shí)現(xiàn)地址和讀寫譯碼功能,。
  多通道DMA控制器模塊是設(shè)計(jì)的核心,,主要完成對(duì)內(nèi)部寄存器Target的讀寫及對(duì)后端接口芯片直接存取模式和DMA傳輸功能。DMA傳輸時(shí),,DMA控制器在PCI總線和Local總線上都作為Master,。配置空間操作結(jié)束后,通過Target操作讀寫內(nèi)部寄存器和后端芯片片內(nèi)寄存器,。DMA讀寫使能后,,控制器自動(dòng)完成傳輸全過程:包括二總線上請(qǐng)求、總線仲裁,、讀寫傳輸,。
  FIFO用于實(shí)現(xiàn)總線速率匹配。PCI總線為32位/33MHz,,而Local總線僅為16位/10MHz,。因而為提高總線利用率,每個(gè)DMA通道需要一個(gè)32位的FIFO用于數(shù)據(jù)暫存,,以實(shí)現(xiàn)PCI總線和Local 總線間的速率匹配,,支持多通道同時(shí)通信傳輸,。
3  功能實(shí)現(xiàn)
  DMA控制器內(nèi)部訪問操作可分為Direct Slave mode 模式和DMA mode模式。
3.1 Direct Slave mode模式直接訪問操作
  CPU訪問DMA控制器內(nèi)部寄存器,、后端通信控制器SAB82538內(nèi)部寄存器或SAB82538 I/O口(中斷方式)的操作都屬于Direct Slave mode模式,。CPU對(duì)配置空間寄存器訪問操作完全遵循標(biāo)準(zhǔn)的PCI總線配置讀寫操作時(shí)序,對(duì)DMA控制器內(nèi)其他寄存器的讀寫操作符合PCI Target訪問時(shí)序,。完整的訪問周期包括:地址期Usr_Adr_Valid信號(hào)有效時(shí),,配置空間實(shí)現(xiàn)地址和讀寫命令譯碼,若設(shè)備選中則Usr_Select信號(hào)有效并通知內(nèi)核響應(yīng)DEVSEL#,、TRDY#信號(hào)有效,;IRDY#信號(hào)有效時(shí)則完成一次數(shù)據(jù)傳輸,同時(shí)Usr_Adr_Inc信號(hào)有效地址自動(dòng)增加,。
CPU對(duì)后端通信控制器進(jìn)行訪問時(shí),包括PCI總線和Local總線上的讀寫操作,。PCI總線仍需符合PCI Target訪問時(shí)序,。由于數(shù)據(jù)要通過FIFO實(shí)現(xiàn)二總線速率匹配,且FIFO僅暫存數(shù)據(jù)而不保留地址等其他信息,,故要求CPU連續(xù)發(fā)起對(duì)后端的訪問時(shí),,必須確定前次的Local總線訪問已經(jīng)結(jié)束,才能響應(yīng)新的數(shù)據(jù)傳輸,。尤其是寫操作時(shí)會(huì)出現(xiàn)Local總線滯后于PCI總線操作的情況,,故必須在PCI訪問時(shí)序中插入等待周期,否則會(huì)造成數(shù)據(jù)丟失錯(cuò)誤,。此問題可以通過判斷上次Local訪問是否結(jié)束來決定Usr-Rdy狀態(tài),,控制TRDY#信號(hào)是否響應(yīng)來解決。
3.2 DMA mode模式DMA訪問操作
  DMA傳輸時(shí)需要CPU初始化DMA控制器內(nèi)部相關(guān)寄存器,,之后,,DMA作為PCI master和Local master自動(dòng)完成多通道總線仲裁和數(shù)據(jù)傳輸。Direct Slave mode比DMA mode優(yōu)先級(jí)高,,即Local總線DMA數(shù)據(jù)傳輸可能被CPU訪問后端控制器操作而中止,。
  完整的DMA操作過程可分為PCI總線和Local總線操作。發(fā)送時(shí)數(shù)據(jù)通過PCI總線從系統(tǒng)Memory到DMA內(nèi)部發(fā)送FIFO,,再從DMA FIFO通過Local總線到SAB82538 XFIFO,。接收時(shí)數(shù)據(jù)通過Local總線將數(shù)據(jù)從SAB82538 RFIFO傳到DMA內(nèi)部接收FIFO,然后再通過PCI總線操作將數(shù)據(jù)寫入系統(tǒng)Memory,。DMA 控制器在2種總線上均為Master,,其內(nèi)部FIFO起二總線速率匹配作用。數(shù)據(jù)在二總線上的操作并沒有直接的關(guān)系,,僅通過DMA內(nèi)部FIFO狀態(tài)實(shí)現(xiàn)控制,。
  (1)Local Bus DMA訪問操作,。該訪問操作即是后端通信控制器SAB82538和DMA控制器之間的數(shù)據(jù)傳輸。SAB82538工作在Demand mode和非Demand mode模式,。非Demand mode時(shí),,Local總線傳輸僅由DMA決定是否結(jié)束控制,不考慮后端通信控制器狀態(tài),。在Demand mode時(shí),,Local總線傳輸過程由SAB82538控制DRT/DRR信號(hào)是否有效來決定請(qǐng)求或撤消讀寫控制。SAB82538內(nèi)部有DRT0~7,、DRR0~7共16個(gè)信號(hào)分別用于8個(gè)通道的DMA讀,、寫請(qǐng)求。
  設(shè)計(jì)中Local總線的發(fā)送采用Demand mode模式,。CPU寫SAB82538內(nèi)部發(fā)送長度計(jì)數(shù)器并使能相關(guān)通道發(fā)送后,,SAB82538發(fā)DRT請(qǐng)求,經(jīng)仲裁獲得Local總線且DMA對(duì)應(yīng)通道的發(fā)送FIFO非空,,則數(shù)據(jù)從16位Local總線發(fā)送到SAB82538 XFIFO,;若DRT撤消或DMA FIFO空,則Local傳輸暫停,;如果DMA未完成,,則等下一次DRT請(qǐng)求時(shí)仍按上述操作進(jìn)行,直到傳輸結(jié)束,。一次發(fā)送DMA過程可能會(huì)有多次暫停,,因?yàn)镾AB82538 XFIFO限制每次DRT請(qǐng)求最多可接收32字節(jié),需要多次DRT請(qǐng)求才能完成一個(gè)幀發(fā)送,。若Local總線發(fā)送采用非Demand mode模式,,則不管DRT的狀態(tài)如何,只要DMA內(nèi)部發(fā)送FIFO非空,,即請(qǐng)求Local總線傳輸,,不適于與SAB82538接口。
  設(shè)計(jì)中Local總線接收操作采用非Demand mode模式,。SAB82538驅(qū)動(dòng)DRR信號(hào)請(qǐng)求接收,,通過DMA控制器產(chǎn)生中斷通知CPU,CPU讀相應(yīng)中斷結(jié)果寄存器并初始化DMA相應(yīng)通道接收寄存器,,啟動(dòng)一次DMA傳輸,。初始化后通道請(qǐng)求Local總線傳輸,獲得總線后數(shù)據(jù)從SAB82538 RFIFO傳送到DMA對(duì)應(yīng)通道接收FIFO,,直到DMA 接收FIFO滿或DMA傳輸完成,,Local總線操作即停止。采用Demand mode模式時(shí)不需要初始化接收長度寄存器,。當(dāng)DRR請(qǐng)求并獲得Local總線后即開始數(shù)據(jù)傳輸,,直到DRR撤消請(qǐng)求,,但在與SAB82538接口時(shí)不適用。
  Local總線共有4個(gè)雙向通道,,在總線空閑時(shí)根據(jù)4個(gè)通道請(qǐng)求按輪流優(yōu)先級(jí)原則實(shí)現(xiàn)總線仲裁,。在每個(gè)通道內(nèi)部,發(fā)送和接收操作按固定優(yōu)先級(jí)仲裁,,二者結(jié)合最終決定獲得總線權(quán)的通道操作,。在總線有效的通道DMA操作過程中,可以被更高優(yōu)先級(jí)的直接存取模式操作中止,,但不能被其他通道DMA操作中斷,,必須在DMA自動(dòng)撤消請(qǐng)求從而使總線進(jìn)入空閑狀態(tài)時(shí)才能進(jìn)行新的總線仲裁,進(jìn)入下一次通道操作,。
  (2)PCI總線DMA訪問操作,。該操作共有27種狀態(tài):總線空閑、最后周期讀/寫操作,、DMA發(fā)送/接收操作時(shí)讀BD,、DMA讀/寫傳輸、發(fā)送或接收結(jié)束回寫B(tài)D標(biāo)志,,如圖3所示,。idle代表總線空閑狀態(tài),;rd_wt/wr_wt分別代表總線進(jìn)入最后讀寫周期狀態(tài),;Rdn/Wrn分別代表DMA讀/寫傳輸狀態(tài);rd_rd_bdn/rd_wr_bdn分別代表DMA發(fā)送/接收時(shí)讀BD狀態(tài), wb_rd_bdn/wb_wr_bdn分別代表DMA發(fā)送/接收結(jié)束時(shí)回寫B(tài)D標(biāo)志狀態(tài)(n=0~3,,表示通道號(hào)),。

 


  發(fā)送/接收時(shí)請(qǐng)求讀BD的條件為DMA讀/寫使能、DMA長度計(jì)數(shù)器為0,、不是最后一個(gè)BD,,請(qǐng)求有效后總線為進(jìn)入rd_rd_bdn/rd_wr_bdn狀態(tài);請(qǐng)求DMA讀寫傳輸?shù)臈l件為DMA長度計(jì)數(shù)器非0,,讀時(shí)FIFO空,,寫時(shí)FIFO非空,請(qǐng)求有效后總線為進(jìn)入Rdn/ Wrn狀態(tài),;回寫發(fā)送/接收BD標(biāo)志的請(qǐng)求條件為DMA長度計(jì)數(shù)器為0,,此請(qǐng)求在通道內(nèi)部具有最高優(yōu)先級(jí)。
  在圖3中,,左半邊為DMA寫操作,,右半邊為DMA讀操作??偩€空閑時(shí)根據(jù)各通道請(qǐng)求進(jìn)行總線仲裁,,進(jìn)入讀/寫B(tài)D或DMA發(fā)送/接收狀態(tài),。在讀/寫傳輸結(jié)束前請(qǐng)求進(jìn)入最后讀/寫周期狀態(tài)??偩€在完成最后數(shù)據(jù)的傳輸后回到空閑狀態(tài),,才能開始再次的總線仲裁進(jìn)入新的工作狀態(tài)。在各個(gè)工作狀態(tài)數(shù)據(jù)傳輸過程中出現(xiàn)系統(tǒng)錯(cuò)誤或校驗(yàn)錯(cuò)誤時(shí),,總線也會(huì)返回空閑狀態(tài),。
  每個(gè)通道有多個(gè)狀態(tài)請(qǐng)求,但只有1個(gè)總線請(qǐng)求信號(hào),。整個(gè)仲裁過程分為通道請(qǐng)求仲裁和通道內(nèi)部狀態(tài)請(qǐng)求仲裁2個(gè)過程,,占用2個(gè)時(shí)鐘周期完成。系統(tǒng)空閑狀態(tài)時(shí),,先按輪流優(yōu)先級(jí)原則對(duì)4個(gè)通道請(qǐng)求仲裁,,判斷下一個(gè)總線占用的通道狀態(tài),并在緊接的下個(gè)周期內(nèi),,對(duì)已獲得總線的通道6種狀態(tài)(讀,、寫、讀BD,、寫B(tài)D,、最后讀周期、最后寫周期)請(qǐng)求按固定優(yōu)先級(jí)原則仲裁,,最終確定獲得總線的通道及其操作,。整個(gè)DMA傳輸過程是:初始化DMA寄存器(BD首址、DMA使能,、狀態(tài)命令初始化)——讀BD狀態(tài)——DMA傳輸——回寫B(tài)D標(biāo)志位,。
  BD既能有效用來對(duì)數(shù)據(jù)進(jìn)行封包用于收發(fā)通信,又要能夠控制DMA的傳輸,,其基本結(jié)構(gòu)包括幀狀態(tài),、SIZE、NEXT BD POINTER,、DATA BUFFER POINTER等,。這些信息由CPU來填寫,而DMA控制器讀取這些信息來控制DMA的傳輸,。CPU只需寫B(tài)D鏈?zhǔn)字返紻MA控制器內(nèi)部寄存器,,而DMA控制器使能后可以自動(dòng)讀取BD的信息,并以這些信息來控制DMA的自動(dòng)傳輸,。DMA傳輸完了BD 所指BUFFER后,,需要回寫結(jié)束標(biāo)志給BD。讀BD狀態(tài)操作共讀取3DWORD,包括DMA地址,、DMA長度及下一個(gè)BD地址,,且數(shù)據(jù)暫存在寄存器中,只有整個(gè)burst傳輸正確完成后,,各暫存值才會(huì)更新相應(yīng)寄存器,,否則,仍要重新請(qǐng)求等待仲裁后再去讀BD狀態(tài),。
  多通道DMA支持burst傳輸操作,,每次burst長度最大設(shè)為8DWORD。當(dāng)DMA長度大于最大burst長度時(shí),,DMA傳輸要分多次完成,,要求在仲裁的第2個(gè)周期更新burst長度計(jì)數(shù)器和DMA地址計(jì)數(shù)器。在DMA傳輸過程中,,地址和長度計(jì)數(shù)器隨數(shù)據(jù)傳輸而改變,。但總線的這2個(gè)寄存器只表示正在傳輸?shù)耐ǖ罓顟B(tài),因此每個(gè)通道的各個(gè)狀態(tài)還需要有各自的地址寄存器和長度計(jì)數(shù)器,,以保存在沒有獲得總線權(quán)時(shí)的信息,。在PCI總線仲裁后,要根據(jù)獲得總線的通道寄存器狀態(tài)更新總線的地址寄存器和burst長度計(jì)數(shù)器,,并要在DMA傳輸過程中保持總線寄存器與正在進(jìn)行操作的通道相應(yīng)寄存器結(jié)果一致,。
  本文介紹了利用FPGA芯片設(shè)計(jì)PCI界面的多通道DMA控制器的實(shí)現(xiàn)方法,經(jīng)過功能仿真和時(shí)序仿真,,可完全實(shí)現(xiàn)多通道的DMA控制功能,,在實(shí)際應(yīng)用中取得了良好效果。
參考文獻(xiàn)
1   侯伯亨.VHDL硬件描述語音與數(shù)字邏輯電路設(shè)計(jì).西安:西安電子科技大學(xué)出版社,,1999
2   李貴山.PCI局部總線.西安:西安電子科技大學(xué)出版社,,1997
3   裘宗燕譯.程序設(shè)計(jì)實(shí)踐.北京:機(jī)械工業(yè)出版社,,2000
4   吳靖譯.IP交換技術(shù)協(xié)議與體系結(jié)構(gòu).北京:機(jī)械工業(yè)出版社,,1999
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。