1、引言
在計(jì)算機(jī)系統(tǒng)里,為了加快傳送大批量數(shù)據(jù)的速度,常采用DMA方式,通過(guò)集成片上DMA控制器接口部件實(shí)現(xiàn),在存儲(chǔ)器和外設(shè)之間開辟直接傳輸數(shù)據(jù)通道,DMA控制器的訪問(wèn)策略跟控制協(xié)議的好壞,直接影響著整個(gè)處理器系統(tǒng)性能的好壞14。文中采用SystemC系統(tǒng)級(jí)設(shè)計(jì)語(yǔ)言,實(shí)現(xiàn)了一個(gè)快速的可配置多功能DMA控制器。
SystrmC語(yǔ)言是在1999年推出,并由OSCI負(fù)責(zé)支持。維護(hù)和發(fā)展目。它是建立C++基礎(chǔ)上的開放的系統(tǒng)級(jí)設(shè)計(jì)語(yǔ)言,可同時(shí)支持軟件級(jí)和硬件級(jí)的建模,能夠?qū)崿F(xiàn)軟硬件協(xié)同仿真,還可以將系統(tǒng)逐步細(xì)化至用于綜合的寄存器傳輸級(jí),可以有效地簡(jiǎn)化設(shè)計(jì)過(guò)程,降低設(shè)計(jì)所需時(shí)間,節(jié)約成本。
2、DMA控制器的基本組成
外圍設(shè)備跟內(nèi)核進(jìn)行數(shù)據(jù)傳輸或者發(fā)送控制信息是通過(guò)不同類型的總線實(shí)現(xiàn)的O.為了提高整個(gè)系統(tǒng)的效率,在處理器中往往存在著不同級(jí)別的總線,分別用于連接不同的設(shè)備。一級(jí)內(nèi)部總線往往用來(lái)實(shí)現(xiàn)內(nèi)核對(duì)內(nèi)部存儲(chǔ)器的直接訪問(wèn);二級(jí)系統(tǒng)外設(shè)總線用于實(shí)現(xiàn)高速的外設(shè)跟內(nèi)部存儲(chǔ)器之間的訪問(wèn); 三級(jí)總線則用來(lái)連接較低速的外設(shè),并通過(guò)橋接器連接到二級(jí)總線上。DMA控制器也相當(dāng)于一個(gè)外設(shè),跟中斷控制器定時(shí)器。外部存儲(chǔ)器接口、主機(jī)接口。片內(nèi)有儲(chǔ)器接口一起連接在二級(jí)外設(shè)總線上。
DMA控制器主要由以下幾部分組成: 寄存器狀態(tài)寄存器、控制寄存器、地址寄存器。計(jì)數(shù)寄存器和屏蔽寄存器) 。數(shù)據(jù)緩沖器用于接收從源設(shè)備發(fā)送來(lái)的數(shù)據(jù),等待轉(zhuǎn)發(fā)給目的設(shè)備) 。地址計(jì)數(shù)器運(yùn)算單元、優(yōu)先級(jí)仲裁邏輯。中斷控制邏輯。外設(shè)總線DMA控制器的具體結(jié)構(gòu)如圖1所示(圖中畫出的是僅四通道DMA控制器,更多通道的DMA控制器架構(gòu)與此類似)。
3、DMA方式的工作流程e#
3、DMA方式的工作流程
DMA工作方式下的流程見圖2具體可以劃分為如下4個(gè):主要部 分。
1) DMA傳送開始前的準(zhǔn)備工作
內(nèi)核開始進(jìn)行DMA傳送之前,首先執(zhí)行一系列的IO指令用來(lái)檢測(cè)外設(shè)的狀態(tài),初始化寄存器。根據(jù)設(shè)備傳輸速度的不同。在控制寄存器中設(shè)置是否需要等待外設(shè)請(qǐng)求信號(hào)進(jìn)行同步。
在設(shè)計(jì)中,采用兩種請(qǐng)求方式來(lái)開啟DMA傳送:軟件DMA請(qǐng)求和硬件DMA請(qǐng)求。軟件DMA請(qǐng)求一般用來(lái)進(jìn)行速度較快的設(shè)備之間的數(shù)據(jù)傳送,假定設(shè)備一直處于準(zhǔn)備好狀態(tài)可以隨時(shí)進(jìn)行數(shù)據(jù)的傳輸,比如存儲(chǔ)器;硬件DMA請(qǐng)求則需要等待外設(shè)的請(qǐng)求信號(hào)到來(lái)時(shí)才能進(jìn)行DMA傳輸,一般用于速度較慢的設(shè)備之間的數(shù)據(jù)傳輸。在這種方式下,DMA響應(yīng)設(shè)備的請(qǐng)求之后,還會(huì)發(fā)送響應(yīng)信號(hào)給等待的外設(shè)。通過(guò)在控制寄存器里面設(shè)置一個(gè)信息位,預(yù)先設(shè)置好當(dāng)前通道的傳輸是否需要硬件請(qǐng)求信號(hào),即可實(shí)現(xiàn)這兩種方式的傳輸。寄存器還設(shè)置地址改變的方式。數(shù)據(jù)傳送的大小等等信息,初始化完畢后,內(nèi)核維續(xù)執(zhí)行其他操作,等待外設(shè)數(shù)據(jù)準(zhǔn)備好或者等待DMA控制發(fā)送總線請(qǐng)求信號(hào)。
2) 獲取總線使用權(quán)
DMA跟CPU共用一套總線,并且二者都可以作為總線的主控設(shè)備,因此,在進(jìn)行訪問(wèn)的時(shí)候,需要考慮到總線使用權(quán)的問(wèn)題,獲得總線使用權(quán)的設(shè)備占用總線進(jìn)行傳輸,其余設(shè)備等待。DMA通道使能信號(hào)有效或者外圍設(shè)備發(fā)送DMA請(qǐng)求信號(hào)的時(shí)候,DMA發(fā)送總線請(qǐng)求信號(hào)給內(nèi)核。要求獲得總線的使用權(quán)。
內(nèi)核響應(yīng)總線請(qǐng)求信號(hào)以后,如果存在多個(gè)模需要先進(jìn)行優(yōu)先級(jí)模塊同時(shí)請(qǐng)求DMA訪問(wèn)的時(shí)候,判斷。通道之間的優(yōu)先級(jí)可通過(guò)寄存器編程,具有最高優(yōu)先級(jí)的通道獲得總線的使用權(quán),發(fā)送響應(yīng)信號(hào)給對(duì)應(yīng)外設(shè),并發(fā)送總線忙信號(hào)告知其他模塊總線正在被占用。這時(shí),CPU的操作仍可繼續(xù)進(jìn)行,遇到需要使用該總線就進(jìn)入等待。
3)驅(qū)動(dòng)地址、數(shù)據(jù)總線進(jìn)行DMA傳送
獲得總線使用權(quán)的通道通過(guò)地址寄存器驅(qū)動(dòng)地址總線,選擇源設(shè)備與目的設(shè)備,并發(fā)送讀寫控制信號(hào),同時(shí)通過(guò)數(shù)據(jù)總線發(fā)送或者接收數(shù)據(jù)。
DMA的數(shù)據(jù)傳輸方式有兩種:存儲(chǔ)轉(zhuǎn)發(fā)方式和直接數(shù)據(jù)傳輸方式。對(duì)于慢速的設(shè)備,采用存儲(chǔ)轉(zhuǎn)發(fā)的模式,即先將數(shù)據(jù)接收到控制器中的數(shù)據(jù)緩沖器,然后再將數(shù)據(jù)發(fā)送到目的設(shè)備;對(duì)于高速的外圍設(shè)備,當(dāng)源地址跟目的地址指向的不是同一設(shè)備時(shí),可以采取直接數(shù)據(jù)傳輸?shù)哪J?,?shù)據(jù)直接從源設(shè)備讀出并寫往目的設(shè)備,這樣可以有效地節(jié)省時(shí)間,最佳的使用方案是將這兩種方式有效結(jié)合起來(lái)進(jìn)行傳輸。
每傳輸完一次數(shù)據(jù),源地址。目的地址相應(yīng)改變。計(jì)數(shù)器遞減,如果數(shù)據(jù)沒有傳輸完,維續(xù)進(jìn)行傳送,否則,轉(zhuǎn)入下一步操作。DMA傳送完畢后的處理工作
4)通道上的數(shù)據(jù)傳輸完畢后,DMA控制器釋放總線,總線請(qǐng)求信號(hào)。總線忙信號(hào)無(wú)效,并采用專門的機(jī)制向內(nèi)核提出中斷,以便內(nèi)核處理器重新獲得總線的使用權(quán)并執(zhí)行相應(yīng)的操作。
但是,中斷提出并被響應(yīng)以后,處理器就要轉(zhuǎn)向執(zhí)行中斷服務(wù)子程序,需要占用處理器的執(zhí)行時(shí)間。一種有效的方法是對(duì)每個(gè)通道設(shè)置中斷屏蔽寄存位,數(shù)據(jù)傳輸完畢的時(shí)候,在不要處理器響應(yīng)時(shí)禁止通道提出中斷請(qǐng)求。每一個(gè)通道都有對(duì)應(yīng)的狀態(tài)寄存器,用來(lái)表示當(dāng)前數(shù)據(jù)是否傳輸完畢。只有通道的數(shù)據(jù)傳輸完畢,并且該通道對(duì)應(yīng)的屏蔽位無(wú)效的時(shí)候,該通道的中斷請(qǐng)求信號(hào)才有效,,各個(gè)通道中斷請(qǐng)求信號(hào)相或,如果結(jié)果有效,就向內(nèi)核發(fā)送中斷請(qǐng)求,否則DMA傳輸繼續(xù)進(jìn)行。
4、DMA控制器設(shè)計(jì)實(shí)現(xiàn)
基于前面對(duì)DMA控制器工作流程的詳細(xì)分析。運(yùn)用SystemC 語(yǔ)言,建立DMA控制器的Cye le-Accurat級(jí)參考模型??刂破饔梢韵聨讉€(gè)模塊組成:寄存器賦值、狀態(tài)轉(zhuǎn)換。輸出模塊和頂層模塊。具體工作過(guò)程可以參考如圖3所示的有限狀態(tài)機(jī)。
5 結(jié)束語(yǔ)
設(shè)計(jì)完畢,采用Mode1Sim61進(jìn)行系統(tǒng)功能仿真驗(yàn)證。片內(nèi)存儲(chǔ)器采用工具生成的SRAM模塊,輸入激勵(lì)中需要的地址。數(shù)據(jù)均采用隨機(jī)生成的方式進(jìn)行,對(duì)各個(gè)通道的寄存器進(jìn)行隨機(jī)的初始化賦值后,發(fā)送DMA傳送請(qǐng)求信號(hào),分析讀寫的數(shù)據(jù)是否正確,進(jìn)行驗(yàn)證。結(jié)果表明,文中設(shè)計(jì)的DMA控制器功能正確并且具有較好的性能。
評(píng)論