王勝,史興強(qiáng),楊曉剛
(中科芯集成電路股份有限公司,江蘇無錫214072)
SoC系統(tǒng)中DMA控制器的設(shè)計(jì)與實(shí)現(xiàn)
王勝,史興強(qiáng),楊曉剛
(中科芯集成電路股份有限公司,江蘇無錫214072)
設(shè)計(jì)了一種高速、多通道DMA控制器。該控制器可以實(shí)現(xiàn)存儲(chǔ)器與存儲(chǔ)器、存儲(chǔ)器與外設(shè)之間的數(shù)據(jù)傳輸。各個(gè)通道優(yōu)先級(jí)可以配置,并支持通道循環(huán)傳輸功能。邏輯綜合結(jié)果表明,該DMA控制器具有良好的傳輸性能,可廣泛應(yīng)用于片上系統(tǒng)中。
多通道;DMA控制器;片上系統(tǒng)
在片上系統(tǒng)(SoC)中,外設(shè)與存儲(chǔ)器,存儲(chǔ)器與存儲(chǔ)器之間的數(shù)據(jù)交換已經(jīng)成為系統(tǒng)性能提升的瓶頸,而直接存儲(chǔ)器存取(DMA)技術(shù)可以有效緩解這個(gè)問題,因此得到廣泛的關(guān)注和研究[1]。本文設(shè)計(jì)的DMA控制器有以下特點(diǎn):包含7個(gè)獨(dú)立可配置的通道,每個(gè)通道均支持硬件與軟件請(qǐng)求;各個(gè)通道之間的優(yōu)先級(jí)可以通過軟件進(jìn)行配置;源的數(shù)據(jù)寬度與目標(biāo)的數(shù)據(jù)寬度可以獨(dú)立設(shè)置,能夠根據(jù)地址以及數(shù)據(jù)傳輸?shù)膶挾?,將有效?shù)據(jù)進(jìn)行打包與拆包[2];支持自動(dòng)循環(huán)傳輸,通道完成數(shù)據(jù)傳輸后,自動(dòng)恢復(fù)成初始配置狀態(tài),重新開始數(shù)據(jù)傳輸,不需要CPU重新進(jìn)行設(shè)置;DMA通道的請(qǐng)求,仲裁和確認(rèn)是在AHB系統(tǒng)總線外執(zhí)行的,一個(gè)DMA數(shù)據(jù)訪問只占用總線兩個(gè)周期,能夠最大程度減少總線占用率[3]。
DMAC(Direct Memory Access Controller)系統(tǒng)結(jié)構(gòu)是基于AHB總線結(jié)構(gòu),如圖1所示。其中包含AHB SLAVE接口模塊,仲裁模塊,7個(gè)通道控制模塊和AHB Master模塊。AHB Slave模塊主要功能是依據(jù)AHB讀寫時(shí)序?qū)MA寄存器進(jìn)行配置。仲裁模塊是對(duì)7個(gè)通道的優(yōu)先級(jí)進(jìn)行判斷,輸出當(dāng)前最高優(yōu)先級(jí)通道的編號(hào)。通道控制模塊主要功能是進(jìn)行傳輸?shù)刂酚?jì)算,對(duì)傳輸量進(jìn)行計(jì)數(shù),與外設(shè)的傳輸請(qǐng)求進(jìn)行握手以及通道的中斷控制。AHB Master將從源地址讀進(jìn)來的數(shù)據(jù)根據(jù)地址以及數(shù)據(jù)傳輸?shù)膶挾?,將有效?shù)據(jù)進(jìn)行打包與拆包最后寫到目的地址中去[4]。
圖1 DMAC系統(tǒng)結(jié)構(gòu)
仲裁模塊的輸入是外設(shè)的DMA硬件請(qǐng)求信號(hào),7個(gè)通道的軟件請(qǐng)求信號(hào),通道使能信號(hào)和寄存器配置的通道優(yōu)先級(jí),輸出是當(dāng)前優(yōu)先級(jí)最高通道。如圖2所示。當(dāng)仲裁模塊檢測到外設(shè)有DMA傳輸請(qǐng)求時(shí),則開始進(jìn)行仲裁,并在一個(gè)時(shí)鐘周期內(nèi)將當(dāng)前最高優(yōu)先級(jí)的通道編號(hào)送出。通道仲裁分兩個(gè)檢測階段:
(1)檢測軟件配置:每個(gè)通道的優(yōu)先權(quán)可以在DMA控制寄存器中設(shè)置優(yōu)先級(jí),總共有4個(gè)等級(jí),最高優(yōu)先級(jí),高優(yōu)先級(jí),中等優(yōu)先級(jí)和低優(yōu)先級(jí)。
(2)檢測通道編號(hào):如果2個(gè)請(qǐng)求有相同的軟件優(yōu)先級(jí),則編號(hào)低的通道優(yōu)先級(jí)高,如通道2與通道4的優(yōu)先等級(jí)相同,則通道2優(yōu)先級(jí)高于通道4。
圖2 仲裁模塊
為了最大程度地降低DMA控制器的功耗,將每個(gè)通道的使能信號(hào)chnx_en用作各個(gè)通道請(qǐng)求門控使能。只有當(dāng)通道使能有效,才能真正產(chǎn)生通道請(qǐng)求,才能使仲裁器開始仲裁。否則仲裁模塊始終處于待機(jī)狀態(tài)。具體實(shí)現(xiàn)如下:
在仲裁模塊內(nèi)部設(shè)置了7個(gè)4-bit的優(yōu)先級(jí)請(qǐng)求寄存器chnx_pl_req,分別包含最高優(yōu)先級(jí)(veryhigh_req),高優(yōu)先級(jí)(high_req),中等優(yōu)先級(jí)(medium_req)和低優(yōu)先級(jí)(low_req)這4位,如圖3所示。當(dāng)某一通道出現(xiàn)硬件或軟件請(qǐng)求時(shí),并且該通道使能開啟,才能產(chǎn)生真正有效的通道請(qǐng)求信號(hào)。當(dāng)有效的通道請(qǐng)求信號(hào)生成,仲裁器才開始檢測對(duì)應(yīng)通道寄存器DMA_CCRx中的優(yōu)先級(jí)配置位(PL):當(dāng)PL位設(shè)置為11時(shí),則將優(yōu)先級(jí)請(qǐng)求寄存器中veryhigh_req位置1,當(dāng)PL設(shè)置為10時(shí),則將優(yōu)先級(jí)請(qǐng)求寄存器中high_req位置1,當(dāng)PL位為01時(shí),則將優(yōu)先級(jí)請(qǐng)求寄存器中medium_req位置1,當(dāng)PL位為00時(shí),則將優(yōu)先級(jí)請(qǐng)求寄存器中l(wèi)ow_req位置1。
一旦仲裁模塊完成優(yōu)先級(jí)請(qǐng)求的標(biāo)記,則開始檢測在同一優(yōu)先級(jí)條件下通道的編號(hào)。仲裁模塊首先分別將7個(gè)優(yōu)先級(jí)請(qǐng)求寄存器中的veryhigh_req位、high_req位、medium_req位和low_req位進(jìn)行或操作,只有當(dāng)或操作結(jié)果為1時(shí),才會(huì)進(jìn)行通道編號(hào)的檢測。否則認(rèn)為該優(yōu)先等級(jí)條件下沒有通道請(qǐng)求。如果或操作的結(jié)果為1,就從通道1到通道7依次開始查詢。例如7個(gè)優(yōu)先級(jí)請(qǐng)求寄存器中的veryhigh_req位或操作結(jié)果為1,則開始檢測通道編號(hào):如果通道1中veryhigh_req為1,仲裁模塊就將通道1編號(hào)輸出;如果通道1中veryhigh_req為0,則查詢通道2中的veryhigh_req位,如果通道2中veryhigh_req為1,仲裁模塊就將通道2編號(hào)輸出;如果通道1、通道2中的veryhigh_req都為0,則查詢通道3中的veryhigh_req位,如果通道3中veryhigh_req為1,仲裁模塊就將通道3編號(hào)輸出;按照上述方法依次進(jìn)行通道編號(hào)的檢測。
圖3 通道優(yōu)先級(jí)請(qǐng)求寄存器
握手接口的設(shè)計(jì)主要是基于不同時(shí)鐘域情況下考慮的。DMA控制器是屬于AHB時(shí)鐘域的,而系統(tǒng)中絕大部分外設(shè)是APB時(shí)鐘域的,AHB的時(shí)鐘頻率往往大于APB的時(shí)鐘頻率。為了保證DMA控制器給出的應(yīng)答信號(hào)能夠被不同時(shí)鐘域上的外設(shè)接收到,將外設(shè)發(fā)出的傳輸請(qǐng)求信號(hào)與DMA控制器發(fā)出的應(yīng)答信號(hào)進(jìn)行握手[5]。具體實(shí)現(xiàn)如下。
外設(shè)需要DMA搬運(yùn)數(shù)據(jù)時(shí),會(huì)向DMA控制器發(fā)送一個(gè)請(qǐng)求信號(hào)后,并將該請(qǐng)求信號(hào)一直保持有效。當(dāng)DMA控制器訪問外設(shè)并完成一個(gè)數(shù)據(jù)的傳輸后,DMA控制器立即發(fā)送給它一個(gè)應(yīng)答信號(hào)。當(dāng)從DMA控制器得到應(yīng)答信號(hào)時(shí),外設(shè)立即釋放它的請(qǐng)求。一旦外設(shè)釋放了這個(gè)請(qǐng)求,DMA控制器同時(shí)撤銷應(yīng)答信號(hào)。其中傳輸一個(gè)數(shù)據(jù),外設(shè)就要發(fā)送一次請(qǐng)求。當(dāng)外設(shè)是Memory時(shí),則不需要握手信號(hào)。DMA控制器除了給出應(yīng)答信號(hào),在所有的數(shù)據(jù)傳輸完成時(shí),還需要給出傳輸完成信號(hào)dma_tc(transfer complete),用于說明當(dāng)前傳輸已經(jīng)全部完成。傳輸完成信號(hào)與應(yīng)答信號(hào)時(shí)序一致,如圖4所示。
圖4 握手接口時(shí)序
DMA控制器每完成一次讀寫操作,讀數(shù)據(jù)的地址與寫數(shù)據(jù)的地址都需要根據(jù)實(shí)際情況進(jìn)行更新操作。在DMA控制寄存器中分別設(shè)計(jì)了兩位控制位:外設(shè)地址增量PINC和存儲(chǔ)器地址增量MINC。根據(jù)PINC和MINC的值,外設(shè)和存儲(chǔ)器的傳輸?shù)刂吩诿看蝹鬏敽罂梢杂羞x擇地完成自動(dòng)增量。
當(dāng)PINC和MINC標(biāo)志位為0,則傳輸?shù)刂肥冀K保持不變。當(dāng)PINC和MINC標(biāo)志位不為0時(shí),也即設(shè)置為增量模式時(shí),下一個(gè)要傳輸?shù)牡刂穼⑹乔耙粋€(gè)地址加上增量值,增量值取決于所選的數(shù)據(jù)寬度。如果數(shù)據(jù)寬度是8-bit,則地址加1。如果數(shù)據(jù)寬度是16-bit,則地址加2。如果數(shù)據(jù)寬度是32-bit,則地址加4,如圖5所示。
第一個(gè)傳輸?shù)牡刂肥谴娣旁谕ǖ劳庠O(shè)地址寄存器DMA_CPARx和通道存儲(chǔ)器地址寄存器DMA_CMARx中的。在傳輸過程中,這些寄存器始終保持它們初始的數(shù)值。在自動(dòng)循環(huán)模式下,最后一次傳輸結(jié)束時(shí),地址計(jì)算模塊會(huì)重新加載DMA_CPARx和DMA_CMARx寄存器中的初始基地址,開始重新傳輸。
圖5 地址計(jì)算邏輯
DMA傳輸?shù)臄?shù)據(jù)量是可編程的,最大可以傳輸65535個(gè)32-bit的數(shù)據(jù)。DMA每進(jìn)行一次傳輸,傳輸計(jì)數(shù)器就減1,值到傳輸計(jì)數(shù)器中的值為0時(shí),表示DMA傳輸結(jié)束。在傳輸過程中,如果出現(xiàn)更高優(yōu)先級(jí)通道,當(dāng)前通道數(shù)據(jù)傳輸會(huì)停止,計(jì)數(shù)器會(huì)保留當(dāng)前傳輸計(jì)數(shù)值,直到該通道恢復(fù)傳輸。
當(dāng)通道配置為非循環(huán)模式時(shí),傳輸結(jié)束后(即傳輸計(jì)數(shù)變0)將不再產(chǎn)生DMA操作。即使該通道有新的請(qǐng)求,DMA也不會(huì)去響應(yīng)。要開始新的DMA傳輸,需要在關(guān)閉DMA通道的情況下,重新配置傳輸數(shù)目。
在自動(dòng)循環(huán)模式下,最后一次傳輸結(jié)束時(shí),通道傳輸計(jì)數(shù)器會(huì)重新加載初始數(shù)值,計(jì)數(shù)器重新開始計(jì)數(shù)。
AHB Master的主要功能是將從源地址讀進(jìn)來的數(shù)據(jù),根據(jù)地址以及數(shù)據(jù)傳輸寬度進(jìn)行調(diào)整,并將調(diào)整后的有效數(shù)據(jù)寫到目的地址中去。在整個(gè)SoC系統(tǒng)中,DMA控制器的AHB Master是與總線矩陣Bus Matrix的0端口連接的,這就意味著DMA控制器總線的優(yōu)先級(jí)高于內(nèi)核總線的優(yōu)先級(jí)。一旦DMA進(jìn)行大量的數(shù)據(jù)傳輸,就會(huì)長時(shí)間占據(jù)著系統(tǒng)總線,從而阻塞內(nèi)核對(duì)系統(tǒng)總線的使用[6]。盡可能減少DMA控制器對(duì)系統(tǒng)總線的占用率,是設(shè)計(jì)AHB Master的重點(diǎn)。
規(guī)劃整個(gè)DMA工作流程時(shí),將DMA通道的請(qǐng)求、仲裁以及傳輸完成后與外設(shè)的握手放在AHB系統(tǒng)總線外執(zhí)行。這樣一個(gè)DMA數(shù)據(jù)訪問最少只占用總線兩個(gè)周期,最大程度減少總線占用率。DMA傳輸時(shí),占用總線的周期如圖6所示,一個(gè)DMA訪問花費(fèi)2個(gè)周期在系統(tǒng)總線上。系統(tǒng)總線永遠(yuǎn)不會(huì)被DMA完全凍結(jié),DMA占據(jù)系統(tǒng)總線訪問數(shù)據(jù)時(shí),至少保留3個(gè)周期給CPU,提高了整個(gè)系統(tǒng)的性能。
圖6 DMA傳輸占用總線周期
AHB Master模塊狀態(tài)機(jī)如圖7所示,總共分為5個(gè)狀態(tài):IDLE,READ_ADDR,READ_DATA,WRITE_ ADDR,WRITE_DATA。狀態(tài)機(jī)復(fù)位時(shí)進(jìn)入IDLE狀態(tài),當(dāng)有DMA傳輸請(qǐng)求時(shí)進(jìn)入READ_ADDR狀態(tài)。在READ_ADDR狀態(tài)下AHB Master輸出讀地址,AHB控制信號(hào)以及使能計(jì)數(shù)器。在READ_DATA狀態(tài)時(shí),計(jì)數(shù)hreadyin為0的時(shí)鐘周期數(shù)。如果hreadyin始終為低電平,并持續(xù)32個(gè)hclk周期,則進(jìn)入IDLE狀態(tài);如果在此狀態(tài)下hreadyin為高電平,進(jìn)入WRITE_ADDR狀態(tài)并發(fā)送寫地址和AHB控制信號(hào)。WRITE_DATA狀態(tài)下AHB Master將對(duì)齊后的寫數(shù)據(jù)送到總線hwdata上,計(jì)數(shù)hreadyin為0的時(shí)鐘周期數(shù)。如果此時(shí)hreadyin始終為低電平,并持續(xù)32個(gè)hclk,也進(jìn)入IDLE狀態(tài)。
圖7 AHB Master狀態(tài)機(jī)
DMA控制器功能仿真如圖8(a)所示。在通道5數(shù)據(jù)傳輸?shù)倪^程中,仲裁模塊發(fā)現(xiàn)更高優(yōu)先級(jí)通道請(qǐng)求,并輸出最高優(yōu)先級(jí)通道編號(hào)6。DMA控制器將系統(tǒng)總線的使用權(quán)由通道5切換給通道6,通道6則開始數(shù)據(jù)傳輸。通道5傳輸計(jì)數(shù)器完成一次計(jì)數(shù)后保留計(jì)數(shù)值,直到重新獲得系統(tǒng)總線的使用權(quán)。圖8(b)中,DMA控制器7個(gè)通道全部開啟,依次完成數(shù)據(jù)的傳輸。
設(shè)計(jì)采用Synopsys公司的Design Compiler為綜合工具,以TSMC 55 nm工藝庫在最壞情況下對(duì)DMA控制器進(jìn)行邏輯綜合。當(dāng)時(shí)鐘頻率為200 MHz時(shí),最長路徑延時(shí)為5.04 ns,動(dòng)態(tài)功耗為496.3515 μW,漏流功耗為2.2614 μW。綜合和仿真結(jié)果表明,DMA控制器的設(shè)計(jì)滿足SoC系統(tǒng)對(duì)功耗及路徑延時(shí)的要求。
圖8 DMA控制器功能仿真
本文設(shè)計(jì)了一種多通道DMA控制器,大大提高了SoC系統(tǒng)中數(shù)據(jù)傳輸?shù)男?,有效減輕處理器的負(fù)擔(dān),從而提高系統(tǒng)性能。目前該設(shè)計(jì)已成功應(yīng)用于SoC系統(tǒng)中。
[1]郭煒,魏繼增,郭箏,等.SoC設(shè)計(jì)方法與實(shí)現(xiàn)(第2版) [M].北京:電子工業(yè)出版社,2011:81-93.
[2]TMS320C6000 DSP Enhanced Direct Memory Access (EDMA)Controller Reference Guide[Z].Texas Instruments, 2006.
[3]Viktor Mayer-Schonberger,Kenneth Cukier.Big Data:A Revolution That Transfer How We Live,Work and Think [M].Hodder Export.2013.
[4]彭莉.嵌入式SOC中DMA的設(shè)計(jì)與實(shí)現(xiàn)[D].上海交通大學(xué)碩士論文,2005.
[5]Grosso M Perez W J H.Functional test generation for DMA controller[J].IEEE Xplore digital library,2010,11(8):1-6.
[6]Hennessy J L,Patterson D A.計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)——量化研究方法[M].北京:電子工業(yè)出版社,2004.
Design and Implementation of a SoC-based DMA Controller
WANG Sheng,SHI Xingqiang,YANG Xiaogang
(China key system Co.,Ltd,Wuxi 214072,China)
A high-speed multi-channel DMA controller is designed in the paper.The controller manages memory-to-memory,peripheral-to-memory and memory-to-peripheral transfers.The transfer priority of different channels is configurable with automatic transfer.The DMA controller has good performance according to the synthesisresultand can be widely used in SoC systems.
multichannel;DMAcontroller;SoC
TN402
A
1681-1070(2017)08-0025-04
王勝(1979—),男,江蘇鹽城人,2001年畢業(yè)于吉林大學(xué)電子信息工程專業(yè),現(xiàn)從事大規(guī)模數(shù)字SoC設(shè)計(jì)工作。
2017-4-21