《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技术 > 业界动态 > 基于PCI 总线的多通道DMA传输

基于PCI 总线的多通道DMA传输

2008-09-22
作者:刘海华

??? 摘? 要:研究了基于PCI/cPCI總線的多通道DMA傳輸系統(tǒng),分析了實(shí)現(xiàn)多個DMA傳輸通道" title="傳輸通道">傳輸通道的方法;以PCI9054為PCI主橋、個人計算機(jī)為開發(fā)環(huán)境,詳細(xì)分析了多通道數(shù)據(jù)采集" title="數(shù)據(jù)采集">數(shù)據(jù)采集卡中不同通道的訪問策略,給出了接口電路的實(shí)現(xiàn)結(jié)構(gòu),討論了不同DMA傳輸方式" title="傳輸方式">傳輸方式的性能和應(yīng)用環(huán)境。?

??? 關(guān)鍵詞: PCI總線? DMA控制器? 突發(fā)傳輸? 數(shù)據(jù)采集

?

??? PCI/cPCI總線是一種獨(dú)立于CPU的局部總線,由于支持突發(fā)傳輸操作,其總線傳輸吞吐量為132MB/s(33bit,33MHz),已經(jīng)被廣泛應(yīng)用于個人計算機(jī)。但是,在x86結(jié)構(gòu)CPU的個人計算機(jī)下,由主CPU發(fā)起讀操作訪問PCI目標(biāo)設(shè)備時,不能進(jìn)行突發(fā)讀操作。這是由于個人計算機(jī)啟動時BIOS將PCI設(shè)備映射到非Cache存儲器中,會出現(xiàn)讀操作阻塞。對于突發(fā)寫操作,也存在同樣的問題。也就是說在PC環(huán)境下開發(fā)基于PCI的產(chǎn)品,PC機(jī)不支持突發(fā)傳輸。為了獲得高的數(shù)據(jù)傳輸量,就必須使用PCI主橋設(shè)計PC卡,并在DMA模式下操作。高傳輸性能的PCI總線主設(shè)備有很多,如PLX公司的PCI9054。本文以多通道高速數(shù)據(jù)系統(tǒng)的設(shè)計為例,說明PCI9054實(shí)現(xiàn)多通道DMA傳輸?shù)膽?yīng)用。?

1 PCI總線控制器的DMA傳輸?

??? PCI9054集成了兩個互相獨(dú)立的DMA通道,每個通道都支持Block DMA和Scatter/Gather DMA。其中通道0還支持請求(Demand)DMA傳輸方式。由于PCI9054的兩個DMA通道都是由DMA控制器和專用的雙向FIFO組成,當(dāng)每個通道進(jìn)行DMA傳輸時,它對于PCI總線和本地總線都是主設(shè)備。即DMA控制器將發(fā)起對本地總線和PCI總線操作,其過程如圖1所示。?

?

?

??? 如果要求從本地空間傳輸數(shù)據(jù)到PCI空間,PCI9054首先對本地總線執(zhí)行讀操作。在本地總線上可能有其它設(shè)備訪問本地總線,因此PCI9054需申請獲得本地總線訪問權(quán)。當(dāng)PCI9054獲得訪問權(quán)后,將本地數(shù)據(jù)讀入PCI9054的FIFO中。與此同時,PCI9054將向PCI總線仲裁器申請PCI總線訪問權(quán),將數(shù)據(jù)從FIFO寫到PCI總線空間。一旦DMA傳輸完成,PCI9054設(shè)定DMA“傳輸結(jié)束位”結(jié)束傳輸。如果設(shè)置中斷允許,PCI9054將根據(jù)設(shè)置向PCI總線或本地輸出中斷。同樣可將數(shù)據(jù)從PCI傳輸?shù)奖镜乜偩€空間。?

??? 雖然PCI9054的雙獨(dú)立DMA通道提供了靈活的優(yōu)先方案,支持多種傳輸模式" title="傳輸模式">傳輸模式,但在很多實(shí)際應(yīng)用中需多個DMA傳輸通道,必須根據(jù)不同應(yīng)用采用不同的策略。?

2 基于塊傳輸模式的多通道數(shù)據(jù)采集系統(tǒng)設(shè)計?

??? 塊傳輸是一種相對簡單的DMA傳輸模式。其操作是將本地總線存儲器中的數(shù)據(jù)傳輸?shù)紿OST內(nèi)存中,或?qū)OST內(nèi)存中的數(shù)據(jù)傳輸?shù)奖镜乜偩€上的存儲空間。在傳輸之前,HOST處理器設(shè)置DMA寄存器中本地和PCI空間起始地址、傳輸字節(jié)數(shù)、傳輸方向,然后HOST處理器設(shè)置DMA開始位,啟動DMA并按配置的信息傳輸。

