1 簡介
在DMA控制器加入仲裁模塊,對多個傳輸請求進行排序,通過存儲器配置模式減少CPU 的配置時間和中斷次數(shù),但還不能保證對多任務傳輸?shù)膶拵枨?;也有把傳輸任務分為實時任務和非實時任務的,按實時優(yōu)先級實現(xiàn)系統(tǒng)的實時傳輸,但是仍需系統(tǒng)對任務進行優(yōu)先級排序,占用系統(tǒng)處理時間;分別通過預存取和寫循環(huán)、加入重排列單元、鏈模式和雙緩沖器以及采用不同大小的緩存等方法提高 DMA 控制器的傳輸效率。但這些改進方法均只能保證 DMA 控制器在同一時間傳輸單一任務,為了實現(xiàn)系統(tǒng)多任務實時傳輸,本文擬引入Crossbar 交換結(jié)構,并設計相應的多通道傳輸 DMA控制器,保證系統(tǒng)多任務傳輸?shù)耐瑫r提高系統(tǒng)響應的實時性
為了具體介紹本多通道 DMA 控制器的設計方案,下面首先對基于 Crossbar 的多通道 DMA 控制器的工作原理進行詳細分析,接著具體說明各個模塊的設計實現(xiàn),然后對設計進行驗證和分析比較實驗結(jié)果,并進行總結(jié)。
2 多通道DMA控制器
傳統(tǒng) DMA 控制器是采用共享總線方式來實現(xiàn)數(shù)據(jù)傳輸?shù)?,系統(tǒng)實現(xiàn)數(shù)據(jù)傳輸?shù)倪^程為:(1)首先設備向 DMAC 發(fā)出 DMA 請求。(2)DMAC 接到設備請求后,向 CPU 發(fā)出總線請求,請求接管系統(tǒng)總線。(3)CPU 在執(zhí)行完當前指令周期后,向 DMAC發(fā)出總線響應信號。(4)CPU 脫離對系統(tǒng)總線的控制,DMAC 接管控制系統(tǒng)總線。(5)DMAC 向設備發(fā)出應答信號。(6)DMAC 在存儲器與設備之間進行數(shù)據(jù)傳輸。(7)當設定的數(shù)據(jù)傳輸完后,DMAC 撤銷總線請求信號,同時脫離對總線的控制,CPU 檢測到總線請求信號變?yōu)闊o效后,撤銷總線響應信號,恢復對系統(tǒng)總線的控制,同時跳回到中斷前的狀態(tài)。
但對于如圖 1 所示的典型多媒體應用系統(tǒng),內(nèi)部有哈夫曼解碼模塊(Huffman Decoder)、圖像解碼模塊 (MPEG Decoder)、USB 模塊、SPI 模塊、SD 卡控制模(SDC)和數(shù)模轉(zhuǎn)換模塊(DAC)等,哈夫曼解碼模塊和圖像解碼模塊需要跟 USB 模塊、SD卡控制模塊或 SPI 模塊通信,即同時存在幾路數(shù)據(jù)傳輸并且傳輸數(shù)據(jù)的模塊是變化的,采用共享總線的 DMA 控制器無法同時處理多個通道任務,現(xiàn)有的多通道 DMA 控制器交換數(shù)據(jù)的設備只能是固定的,因而無法勝任這種系統(tǒng)需求。對于這類應用需要,本文引入了 Crossbar 互聯(lián)結(jié)構,用 Crossbar 總線來代替共享總線。Crossbar 被稱為交叉開關矩陣或縱橫式交換矩陣,不會因為帶寬資源不夠而產(chǎn)生阻塞 [8]。圖 2 所示是全 Crossbar 總線拓撲結(jié)構的原理圖。由于全 Crossbar 總線所需連接線數(shù)量較多, 在實際中經(jīng)常簡化為部分 Crossbar 總線拓撲結(jié)構, 即將不需要通信的模塊間的連接去掉,以節(jié)省面積。
Crossbar 的互聯(lián)結(jié)構實現(xiàn)在 MDMAC 的接口模塊中,作為 DMA 傳輸?shù)木植靠偩€,DMA 傳輸不再占用系統(tǒng)總線,因此可以和 CPU 并行工作。所有需要采用 DMA 式傳輸數(shù)據(jù)的設備都直接掛接在該接口模塊上,而由于這些設備也需要同系統(tǒng)總線通信,所以每個設備需要附加一個多路選擇單元,以選擇來自系統(tǒng)總線的信號或是來自 MDMAC 的信號。MDMAC 的接口模塊實現(xiàn)了全 Crossbar 的互聯(lián)結(jié)構,其和設備的連接及系統(tǒng)總線的連接方式如圖 3所示,處于圖中左邊的任意設備可以和圖中右邊的任意設備進行 DMA 方式的數(shù)據(jù)傳輸。由于可以根據(jù)具體的應用來設計接口模塊中設備端口的個數(shù),所以可以保證系統(tǒng)中所有的 DMA 傳輸都能并行進行,而不需要像傳統(tǒng) DMA 控制器,要通過一定的仲裁算法來對多個傳輸請求進行排序,使得傳輸時間不能保證,并且仲裁模塊會引入較大的延時,使得傳輸響應變慢。
3 設計與實現(xiàn)方案
根據(jù)上述多通道 DMA 控制器的基本原理,可以按如圖 4 結(jié)構來設計實現(xiàn)該多通道 DMA 控制器,其組成模塊可以分為 4 部分:寄存器模塊Registers, 控 制 模 塊 Controlunit, 地 址 產(chǎn) 生 模 塊Addressgen 和接口模塊 Interface。下面詳細介紹各模塊的具體設計與實現(xiàn)方案。
3.1 寄存器模塊
Registers 寄存器模塊集合了控制器的各種寄存器,包括全局寄存器和各個通道的專用寄存器,控制器和系統(tǒng)微處理器的交互主要靠這些寄存器來完成。全局寄存器對所有的通道都有效,包括配置寄取,不需要 CPU 的參與,直到整個描述符鏈表執(zhí)行完再產(chǎn)生中斷通知 CPU,而傳統(tǒng)的 CPU 配置模式每執(zhí)行完一個任務都要產(chǎn)生中斷,讓 CPU 對下一個任務進行配置。每次傳輸?shù)陌l(fā)起可以有兩種模式,一種是軟件使能方式,即只要將寄存器的 start 位置 1 就開始脫離 Idle 狀態(tài);另一種是硬件握手方式,寄存器的 start 位置 1 后,還需要有傳輸請求的模塊發(fā)來申請并等待 MDMAC 確認后傳輸才開始。軟件使能方式適用于數(shù)據(jù)復制操作,CPU 將某一地址區(qū)間的數(shù)據(jù)轉(zhuǎn)移到另一地址區(qū)間。硬件握手方式是傳統(tǒng)的DMA 工作方式。
3.3 地址產(chǎn)生模塊
Addressgen 地址產(chǎn)生模塊主要由加法器組成,產(chǎn)生傳輸?shù)脑吹刂泛湍康牡刂?,加法器的設計采用兩級流水線技術,以減少運算的延時。源地址和目的地址的控制邏輯是獨立的,但它們都受傳輸量的約束,當傳輸完成時它們都保持著當前地址,直到被重新賦值或復位。源地址和目的地址可以配置為兩種變化模式。一種是逐步加 1 模式,由最初設定的起始操作地址開始,每對外讀取或者寫入一個地址單元后輸出地加 1,適合于對連續(xù)地址空間搬移數(shù)據(jù)。另一種是保持不變模式,即在傳輸過程中輸出地址一直保持最初設定的起始操作地址,此種模式適用于對象是緩存器 FIFO 的情況,因為 FIFO 只有一個入口寄存器,通過對這個入口寄存器操作就可以訪問 FIFO 內(nèi)部的數(shù)據(jù)。輸出地址的各個位都設置了屏蔽功能,這樣在對某個連續(xù)地址區(qū)間寫入數(shù)據(jù)時,可以通過屏蔽某些地址位來保護某些地址單元的值不被覆蓋。
3.4 接口模塊
Interface 接口模塊內(nèi)部結(jié)構框圖如圖 6 所示,實現(xiàn)接口的 Crossbar 互聯(lián)結(jié)構,向外界輸出多路源和目的設備的地址、數(shù)據(jù)和讀寫控制等信號,這些信號由圖中的 Inputsignals 部分輸入。mux 部分根據(jù)控制寄存器的配置選通連 接的 master 和 slave。本MDMAC 不同于共享總線型的 DMAC,它可以同時傳輸幾個任務,并且任意設備間都可以進行任務傳輸,而不是固定某兩個模塊間才能進行通信。本文實現(xiàn)了一個可以同時處理 3 個通道的控制器,3 個源連接端口和 3 個目的連接端口,默認連接是源端口0 連接目的端口 0,源端口 1 連接目的端口 1,源端口 2 連接目的端口 2。在使用過程中可以通過寄存器設置任意的源端口連接任意的目的端口,即是一個 3×3 的全 Crossbar 連接。這三個通道是互相獨立的,傳輸任務互不影響,也不必同時開始工作。
4 實驗結(jié)果
本文首先在 modelsim6.5 中對設計進行仿真,3個源端口和 3 個目的端口分別連接著一個存儲器RAM。分別仿真了單個通道操作,多個通道同時操作,多個通道不同時操作,通過系統(tǒng)總線配置,通過描述符配置,軟件使能傳輸,硬件握手傳輸?shù)饶J?。本文設計了一個系統(tǒng)在 FPGA 上運行,系統(tǒng)的內(nèi)部框圖如圖 7 所示,采用 Xilinx 的 virtex5 開發(fā)板。圖中的 USB 模塊是一個 USB1.1 主機控制器,里面包含一個64字節(jié)的緩存器 FIFO。USB 主機控制器和存儲器 Memory3 連接在 MDMAC 的源端口,存儲器Memory1 和存儲器 Memory2 連接在目的端口。USB主機控制器從 U 盤讀取數(shù)據(jù)到其內(nèi)部的 FIFO,然后使能MDMAC 把 FIFO 中 的 數(shù) 據(jù) 搬 移 到 Memory1中,與此同時,另一個通道把 Memory2 中的數(shù)據(jù)復制搬移到 Memory3 中,然后通過串口把搬移后的數(shù)據(jù)輸出到 PC 機上的超級終端顯示出來。圖 8 上顯示的是從 U 盤第 0 扇區(qū)讀出的內(nèi)容,由于編程直接使用 keil 軟件提供的打印函數(shù),該函數(shù)顯示的數(shù)據(jù)是 16 位的,故圖中每個數(shù)據(jù)的后兩個數(shù)字都是無效的。用 winhex 軟件讀取 U 盤里面的內(nèi)容,傳輸前后的內(nèi)容一致。
圖9 是3個通道同時操作的仿真波形圖,其中源端口 0 連接目的端口 1,源端口 1 連接目的端口2,源端口 2 連接目的端口 0,圖中的 m 表示源端口,s 表示目的端口。對于傳統(tǒng) DMA,必 須等待一個任務傳輸完畢后才能傳輸下一個任務,因此不能保證將相關數(shù)據(jù)實時地傳輸?shù)侥康牡刂罚瑘D 9 顯示了本文設計的 MDMAC 能夠同步地處理多個任務,因此比傳統(tǒng) DMAC 更能適應實時性系統(tǒng)的要求。
本文設計的 MDMAC 在 Xilinx 的 xc5vlx110t 上實現(xiàn)的最大頻率是 232MHZ,每兩個時鐘周期可以傳輸一個字節(jié)的數(shù)據(jù),若3個通道同時工作,則最大的 數(shù) 據(jù) 吞 吐 率 可 達 348MB/s, 表1給出幾種DMAC 在 FPGA 上實現(xiàn)的最大吞吐率的對比。其中文獻[6]得出的結(jié)論是采用其提出的鏈模式對于提高數(shù)據(jù)吞吐率的貢獻在于減少了相連傳輸任務之間的中斷服務時間,本文提出的多通道模式不但在單個通道的實現(xiàn)上采用了類似的優(yōu)化方式,而且多通道同時工作的模式也包含了類似的優(yōu)化思想,因為這省去了傳統(tǒng) DMA 機制中多個設備同時發(fā)起請求時仲裁排序和切換服務對象的時間,并且,由于多個通道同時工作,整個系統(tǒng)的數(shù)據(jù)吞吐率得到了很大的提高。
本文采用標準的180nmCMOS工藝庫 ,在Design Compiler中對MDMAC進行了綜合 ,在300MHZ的時鐘頻率下 ,綜合出的面積是104322.6μm2,功耗是 13.1mW。為了進行比較,本文還設計了一個沒有 Crossbar 互聯(lián)接口功能而其他功能完全一樣的 DMAC,在同樣的約束環(huán)境下,在300MHZ 的 時 鐘 頻 率 下 綜 合 出 的 面 積 是46037. 4μm2,功耗是 6.5mW。數(shù)據(jù)吞吐率的提高有可能是以面積或功耗為代價的,為了說明數(shù)據(jù)吞吐率的改進效率,本文采用在每單位消耗(面積或功耗)上數(shù)據(jù)吞吐率的相對大小來衡量,本文定義一個變量 η 為數(shù)據(jù)吞吐率和面積的比,即每單位面積的平均數(shù)據(jù)吞吐率,ζ 為數(shù)據(jù)吞吐率與功耗的比,即每單位功耗的平均數(shù)據(jù)吞吐率。設傳統(tǒng)DMAC的數(shù)據(jù)吞吐率,功耗和面積都為 1,則 ηt=1,t=1,其中下標 t 表示傳統(tǒng) DMAC。本 MDMAC 當 3 個通道同時工作時其數(shù)據(jù)吞吐率達到最大,為 3,面積為104322.6 /46037.4 = 2.3,則其 ηc = 3/2.266 = 1.3,下標 c 表示本文設計的 MDMAC,功耗為 13.1/6.5 =2.0,則其 c = 3/2.0 = 1.5,兩種 DMAC 的比較結(jié)果如表 2 所示。可見,本 MDMAC 比幾個傳統(tǒng) DMAC協(xié)同使用更有效率,這是因為省去了仲裁單元并且某些控制邏輯可以復用。
5 結(jié)論
本文給出了一種基于 Crossbar 的多通道DMA方案,并用硬件實現(xiàn)了這種 DMA 控制器,它可以同時服務多個通道,接口采用了全 Crossbar 的拓撲結(jié)構。所設計的方案在 virtex5 開發(fā)板上通過了驗證,其最大的數(shù)據(jù)吞吐率可達 348MB/s,經(jīng)采用標準180nm 工藝綜合,其吞吐率和面積比是傳統(tǒng) DMA控制器的 1.3 倍,吞吐率和功耗比達到 1.5 倍。
評論