摘 要: 利用FPGA芯片設計PCI總線接口的多通道DMA控制器的基本原理及實現(xiàn)方法。
關鍵詞: FPGA PCI DMA BD
在現(xiàn)代測控系統(tǒng)和通信領域,,對數(shù)據(jù)傳輸速率要求越來越高,。對于一般的多通道通信應用,為了減輕CPU負擔實現(xiàn)數(shù)據(jù)的高速傳輸,,采用多路DMA控制器進行DMA方式傳輸尤其重要,。此外,總線性能也是制約通信能力的重要因素,,ISA,、EISA和MCA等擴展總線已無法適應高速數(shù)據(jù)傳輸?shù)囊螅鳳CI局部總線以其優(yōu)異的性價比和適應性已成為大多數(shù)系統(tǒng)的主流總線,。多通道DMA控制器提供PCI和Local 2種總線接口,,實現(xiàn)了CPU和通信控制器之間數(shù)據(jù)的DMA方式傳輸控制;支持burst傳輸和BD操作,,完成二總線上多通道之間的總線仲裁和狀態(tài)轉換,。因此,利用FPGA芯片設計實現(xiàn)PCI界面的多通道DMA控制器成為多通道高速通信的首選解決方案,。
1 芯片選擇和設計應用
本設計選用Quicklogic公司的QL5232-208 FPGA芯片來滿足設計要求,。QL5232-208可提供32位/33MHz PCI Master/Target ESP(硬核),支持3.3V/5V PCI接口應用環(huán)境,,符合PCI2.2規(guī)范,。QL5232 有12萬門、1 302個邏輯單元,,25 344位的RAM可用于構建FIFO,。目前的設計可實現(xiàn)4通道雙向DMA控制器。內(nèi)部控制器和接口邏輯用VHDL語言實現(xiàn),,移植方便,,可以加快開發(fā)進程。
本多通道DMA控制器設計已經(jīng)應用于路由器中多通道高速同步串行接口模塊,其硬件框圖如圖1所示,。它與CPU接口采用標準的32位PCI總線,,可以接多至5個高速串口模塊,每個模塊可提供8個同/異步串行接口(V35/V28接口),,同步串口速率可達2Mbps,。最大傳輸速率可達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,,接口信號線包括LCLK、LHOLD,、LHOLDA,、ADS#、LW/R#,、BLAST#,、LA[31:2]、LD[31:0],。
FPGA芯片包括ESP(PCI內(nèi)核)和可編程邏輯,。ESP與CPU接口提供標準的PCI總線,與內(nèi)部邏輯提供主/從控制器接口線,;可編程邏輯部分包括內(nèi)部寄存器,、配置空間、Slave直接寫模式,、DMA讀,、DMA寫等功能模塊,。其內(nèi)部結構框圖如圖2所示。
ESP是FPGA芯片內(nèi)含的硬核PCI 控制器,,符合32位/33MHz PCI 2.2規(guī)范的主/從(Master/Target)控制器,。ESP作為Master時,支持0插入等待周期的PCI burst傳輸,;作為Target時,,讀操作插入3個等待周期,寫操作自動插入2個等待周期,。PCI Master接口提供Mst_Burst_Req(Input)信號,,由用戶控制請求使用PCI總線。PCI Target接口提供Usr_Select,、Usr_Rdy(Input)信號由用戶控制設備地址是否譯碼選中及Target設備是否準備好,,可用于插入等待周期;提供Usr_Adr_Valid(Output)信號則通知設備地址期開始,,地址和命令信息有效,;提供Usr_Adr_Inc(Output)信號則指示前一個數(shù)據(jù)傳輸結束,地址應該增加,。此外,,與用戶可編程的接口還提供讀寫信號、地址數(shù)據(jù)線,、命令/字節(jié)使能線,、系統(tǒng)出錯報告等信號線。
內(nèi)部寄存器包括DMA命令狀態(tài)寄存器,、中斷結果寄存器,、BD list首址寄存器、PCI通道訪問地址寄存器,、Local Bus通道訪問地址寄存器,、DMA長度計數(shù)器(包括PCI總線DWORD計數(shù)器和Local Bus字節(jié)計數(shù)器)。為節(jié)省資源,,用RAM實現(xiàn)這些寄存器功能,。配置空間實現(xiàn)標準的256字節(jié)寄存器空間配置?;芳拇嫫饔玫?0位要求210字節(jié)的PCI空間,。配置空間模塊還實現(xiàn)地址和讀寫譯碼功能。
多通道DMA控制器模塊是設計的核心,,主要完成對內(nèi)部寄存器Target的讀寫及對后端接口芯片直接存取模式和DMA傳輸功能,。DMA傳輸時,DMA控制器在PCI總線和Local總線上都作為Master。配置空間操作結束后,,通過Target操作讀寫內(nèi)部寄存器和后端芯片片內(nèi)寄存器,。DMA讀寫使能后,控制器自動完成傳輸全過程:包括二總線上請求,、總線仲裁,、讀寫傳輸。
FIFO用于實現(xiàn)總線速率匹配,。PCI總線為32位/33MHz,,而Local總線僅為16位/10MHz。因而為提高總線利用率,,每個DMA通道需要一個32位的FIFO用于數(shù)據(jù)暫存,,以實現(xiàn)PCI總線和Local 總線間的速率匹配,支持多通道同時通信傳輸,。
3 功能實現(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對配置空間寄存器訪問操作完全遵循標準的PCI總線配置讀寫操作時序,對DMA控制器內(nèi)其他寄存器的讀寫操作符合PCI Target訪問時序,。完整的訪問周期包括:地址期Usr_Adr_Valid信號有效時,,配置空間實現(xiàn)地址和讀寫命令譯碼,若設備選中則Usr_Select信號有效并通知內(nèi)核響應DEVSEL#,、TRDY#信號有效,;IRDY#信號有效時則完成一次數(shù)據(jù)傳輸,同時Usr_Adr_Inc信號有效地址自動增加,。
CPU對后端通信控制器進行訪問時,,包括PCI總線和Local總線上的讀寫操作。PCI總線仍需符合PCI Target訪問時序,。由于數(shù)據(jù)要通過FIFO實現(xiàn)二總線速率匹配,,且FIFO僅暫存數(shù)據(jù)而不保留地址等其他信息,故要求CPU連續(xù)發(fā)起對后端的訪問時,,必須確定前次的Local總線訪問已經(jīng)結束,,才能響應新的數(shù)據(jù)傳輸。尤其是寫操作時會出現(xiàn)Local總線滯后于PCI總線操作的情況,,故必須在PCI訪問時序中插入等待周期,,否則會造成數(shù)據(jù)丟失錯誤。此問題可以通過判斷上次Local訪問是否結束來決定Usr-Rdy狀態(tài),,控制TRDY#信號是否響應來解決,。
3.2 DMA mode模式DMA訪問操作
DMA傳輸時需要CPU初始化DMA控制器內(nèi)部相關寄存器,之后,DMA作為PCI master和Local master自動完成多通道總線仲裁和數(shù)據(jù)傳輸,。Direct Slave mode比DMA mode優(yōu)先級高,,即Local總線DMA數(shù)據(jù)傳輸可能被CPU訪問后端控制器操作而中止。
完整的DMA操作過程可分為PCI總線和Local總線操作,。發(fā)送時數(shù)據(jù)通過PCI總線從系統(tǒng)Memory到DMA內(nèi)部發(fā)送FIFO,,再從DMA FIFO通過Local總線到SAB82538 XFIFO。接收時數(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ù)在二總線上的操作并沒有直接的關系,,僅通過DMA內(nèi)部FIFO狀態(tài)實現(xiàn)控制。
(1)Local Bus DMA訪問操作,。該訪問操作即是后端通信控制器SAB82538和DMA控制器之間的數(shù)據(jù)傳輸,。SAB82538工作在Demand mode和非Demand mode模式。非Demand mode時,,Local總線傳輸僅由DMA決定是否結束控制,,不考慮后端通信控制器狀態(tài)。在Demand mode時,,Local總線傳輸過程由SAB82538控制DRT/DRR信號是否有效來決定請求或撤消讀寫控制,。SAB82538內(nèi)部有DRT0~7、DRR0~7共16個信號分別用于8個通道的DMA讀,、寫請求,。
設計中Local總線的發(fā)送采用Demand mode模式。CPU寫SAB82538內(nèi)部發(fā)送長度計數(shù)器并使能相關通道發(fā)送后,,SAB82538發(fā)DRT請求,,經(jīng)仲裁獲得Local總線且DMA對應通道的發(fā)送FIFO非空,則數(shù)據(jù)從16位Local總線發(fā)送到SAB82538 XFIFO,;若DRT撤消或DMA FIFO空,,則Local傳輸暫停;如果DMA未完成,,則等下一次DRT請求時仍按上述操作進行,,直到傳輸結束。一次發(fā)送DMA過程可能會有多次暫停,,因為SAB82538 XFIFO限制每次DRT請求最多可接收32字節(jié),,需要多次DRT請求才能完成一個幀發(fā)送。若Local總線發(fā)送采用非Demand mode模式,,則不管DRT的狀態(tài)如何,,只要DMA內(nèi)部發(fā)送FIFO非空,,即請求Local總線傳輸,不適于與SAB82538接口,。
設計中Local總線接收操作采用非Demand mode模式,。SAB82538驅(qū)動DRR信號請求接收,通過DMA控制器產(chǎn)生中斷通知CPU,,CPU讀相應中斷結果寄存器并初始化DMA相應通道接收寄存器,,啟動一次DMA傳輸。初始化后通道請求Local總線傳輸,,獲得總線后數(shù)據(jù)從SAB82538 RFIFO傳送到DMA對應通道接收FIFO,,直到DMA 接收FIFO滿或DMA傳輸完成,Local總線操作即停止,。采用Demand mode模式時不需要初始化接收長度寄存器,。當DRR請求并獲得Local總線后即開始數(shù)據(jù)傳輸,直到DRR撤消請求,,但在與SAB82538接口時不適用,。
Local總線共有4個雙向通道,在總線空閑時根據(jù)4個通道請求按輪流優(yōu)先級原則實現(xiàn)總線仲裁,。在每個通道內(nèi)部,,發(fā)送和接收操作按固定優(yōu)先級仲裁,二者結合最終決定獲得總線權的通道操作,。在總線有效的通道DMA操作過程中,可以被更高優(yōu)先級的直接存取模式操作中止,,但不能被其他通道DMA操作中斷,,必須在DMA自動撤消請求從而使總線進入空閑狀態(tài)時才能進行新的總線仲裁,進入下一次通道操作,。
(2)PCI總線DMA訪問操作,。該操作共有27種狀態(tài):總線空閑、最后周期讀/寫操作,、DMA發(fā)送/接收操作時讀BD,、DMA讀/寫傳輸、發(fā)送或接收結束回寫B(tài)D標志,,如圖3所示,。idle代表總線空閑狀態(tài);rd_wt/wr_wt分別代表總線進入最后讀寫周期狀態(tài),;Rdn/Wrn分別代表DMA讀/寫傳輸狀態(tài),;rd_rd_bdn/rd_wr_bdn分別代表DMA發(fā)送/接收時讀BD狀態(tài), wb_rd_bdn/wb_wr_bdn分別代表DMA發(fā)送/接收結束時回寫B(tài)D標志狀態(tài)(n=0~3,表示通道號),。
發(fā)送/接收時請求讀BD的條件為DMA讀/寫使能,、DMA長度計數(shù)器為0,、不是最后一個BD,請求有效后總線為進入rd_rd_bdn/rd_wr_bdn狀態(tài),;請求DMA讀寫傳輸?shù)臈l件為DMA長度計數(shù)器非0,,讀時FIFO空,寫時FIFO非空,,請求有效后總線為進入Rdn/ Wrn狀態(tài),;回寫發(fā)送/接收BD標志的請求條件為DMA長度計數(shù)器為0,此請求在通道內(nèi)部具有最高優(yōu)先級,。
在圖3中,,左半邊為DMA寫操作,右半邊為DMA讀操作,??偩€空閑時根據(jù)各通道請求進行總線仲裁,進入讀/寫B(tài)D或DMA發(fā)送/接收狀態(tài),。在讀/寫傳輸結束前請求進入最后讀/寫周期狀態(tài),。總線在完成最后數(shù)據(jù)的傳輸后回到空閑狀態(tài),,才能開始再次的總線仲裁進入新的工作狀態(tài),。在各個工作狀態(tài)數(shù)據(jù)傳輸過程中出現(xiàn)系統(tǒng)錯誤或校驗錯誤時,總線也會返回空閑狀態(tài),。
每個通道有多個狀態(tài)請求,,但只有1個總線請求信號。整個仲裁過程分為通道請求仲裁和通道內(nèi)部狀態(tài)請求仲裁2個過程,,占用2個時鐘周期完成,。系統(tǒng)空閑狀態(tài)時,先按輪流優(yōu)先級原則對4個通道請求仲裁,,判斷下一個總線占用的通道狀態(tài),,并在緊接的下個周期內(nèi),對已獲得總線的通道6種狀態(tài)(讀,、寫,、讀BD、寫B(tài)D,、最后讀周期,、最后寫周期)請求按固定優(yōu)先級原則仲裁,最終確定獲得總線的通道及其操作,。整個DMA傳輸過程是:初始化DMA寄存器(BD首址,、DMA使能、狀態(tài)命令初始化)——讀BD狀態(tài)——DMA傳輸——回寫B(tài)D標志位,。
BD既能有效用來對數(shù)據(jù)進行封包用于收發(fā)通信,,又要能夠控制DMA的傳輸,,其基本結構包括幀狀態(tài)、SIZE,、NEXT BD POINTER,、DATA BUFFER POINTER等。這些信息由CPU來填寫,,而DMA控制器讀取這些信息來控制DMA的傳輸,。CPU只需寫B(tài)D鏈首址到DMA控制器內(nèi)部寄存器,而DMA控制器使能后可以自動讀取BD的信息,,并以這些信息來控制DMA的自動傳輸,。DMA傳輸完了BD 所指BUFFER后,需要回寫結束標志給BD,。讀BD狀態(tài)操作共讀取3DWORD,,包括DMA地址、DMA長度及下一個BD地址,,且數(shù)據(jù)暫存在寄存器中,,只有整個burst傳輸正確完成后,各暫存值才會更新相應寄存器,,否則,,仍要重新請求等待仲裁后再去讀BD狀態(tài)。
多通道DMA支持burst傳輸操作,,每次burst長度最大設為8DWORD,。當DMA長度大于最大burst長度時,DMA傳輸要分多次完成,,要求在仲裁的第2個周期更新burst長度計數(shù)器和DMA地址計數(shù)器,。在DMA傳輸過程中,地址和長度計數(shù)器隨數(shù)據(jù)傳輸而改變,。但總線的這2個寄存器只表示正在傳輸?shù)耐ǖ罓顟B(tài),因此每個通道的各個狀態(tài)還需要有各自的地址寄存器和長度計數(shù)器,,以保存在沒有獲得總線權時的信息,。在PCI總線仲裁后,要根據(jù)獲得總線的通道寄存器狀態(tài)更新總線的地址寄存器和burst長度計數(shù)器,,并要在DMA傳輸過程中保持總線寄存器與正在進行操作的通道相應寄存器結果一致,。
本文介紹了利用FPGA芯片設計PCI界面的多通道DMA控制器的實現(xiàn)方法,經(jīng)過功能仿真和時序仿真,,可完全實現(xiàn)多通道的DMA控制功能,,在實際應用中取得了良好效果。
參考文獻
1 侯伯亨.VHDL硬件描述語音與數(shù)字邏輯電路設計.西安:西安電子科技大學出版社,,1999
2 李貴山.PCI局部總線.西安:西安電子科技大學出版社,,1997
3 裘宗燕譯.程序設計實踐.北京:機械工業(yè)出版社,,2000
4 吳靖譯.IP交換技術協(xié)議與體系結構.北京:機械工業(yè)出版社,1999