??? 四通道數(shù)據(jù)采集系統(tǒng)如圖2所示。系統(tǒng)由4個輸入通道" title="輸入通道">輸入通道、4個FIFO以及實(shí)現(xiàn)接口控制邏輯的CPLD組成。由于系統(tǒng)有4個輸入通道,而PCI9054只有二個DMA通道,不能滿足輸入通道數(shù)的需要,為此必須進(jìn)行處理。設(shè)計的關(guān)鍵是建立一個所有輸入共用的DMA傳輸通道。然而,一個DMA通道只有一個本地空間和一個PCI空間,因此必須將不同通道的地址空間映射到DMA傳輸通道的地址空間中,從而識別每次傳輸數(shù)據(jù)的輸入通道。圖3給出了不同通道地址空間的映射關(guān)系。當(dāng)數(shù)據(jù)從本地地址空間傳輸?shù)絇CI地址空間時,首先將輸入通道的地址空間映射到本地的DMA訪問空間,DMA控制器將數(shù)據(jù)傳輸?shù)紻MA訪問的PCI空間,然后將PCI空間中的數(shù)據(jù)轉(zhuǎn)移到每個通道所對應(yīng)的內(nèi)存空間。

?

?

?

??? 輸入通道的存儲空間映射到DMA本地訪問空間是基于DMA訪問的。當(dāng)DMA控制器訪問本地空間時,訪問的地址對4個通道而言是一樣的,必須給出對不同本地空間的訪問策略。訪問策略可有多種選擇,如優(yōu)先訪問、排隊訪問、循環(huán)訪問等。圖4給出循環(huán)訪問策略,并在CPLD中實(shí)現(xiàn)。其狀態(tài)變化為:?

??? …→STATE0→STATE1→STATE2→STATE3→STATE0…→?

?

?

??? STATEx表示對本地空間x的操作狀態(tài)。當(dāng)輸入通道FIFOx的請求傳輸信號FLAGx有效,狀態(tài)機(jī)將停留在STATEx狀態(tài),等待DMA控制器的訪問。當(dāng)計算機(jī)啟動DMA通道時,產(chǎn)生通道選擇信號CSx,訪問本地空間FIFOx。當(dāng)DMA傳輸結(jié)束后,信號CSx無效,狀態(tài)轉(zhuǎn)為下一個狀態(tài)。如果在下一個狀態(tài)沒有檢測到請求信號,狀態(tài)將轉(zhuǎn)移到該狀態(tài)的下一個狀態(tài),直到檢測到請求信號FLAGx有效時,狀態(tài)機(jī)才停留在STATEx狀態(tài),等待DMA控制器訪問。?

??? DMA控制器訪問依賴于數(shù)據(jù)采集通道的請求傳輸信號FLAGx。如果數(shù)據(jù)采集通道啟動,將向相應(yīng)通道的FIFO中輸入數(shù)據(jù),一旦FIFO中的數(shù)據(jù)達(dá)到某種程度,設(shè)置請求傳輸信號。該信號將從本地中斷信號LINT#輸入并路由到PCI總線上,計算機(jī)將接收并響應(yīng)中斷。其中斷響應(yīng)程序流程如圖5所示。計算機(jī)讀PCI9054內(nèi)部中斷狀態(tài)寄存器,檢測為本地中斷,從CPLD中設(shè)置的狀態(tài)寄存器讀取通道狀態(tài)。然后啟動DMA控制器。當(dāng)數(shù)據(jù)傳輸結(jié)束后,PCI9054同樣產(chǎn)生PCI中斷,讀PCI9054內(nèi)部中斷狀態(tài)寄存器,檢測為DMA傳輸結(jié)束,這時查詢通道狀態(tài)寄存器的值,決定傳輸數(shù)據(jù)的通道,并對數(shù)據(jù)作相應(yīng)的處理,其處理方式依賴于不同的應(yīng)用需要。?

?

?

??? 如果應(yīng)用中需要有選擇性地傳輸輸入通道數(shù)據(jù),假設(shè)選擇通道0、1、3,這時只須對CPLD中設(shè)置的屏蔽寄存器寫數(shù)據(jù)初始化,即可屏蔽輸入通道2。?

??? 在該設(shè)計中存在一個問題:對于一次DMA傳輸,計算機(jī)需要響應(yīng)兩次中斷,這將增加計算機(jī)的處理事務(wù)。為此,可以采用PCI9054的DMA通道的請求傳輸方式。利用輸入通道的請求傳輸標(biāo)示信號產(chǎn)生DMA請求信號DREQ0#,從而啟動DMA傳輸,并產(chǎn)生DACK0#響應(yīng)信號。當(dāng)數(shù)據(jù)傳輸結(jié)束后,計算機(jī)響應(yīng)中斷,讀輸入通道狀態(tài)寄存器,判斷傳輸?shù)接嬎銠C(jī)中數(shù)據(jù)的輸入通道。?

