引言
隨著微電子技術(shù)的飛速發(fā)展,集成電路規(guī)模按照摩爾定律(微芯片上集成的晶體管數(shù)目每18個月翻一番)飛速提高,片上系統(tǒng)(SvstemOnChip,簡稱SOC)技術(shù)成為國際超大規(guī)模集成電路的發(fā)展趨勢。在SOC系統(tǒng)設(shè)計(jì)中,為了能夠快速、穩(wěn)定的形成產(chǎn)品,IP核積累和復(fù)用技術(shù)逐漸成為各個芯片廠商的首選。在這樣的背景下,IP復(fù)用技術(shù)成為了集成電路設(shè)計(jì)的一個重要分支,很多設(shè)計(jì)廠商在購買其它公司的IP核的同時,也越來越重視本公司的IP核設(shè)計(jì)和積累。
DMA控制器是常見的總線設(shè)備之一,很多廠商都有自己的DMA控制器IP核。比如嵌入式處理器的龍頭ARM公司就有自己的DMA控制器解決方案提供給客戶,另外像Freescale,F(xiàn)uiitsu等芯片制造廠商都有自己的解決方案。本文通過介紹一種基于ARM總線之一的AHB總線的DMA控制器的IP核設(shè)計(jì),簡述了IP核設(shè)計(jì)的流程和需要重點(diǎn)注意的地方。
DMA控制器
功能描述
一般而言,DMA控制器的功能與結(jié)構(gòu)是由本單位特定的系統(tǒng)結(jié)構(gòu)決定的。但是作為IP而言,DMA控制器又要有其一般性。DMA是指外部設(shè)備直接對計(jì)算機(jī)存儲器進(jìn)行讀寫操作的I/O方式。這種方式下數(shù)據(jù)的讀寫無需CPU執(zhí)行指令,也不經(jīng)過CPU內(nèi)部寄存器,而是利用系統(tǒng)的數(shù)據(jù)總線,由外設(shè)直接對存儲器寫入或讀出,從而達(dá)到極高的傳速率
現(xiàn)在DMA也可以在。內(nèi)存之間或是外設(shè)之間直接進(jìn)行數(shù)據(jù)操作。DMA技術(shù)的重要性在于,利用它進(jìn)行數(shù)據(jù)存取時不需要CPU進(jìn)行干預(yù),可提高系統(tǒng)執(zhí)行應(yīng)用程序的效率。利用DMA傳送數(shù)據(jù)的另一個好處是數(shù)據(jù)直接在源地址和目的地址之間傳送,不需要是中間媒介。
通用的DMA控制器應(yīng)具有一下功能:
1.編程設(shè)定DMA的傳輸模式及其所訪問內(nèi)存的地址區(qū)域。
2.屏蔽或接受外設(shè)或軟件的DMA請求。當(dāng)有多個設(shè)備同時請求時,還要進(jìn)行優(yōu)先級排隊(duì),首先響應(yīng)最高級的請求。
3.向CPU或總線仲裁設(shè)備提出總線請求。
4.接收總線響應(yīng)信號,接管總線控制。
?。担贒MA控制器的管理下實(shí)現(xiàn)外設(shè)和存儲器、外設(shè)和外設(shè)或存儲器之間的數(shù)據(jù)直接傳輸。
空則自動停止寫數(shù)據(jù)。當(dāng)讀數(shù)據(jù)部分完成了此次DMA傳輸要求的長度后,狀態(tài)機(jī)進(jìn)入下一個子狀態(tài),等待寫數(shù)據(jù)部分將數(shù)據(jù)全部寫完。當(dāng)完成全部操作后,DMA控制器會向發(fā)起DMA傳輸請求的設(shè)備發(fā)出信號,告知DMA傳輸順利完成,要求該設(shè)備撤銷DMA傳輸請求,并歸還總線控制權(quán)。至此DMA控制器回到空閑狀態(tài),等待下一次DMA傳輸請求。
一般而言,DMA控制器在總線仲裁器中是優(yōu)先級最低的設(shè)備。因此,當(dāng)有其它更高優(yōu)先級的總線主設(shè)備要求總線資源時,DMA控制器會被剝奪總線使用的權(quán)利,此時DMA控制器將進(jìn)入等待狀態(tài),直到優(yōu)先級更高的總線主設(shè)備釋放總線控制權(quán)后再進(jìn)入傳輸狀態(tài)。當(dāng)軟件提出申請,完成內(nèi)存之間的大量DMA傳輸時,一般會使用LLI功能。LLI功能針對的虛擬內(nèi)存空間
與物理內(nèi)存空間映射的不一致性,為了提高傳輸性能而引入的一種傳輸機(jī)制。作為LLI傳輸,ARM需要編程給DMA控制器,告知LLI列表的地址,并啟動DMA傳輸。當(dāng)DMA控制器發(fā)現(xiàn)是LLI傳輸時,它會到LLI列表中讀取第一次DMA傳輸?shù)脑吹刂?、目的地址、傳輸長度以及下一個LLI列表的地址并存入寄存器。當(dāng)此次DMA傳輸結(jié)束后,DMA控制器會自動到下一個LLI列表中讀取下一次DMA傳輸?shù)?a target="_blank">信息。這個鏈表傳輸過程直到LLI寄存器中的內(nèi)容為“0”時中止。
基于ASIC的考慮#e#
基于ASIC的考慮
關(guān)于總線
根據(jù)AMBA協(xié)議,AHB總線支持字節(jié)、半字和全字操作。因此DMA控制器在這點(diǎn)上符合AHB協(xié)議的要求。DMA控制器默認(rèn)32位數(shù)據(jù)線,因此需要根據(jù)讀寫地址以及讀數(shù)據(jù)操作類型將讀入的數(shù)據(jù)放入32位的FIFO中,寫出的時候再根據(jù)地址和寫數(shù)據(jù)的操作類型將數(shù)據(jù)從FIFO中放到寫數(shù)據(jù)總線上。如字節(jié)操作時,根據(jù)讀地址從讀到的一個字的數(shù)據(jù)中選取合適的字節(jié)放到FIFO中的最低字節(jié);寫的時候從FIFO最低部分取數(shù),根據(jù)寫地址將此字節(jié)放到寫數(shù)據(jù)相應(yīng)的部分,其余位補(bǔ)零。
作為ASIC而言,一般情況下,三態(tài)只用于輸入輸出的管腳上。即使是總線在芯片內(nèi)部也是將讀數(shù)據(jù)線與寫數(shù)據(jù)線分開使用的。本設(shè)計(jì)秉承這一原則,將讀寫數(shù)據(jù)線分開。
作為DMA傳輸,地址的變更需要靈。有時候讀寫地址需要增加,有時候地址需要不變。當(dāng)增加的時候,也要根據(jù)傳輸?shù)念愋蜎Q定地址增加1、2或4。
關(guān)于復(fù)位
復(fù)位是ASIC設(shè)計(jì)中最容易出問題的一環(huán)。DMA控制器主要有兩種復(fù)位方式,一種是上電復(fù)位,即異步復(fù)位,另一種是軟件復(fù)位,即同步復(fù)位。
異步復(fù)位通過將全部D-觸發(fā)器的Reset端接到復(fù)位信號線上,無需時鐘就可以實(shí)現(xiàn)的復(fù)位。一般情況下在上電的時候作一次。而根據(jù)功能的需要,當(dāng)系統(tǒng)出現(xiàn)故障,或軟件需要強(qiáng)行中止一次DMA傳輸?shù)臅r候,則需要軟件通過配置寄存器實(shí)現(xiàn)復(fù)位功能。此時就需要同步復(fù)位。
關(guān)于綜合
由于DMA控制器工作在高速總線上,總線時鐘最高可以達(dá)到200M,故在做前端設(shè)計(jì)的時候要特別注意。
以優(yōu)先級判斷為例。優(yōu)先級判斷本質(zhì)就是16個數(shù)字比大小。為了使時間復(fù)雜度最小,不采取經(jīng)典的“冒泡排序”,而是對半排序法。這樣比較4次就可以得到需要的數(shù)據(jù)。四級MUX對于低頻而言不算很困難,但是對于高頻而言,為了能夠滿足時序要求,就需要在第二次比較之后插入一組觸發(fā)器。
結(jié)語
本文討論了一種基于AMBA總線的DMA控制器的IP核設(shè)計(jì),結(jié)合這個實(shí)際的設(shè)計(jì),討論了IP復(fù)用技術(shù)的設(shè)計(jì)方法。這個設(shè)計(jì)不依賴于具體的FPGA或ASIC型號或工藝,因此其可移植性被大大增加。另一方面本設(shè)計(jì)綜合出來的DMA控制器是20K門,比起ARM公司的DMAC控制器的68K門,在面積方面也有很大的優(yōu)勢。
IP復(fù)用技術(shù)越來越成為嵌入式系統(tǒng)的發(fā)展趨勢。這種設(shè)計(jì)方法順應(yīng)了超大規(guī)模集成電路的發(fā)展潮流,必將成為這一領(lǐng)域發(fā)展的方向。
評論