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