3 基于Scatter/Gather傳輸模式的多通道數(shù)據(jù)采集系統(tǒng)設(shè)計

??? Scatter/Gather(或S/G)DMA傳輸模式是PCI9054的另外一種傳輸模式。其基本方法是將本地總線上或PCI總線上分散的數(shù)據(jù)塊一次性地通過DMA傳輸方式傳輸?shù)絇CI存儲空間或本地存儲空間,不需要多次啟動DMA控制器。數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)如圖2所示,空間映射如圖3。PCI9054的S/G傳輸模式其實(shí)是利用PCI9054內(nèi)部的DMA傳輸通道,建立了一個虛擬的DMA傳輸,并使用描述模塊建立一個傳輸鏈,將不同位置上的數(shù)據(jù)塊傳輸連接起來。該描述模塊包括PCI和Local的起始地址、傳輸字節(jié)數(shù)、傳輸方向和下一個描述模塊的地址。該模塊由HOST處理器在HOST存儲器中建立。然后HOST或本地處理器設(shè)置S/G模式;在PCI9054描述指針寄存器中建立開始描述塊地址。?

??? 當(dāng)本地總線請求傳輸信號有效時,產(chǎn)生PCI中斷INTA#,PC響應(yīng)中斷,設(shè)置DMA控制器控制位啟動傳輸,其傳輸過程如圖6所示。PCI9054根據(jù)開始描述塊地址裝載第一個描述塊并傳輸該空間的數(shù)據(jù)。當(dāng)?shù)谝粔K數(shù)據(jù)傳輸結(jié)束后,檢測描述鏈結(jié)束位。如果沒有設(shè)置,表明不是最后的塊傳輸,指定下一個描述模塊的位置,并繼續(xù)裝載描述塊和傳輸數(shù)據(jù),如此重復(fù)直至檢測到描述鏈結(jié)束位被設(shè)置。當(dāng)檢測到鏈結(jié)束狀態(tài)位時,表明PCI9054沒有下一個數(shù)據(jù)塊傳輸,設(shè)置DMA傳輸結(jié)束狀態(tài)位,表明數(shù)據(jù)傳輸結(jié)束。?

?

?

??? 對于多通道數(shù)據(jù)采集應(yīng)用,假設(shè)每個輸入通道數(shù)據(jù)采集的速率一樣,那么輸入到每個通道中FIFO的數(shù)據(jù)是一樣的速率。當(dāng) FIFO中的數(shù)據(jù)達(dá)到一定程度時,產(chǎn)生中斷請求傳輸,計算機(jī)響應(yīng)中斷,進(jìn)行上述操作。由此可見每次啟動DMA傳輸,將4個數(shù)據(jù)采集通道的數(shù)據(jù)一次傳輸?shù)接嬎銠C(jī)內(nèi)存的不同空間中。當(dāng)然,如果只需傳輸4個通道中的幾個,如只傳輸通道1、2、4的數(shù)據(jù),那么只用修改塊傳輸描述塊中的參數(shù),重新建立塊傳輸鏈,只傳輸輸入通道1、2、4的數(shù)據(jù),從而屏蔽了輸入通道3。?

??? 該傳輸方式相對塊傳輸模式而言,不用進(jìn)行4次DMA啟動,減少訪問的開銷,同時不需要設(shè)計復(fù)雜的接口電路。由于S/G模式對多塊數(shù)據(jù)傳輸是統(tǒng)一進(jìn)行的,要求輸入通道的數(shù)據(jù)輸入速率一致,或有相對穩(wěn)定的關(guān)系,使每個塊傳輸?shù)拇笮∠鄬Ψ€(wěn)定。當(dāng)然每個通道的采樣速率可能不一致,并隨時需要調(diào)整,這樣就需要相應(yīng)地修改描述塊的參數(shù),使S/G模式操作變得較復(fù)雜。塊傳輸模式可以根據(jù)每個通道各自請求的傳輸狀態(tài)進(jìn)行傳輸,表現(xiàn)出應(yīng)用的靈活性。?

??? 該設(shè)計雖然只是針對多通道數(shù)據(jù)采集應(yīng)用,但可以在其它的開發(fā)應(yīng)用中采用,如圖像傳輸可傳輸多個經(jīng)過壓縮或沒有壓縮的圖像數(shù)據(jù)到計算機(jī)中存儲或顯示。另外,該設(shè)計中的數(shù)據(jù)傳輸模式不僅限于個人計算機(jī)環(huán)境,還可廣泛應(yīng)用于嵌入式系統(tǒng)中,如多路接入通信系統(tǒng)等。?

參考文獻(xiàn)?

1 PCI9054 Data Book. PLX Technology Inc. 2000?

2 PCI Local Bus Specification,v.2.2. December,1998.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容