基于PCI軟“核”的PCI總線接口設(shè)計(jì)與實(shí)現(xiàn)
STOP_USR 是STOP信號(hào)的“克隆”版本。
CFG_HIT 表明一個(gè)有效的配置周期開(kāi)始。
ADDR_VLD 表明當(dāng)前作業(yè)地址線的起始地址有效。
S_SRC_EN 在Slave模式讀操作期間,告訴用戶模塊驅(qū)動(dòng)下一片數(shù)據(jù)到總線ADIO[31:0]上。
S_DATA_VLD 表明當(dāng)前ADIO[31:0]上的數(shù)據(jù)為有效數(shù)據(jù)(在Slave模式下)。
BASE_HIT[7:0] 表明基地址寄存器譯碼并選中相應(yīng)的PCI映射空間。
CFG[255:0] PCI設(shè)備配置空間接口信號(hào)。
M_SRC_EN 在寫(xiě)操作時(shí),表明數(shù)據(jù)源可以驅(qū)動(dòng)下一片數(shù)據(jù)到ADIO[31:0]上(在INItiator模式下)。
M_DATA_VLD 表明當(dāng)前數(shù)據(jù)線ADIO[31:0]上的數(shù)據(jù)為有效數(shù)據(jù)(在Initiator模式下)。
REQUEST 在主設(shè)備模式下,DMA控制器請(qǐng)求系統(tǒng)仲裁器讓出總線。
M_WRDN 在主設(shè)備模式下,當(dāng)前的作業(yè)進(jìn)行讀操作或?qū)懖僮?。M_WRDN=1時(shí)表示寫(xiě),M_WRDN=0時(shí)表示讀。
M_DBE[3:0] 在主設(shè)備模式下,驅(qū)動(dòng)總線命令和字節(jié)有效信號(hào)。
COMPLETE 在主設(shè)備模式下,當(dāng)前的DMA方式傳送數(shù)據(jù)完成。
M-DMTA 表示在Initiator模式下當(dāng)前主設(shè)備正片于數(shù)據(jù)周期。
DR_BUS 表示主設(shè)備狀態(tài)機(jī)正驅(qū)動(dòng)PCI總線。
I_IDLE 表示主設(shè)備狀態(tài)機(jī)正在空閑狀態(tài),當(dāng)前PCI總線沒(méi)有被驅(qū)動(dòng)。
M_ADDR_USR 表示主設(shè)備狀態(tài)機(jī)在地址周期要求驅(qū)動(dòng)地址信號(hào)到ADIO[31:0]上。
RST PCI總線復(fù)位信號(hào)的“克隆”版本。
CLK 由系統(tǒng)緩沖區(qū)驅(qū)動(dòng)的PCI總線時(shí)鐘。
INTER_USR 由用戶發(fā)出的中斷請(qǐng)求信號(hào)。是INTR_A信號(hào)的“克隆”版本。
從LogiCore提供的接口看出,該軟“核”將復(fù)雜的PCI接口按照PCI的兩種工作模式轉(zhuǎn)化成相對(duì)簡(jiǎn)單的Slave和Master兩組獨(dú)立接口信號(hào)。用戶可以根據(jù)實(shí)際需要來(lái)確定的應(yīng)用那種模式,從而選用相應(yīng)的一組或兩組信號(hào)作為接口。而且LogiCore這種橋梁作用只是對(duì)PCI功能進(jìn)行劃分,它將PCI控制器的核心邏輯留給用戶來(lái)實(shí)現(xiàn),并給出狀態(tài)機(jī)的接口信號(hào)。
2 PCI Master控制器的實(shí)現(xiàn)
以一個(gè)基于PCI總線的數(shù)據(jù)采集卡為例說(shuō)明利用LogiCore實(shí)現(xiàn)PCI Master控制器的方法。由PCI協(xié)議知道,當(dāng)PCI設(shè)備工作在Master模式下,可以直接訪問(wèn)計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器,而不通過(guò)計(jì)算機(jī)CPU。為此,在PCI Master控制器中必須設(shè)計(jì)一個(gè)DMA控制器。這樣同主存儲(chǔ)器傳送數(shù)據(jù)時(shí),可以暫時(shí)接管系統(tǒng)總線,控制傳送字節(jié)數(shù),判斷DMA傳輸是否結(jié)束,發(fā)出DMA結(jié)束等信號(hào)來(lái)保證數(shù)據(jù)的正確傳送。該數(shù)據(jù)采集卡所實(shí)現(xiàn)的功能就是不斷從外部接收數(shù)據(jù)并以DMA方式輸入到計(jì)算機(jī)系統(tǒng)緩沖區(qū)中,同時(shí)將預(yù)先放在計(jì)算機(jī)內(nèi)存中的大量數(shù)據(jù)以DMA方式輸出到外部的儀器中。DMA控制器屬于LogiCore邏輯框圖中的用戶控制模塊。它由現(xiàn)行字節(jié)數(shù)寄存器、現(xiàn)行地址寄存器、基字節(jié)數(shù)寄存器、基地址寄存器、半滿地址寄存器、全滿地址寄存器、狀態(tài)寄存器、讀寫(xiě)緩沖器及控制寄存器和優(yōu)先級(jí)編碼器等組成、DMA控制器原理圖如圖3所示。其中控制寄存器和優(yōu)先級(jí)編碼器是DMA控制器的關(guān)鍵。
2.1 DMA控制器的特點(diǎn)
(1)現(xiàn)行地址寄存器、基字節(jié)數(shù)寄存器、基地址寄存器、半滿地址寄存器、全滿地址寄存器5個(gè)寄存器可由高層應(yīng)用程序根據(jù)當(dāng)前驅(qū)動(dòng)程序分配的系統(tǒng)內(nèi)存空間來(lái)靈活配置。當(dāng)傳送完規(guī)定的傳送長(zhǎng)度(字節(jié)數(shù)減到零時(shí)),結(jié)束當(dāng)前DMA傳送并自動(dòng)重新對(duì)現(xiàn)行地址寄存器進(jìn)行初始化,具有自動(dòng)初始化能力。
(2)優(yōu)先級(jí)編碼器中的4個(gè)DMA請(qǐng)求源的優(yōu)先級(jí)是固定的,不可以旋轉(zhuǎn)。優(yōu)先級(jí)按照從高到低依次為讀緩沖器、STATUS_C(由狀態(tài)寄存器C-D發(fā)出的)、寫(xiě)緩沖器、STATUS_D(由狀態(tài)寄存器C-D發(fā)出的)。
優(yōu)先權(quán)編碼器對(duì)4個(gè)DMA請(qǐng)求源進(jìn)行優(yōu)先級(jí)編碼,并向LogiCore發(fā)出DMA請(qǐng)求信號(hào)。
(3)DMA數(shù)據(jù)傳送有單字節(jié)傳送和數(shù)據(jù)塊傳送兩種方式。數(shù)據(jù)塊傳送方式可由用戶初始化基字節(jié)寄存器來(lái)靈活設(shè)置一次傳送的數(shù)據(jù)塊長(zhǎng)度。DMA控制器向系統(tǒng)緩沖區(qū)發(fā)送狀態(tài)寄存器C-D中的信息時(shí)采用單字節(jié)傳送方式。而傳送讀緩沖器和寫(xiě)緩存器中的數(shù)據(jù)時(shí)采用數(shù)據(jù)塊傳送方式并可由用戶設(shè)置一次傳送數(shù)據(jù)的長(zhǎng)度。此時(shí)每傳送一個(gè)數(shù)據(jù),地址指針加1,字節(jié)數(shù)據(jù)1。
(4)DMA控制器中讀緩沖器和寫(xiě)緩沖器都是2KB。
2.2 DMA控制器基本工作原理
2.2 DMA控制器基本工作原理
首先由高層應(yīng)用程序根據(jù)采集卡的低層驅(qū)動(dòng)程序分配的系統(tǒng)內(nèi)存地址對(duì)基地址寄存器、半滿地址寄存器、全滿地址寄存器、狀態(tài)寄存器、讀寫(xiě)緩沖器和控制寄存器進(jìn)行初始化。然后啟動(dòng)系統(tǒng),開(kāi)始工作。當(dāng)讀緩沖器的數(shù)據(jù)量不到半滿或?qū)懢彌_器中接收到的數(shù)據(jù)量已超過(guò)半滿或狀態(tài)寄存器C-D有狀態(tài)信息向高層報(bào)告時(shí),則向優(yōu)先級(jí)編碼器發(fā)出相應(yīng)的請(qǐng)求信號(hào)。DMA優(yōu)先級(jí)編碼器根據(jù)DMA請(qǐng)求對(duì)象的操作類(lèi)型向DMA控制寄存器發(fā)出相應(yīng)的控制信號(hào)。當(dāng)DMA控制器檢索到對(duì)應(yīng)的控制信息發(fā)生變化時(shí),向LogiCore發(fā)出DMA請(qǐng)求,并用基字節(jié)寄存器和基地址寄存器分別初始化現(xiàn)行字節(jié)數(shù)寄存器和現(xiàn)行地址寄存器。當(dāng)計(jì)算機(jī)系統(tǒng)允許DMA控制器占用PCI總線時(shí),則DMA控制器接管PCI總線,并在地址周期向LogiCore發(fā)出DMA讀寫(xiě)命令,同時(shí)輸出當(dāng)前要對(duì)系統(tǒng)緩沖區(qū)操作的起始地址。在隨后的數(shù)據(jù)周期中,從數(shù)據(jù)總線ADIO上輸出或接收數(shù)據(jù),同時(shí)修改地址指針(DMA支持隱含尋址)和字節(jié)計(jì)數(shù)器值,DMA控制器檢測(cè)傳送是否結(jié)束。如未結(jié)束則不停循環(huán)傳送。當(dāng)檢測(cè)到字節(jié)計(jì)數(shù)器即將為零時(shí),則向LogiCore發(fā)出COMPLETE信號(hào),COMPLETE信號(hào)持續(xù)到字節(jié)計(jì)數(shù)器為零時(shí),DMA控制器釋放掉對(duì)PCI總線的控制權(quán),使CPU恢復(fù)正常工作狀態(tài)。
在DMA控制器中,狀態(tài)寄存器C-D有兩個(gè)DMA請(qǐng)求源STATUS_C和STATUS_D。其中STATUS_C在地址比較器檢測(cè)到讀緩沖器讀完對(duì)應(yīng)系統(tǒng)緩沖區(qū)一半空間或全部讀守對(duì)應(yīng)系統(tǒng)緩沖區(qū)數(shù)據(jù)時(shí),置相應(yīng)的狀態(tài)信息并向優(yōu)先級(jí)編碼器發(fā)出STATUS_C請(qǐng)求信號(hào)。而STATUS_D在地址比較器檢測(cè)到寫(xiě)緩沖器寫(xiě)完對(duì)應(yīng)系統(tǒng)緩沖區(qū)數(shù)據(jù)、置相應(yīng)的狀態(tài)信息并向優(yōu)先級(jí)編碼器發(fā)出STATUS_D的請(qǐng)求信號(hào)。
值和注意的是,在DMA控制器設(shè)計(jì)過(guò)程中,當(dāng)進(jìn)行數(shù)據(jù)塊傳輸、字節(jié)數(shù)寄存器計(jì)數(shù)快結(jié)束時(shí),應(yīng)提前向計(jì)算機(jī)系統(tǒng)發(fā)出完成本次數(shù)據(jù)塊傳送的COMPLETE信號(hào),這樣可保證DMA數(shù)據(jù)塊傳送的正確進(jìn)行。至于提前幾個(gè)字節(jié)數(shù)據(jù)可以根據(jù)試驗(yàn)來(lái)確定,一般提前2~4個(gè)字節(jié)即可。
PCI總線設(shè)計(jì)中定義的雙向信號(hào),均要用OE信號(hào)來(lái)控制。同時(shí)有些信號(hào)如地址比較等要進(jìn)行分割,以使用最少的通用邏輯模塊數(shù)來(lái)實(shí)現(xiàn)。這些是PCI總線設(shè)計(jì)所要注意的事項(xiàng)。由于LogiCore中對(duì)這些情況在邏輯上已經(jīng)進(jìn)行優(yōu)化處理,從而使用戶避免了同復(fù)雜的PCI接口打交道,減少犯錯(cuò)誤的可能,縮短了開(kāi)發(fā)周期。
本數(shù)據(jù)采集卡在WINDOWS 98多任務(wù)操作系統(tǒng)下運(yùn)行數(shù)據(jù)傳輸速率可以達(dá)到140Mbps,滿足了實(shí)際要求。
電磁爐相關(guān)文章:電磁爐原理
評(píng)論