摘要:文中介紹了具有PCI總線主控功能的專用接口芯片——S5935的基本結(jié)構(gòu),闡述了它如何實(shí)現(xiàn)DMA控制器的功能,并給出了用于實(shí)現(xiàn)DMA傳輸?shù)腤DM驅(qū)動(dòng)程序。
1前言
計(jì)算機(jī)與外設(shè)之間有三種傳輸方式:程序方式、中斷方式、DMA(DirectMemoryAccess)方式。其中,前兩種方式都是CPU通過執(zhí)行指令來實(shí)現(xiàn)主機(jī)與外設(shè)間的數(shù)據(jù)傳輸,傳輸速度較低;后一種方式是由DMA控制器直接實(shí)現(xiàn)外設(shè)和存儲(chǔ)器之間的數(shù)據(jù)傳輸,它不通過CPU,傳輸速度較高。因此在高速數(shù)據(jù)傳輸系統(tǒng)中,常常利用DMA方式來實(shí)現(xiàn)計(jì)算機(jī)與外設(shè)間的數(shù)據(jù)傳輸。
由于個(gè)人計(jì)算機(jī)中的PCI總線具有總線主設(shè)備支持的特點(diǎn)(總線主設(shè)備支持的特點(diǎn)就是全面支持PCI總線主設(shè)備,允許同級(jí)PCI總線訪問和通過PCI—PCI與擴(kuò)展總線橋訪問主存儲(chǔ)器和擴(kuò)展總線設(shè)備,并且,PCI主設(shè)備能夠訪問駐留于總線級(jí)別較低的另一個(gè)PCI總線上的目標(biāo))。所以,可以有兩種途徑來實(shí)現(xiàn)DMA傳輸,其一是利用計(jì)算機(jī)內(nèi)部的DMA控制器;其二是利用具有總線主控功能的PCI接口芯片。由于后一種途徑不占用計(jì)算機(jī)系統(tǒng)的DMA通道,節(jié)省了計(jì)算機(jī)的資源,因此,使用較多。
具有總線主控功能的PCI接口芯片主要有兩種類型:一是可嵌入IP核的可編程邏輯器件,如Xilinx公司的Sparten系列等;二是專用的PCI橋接芯片,如PLX公司的PCI9054、AMCC公司的S5935等產(chǎn)品。前者設(shè)計(jì)較為靈活,但是要求開發(fā)者對(duì)PCI規(guī)范有較深入的理解,開發(fā)周期較長;后者設(shè)計(jì)較為簡單,開發(fā)者只要正確配置接口芯片的配置空間,注意引腳的電氣連接規(guī)范,就可以正確使用,開發(fā)周期較短。本文以專用PCI接口芯片——S5935為例,介紹其作為PCI總線主設(shè)備時(shí)如何實(shí)現(xiàn)DMA傳輸。
2AMCCS5935芯片
S5935是AMCC公司S59XX系列接口芯片中的一種,該芯片功能強(qiáng)大,可用于高速數(shù)據(jù)采集卡、視頻加速卡、多媒體通信等。它既可作PCI總線主設(shè)備,也可作PCI總線從設(shè)備,應(yīng)用較為廣泛。它有三種工作方式:MAILBOX(郵箱)工作方式、PASS-THRU(直通)工作方式、FIFO(先進(jìn)先出)工作方式。其中前兩種工作方式只能是S5935作為PCI總線從設(shè)備時(shí)的工作方式,F(xiàn)IFO工作方式可以是S5935作為PCI總線主設(shè)備時(shí)的工作方式,也可以是S5935作為PCI總線從設(shè)備時(shí)的工作方式。
S5935的結(jié)構(gòu)如圖1所示,它有三個(gè)接口:PCI總線接口、本地端接口和非易失性存儲(chǔ)
圖1S5935結(jié)構(gòu)框圖
器接口。PCI接口用來實(shí)現(xiàn)計(jì)算機(jī)與S5935間的數(shù)據(jù)、地址、命令等的傳輸。本地端接口用來實(shí)現(xiàn)S5935與外部存儲(chǔ)器間的數(shù)據(jù)傳輸以及與外部控制邏輯電路間的地址、命令等的傳輸。非易失性存儲(chǔ)器接口有兩種類型,它既可以與串行nvRAM相連,也可以與字節(jié)nvRAM相連,實(shí)現(xiàn)S5935頭部空間的配置。
S5935的配置空間有256字節(jié),分為頭部配置空間和操作寄存器空間。頭部占用64字節(jié),它又可以分為兩部份,前16個(gè)字節(jié)的定義在各種類型的設(shè)備中都是一樣的,如廠商代碼VID、設(shè)備代碼DID,其余48個(gè)字節(jié)可以根據(jù)設(shè)備支持的基本功能情況進(jìn)行不同的設(shè)置,如中斷引腳的設(shè)置、PASS-THRU映射在存儲(chǔ)器或I/O空間的大小設(shè)置以及PCI操作寄存器的基地址設(shè)置等。操作寄存器分為16雙字的PCI操作寄存器和18雙字的本地操作寄存器,前者只能通過PCI總線對(duì)其進(jìn)行訪問,后者則只能通過本地總線對(duì)其進(jìn)行訪問。它們的結(jié)構(gòu)非常相似,其主要區(qū)別是本地操作寄存器比PCI操作寄存器多兩個(gè)用于直通工作方式的直通地址寄存器(APTA)和直通數(shù)據(jù)寄存器(APTD),而少一個(gè)主控寄存器(MCSR)。
3S5935的DMA控制器特性
S5935的FIFO工作方式可以工作在總線主控模式下,此時(shí)S5935相當(dāng)于一個(gè)帶有數(shù)據(jù)緩沖區(qū)的DMA控制器,可以在不占用計(jì)算機(jī)系統(tǒng)的DMA通道的情況下,進(jìn)行DMA傳輸。其內(nèi)部結(jié)構(gòu)如圖2所示,它有兩個(gè)單向FIFO:一個(gè)FIFO的數(shù)據(jù)傳輸方向是從PCI總線到本地總線,另一個(gè)用于本地總線到PCI總線的數(shù)據(jù)傳輸,每個(gè)FIFO的大小為8×32bit;還有兩個(gè)地址寄存器和兩個(gè)數(shù)據(jù)寄存器,分別用于存儲(chǔ)DMA傳輸?shù)氖椎刂泛蛡鬏斔璧淖止?jié)數(shù)。S5935的DMA傳輸可以設(shè)置為由本地總線發(fā)起,也可以由PCI總線發(fā)起的,它是在初始化時(shí),通過設(shè)置nvRAM的45h單元的bit7實(shí)現(xiàn)的。下面以由PCI總線發(fā)起的DMA傳輸為例,介紹S5935的DMA控制器特性:
當(dāng)需要進(jìn)行DMA傳輸時(shí),驅(qū)動(dòng)程序通過設(shè)置MCSR寄存器的bit14或bit10,向S5935發(fā)出DMA請(qǐng)求信號(hào)(前者用于計(jì)算機(jī)內(nèi)部存儲(chǔ)器讀,后者用于內(nèi)部存儲(chǔ)器寫),S5935根據(jù)FIFO管理方案,如滿足條件,使能REQ#信號(hào),申請(qǐng)總線控制權(quán)。
當(dāng)總線仲裁器收到總線控制請(qǐng)求信號(hào)后,如果允許,則使能GNT#信號(hào),從而將總線的控制權(quán)傳遞給S5935。
S5935得到總線控制權(quán)以后,將存儲(chǔ)在MWAR(或MRAR)內(nèi)的地址信號(hào)發(fā)送到PCI地址總線上,并且每傳送一個(gè)字節(jié),MWAR(或MRAR)內(nèi)的地址就會(huì)自動(dòng)更新,以指向下一個(gè)要傳送的字節(jié)。
S5935通過C/BE[3:0]#發(fā)送讀/寫控制信號(hào),例如:發(fā)送的是0110,則為內(nèi)部存儲(chǔ)器讀,發(fā)送的是0111,就為內(nèi)部存儲(chǔ)器寫。
為了決定所傳送的字節(jié)數(shù),并且判斷DMA傳送是否結(jié)束,S5935利用MWTC(或MRTC)存儲(chǔ)需要傳輸?shù)淖止?jié)數(shù),每傳送1個(gè)字節(jié),字節(jié)計(jì)數(shù)器的值便自動(dòng)減1,減為0時(shí),則DMA過程結(jié)束。
當(dāng)DMA過程結(jié)束時(shí),S5935使REQ#信號(hào)為高,將總線控制權(quán)交還給總線仲裁器。由此我們可以看出,當(dāng)S5935作總線主設(shè)備時(shí),其功能類似于一個(gè)DMA控制器。當(dāng)DMA傳輸由PCI總線發(fā)起,DMA控制器的初始化由驅(qū)動(dòng)程序完成;當(dāng)DMA傳輸由本地總線發(fā)起,其初始化由外部邏輯電路完成。
圖2S5935的FIFO結(jié)構(gòu)
4利用S5935實(shí)現(xiàn)DMA傳輸?shù)膽?yīng)用實(shí)例
S5935的FIFO既可以同步方式工作,也可以異步方式工作。下面以PCI總線發(fā)起的DMA傳輸為例,介紹其在異步方式下的DMA傳輸。
4.1硬件設(shè)計(jì)
圖3S5935與外部FIFO的接口
圖3標(biāo)示為S5935與外部存儲(chǔ)器(異步FIFO)的主要信號(hào)引腳連接情況。由于該傳輸是由PCI總線發(fā)起的,所以外部可編程邏輯電路(FPGA)只需要滿足S5935對(duì)外部FIFO的讀寫時(shí)序要求,DMA控制器的初始化由驅(qū)動(dòng)程序完成。利用VHDL語言編程外部控制邏輯,其外部FIFO的讀時(shí)序(也是S5935內(nèi)部FIFO的寫時(shí)序)如圖4所示,外部FIFO的寫時(shí)序(也是S5935內(nèi)部FIFO的讀時(shí)序)與它類似。
圖4外部FIFO的讀時(shí)序
4.2驅(qū)動(dòng)程序的設(shè)計(jì)
用于實(shí)現(xiàn)DMA傳輸?shù)尿?qū)動(dòng)程序的流程如圖5所示。
圖5驅(qū)動(dòng)程序流程圖
5結(jié)束語
隨著三維動(dòng)畫、視頻跟蹤等新興行業(yè)的快速發(fā)展,數(shù)據(jù)的傳輸速率要求越來越高,CPU任務(wù)越來越繁重,在計(jì)算機(jī)與外設(shè)之間采用DMA方式傳輸不僅可以提高數(shù)據(jù)的傳輸速率,而且可以減輕CPU的負(fù)擔(dān)。采用專用的具有總線主控功能的接口芯片可以使設(shè)計(jì)更簡單,開發(fā)周期更短,不失為一種經(jīng)濟(jì)的、高效率的辦法。
評(píng)論