基于PCI總線的高速數(shù)據(jù)采集卡的設(shè)計(jì)
基于PCI總線的高速數(shù)據(jù)采集卡的設(shè)計(jì)
一、引言
數(shù)據(jù)采集是數(shù)字信號(hào)處理中的重要環(huán)節(jié)。針對不同任務(wù),數(shù)據(jù)采集要達(dá)到的技術(shù)指標(biāo)也不同。對于瞬態(tài)信號(hào)、雷達(dá)信號(hào)和圖象處理都要求幾MB/S甚至幾十MB/S的速度。而目前用于PC機(jī)的數(shù)據(jù)采集卡大部分是基于ISA總線的,其最大缺點(diǎn)是傳輸速度太低,不能實(shí)現(xiàn)實(shí)時(shí)傳輸[1]。PCI總線是一種目前較為流行的、*的高速同步總線,它的歷史較短,正式的2.2版本于1999年2月發(fā)布。其優(yōu)點(diǎn)在于能夠?qū)崿F(xiàn)設(shè)備間的快速訪問,33MHZ/32位的PCI總線可以實(shí)現(xiàn)132MB/S的數(shù)據(jù)傳輸率,目前已經(jīng)有66MHZ/64位的PCI總線,傳輸速率更快[2]。PCI是獨(dú)立于處理器的同步總線,不需CPU的介入便可進(jìn)行數(shù)據(jù)傳輸。此外,還支持突發(fā)傳遞、即插即用功能。PCI以其突出的性能備受計(jì)算機(jī)和通信界的青睞,將取代以往的總線,成為高檔機(jī)及高性能工作站外設(shè)的基石。
二、數(shù)據(jù)采集卡的結(jié)構(gòu)及性能
本數(shù)據(jù)采集卡主要由一個(gè)PCI總線控制器(PCI9050)[3],一塊采集控制芯片(MAX7128),以及一個(gè)A/D轉(zhuǎn)換模塊構(gòu)成,其具體的結(jié)構(gòu)框圖如圖1所示。該數(shù)據(jù)采集卡的性能可以達(dá)到每秒采樣20M個(gè)樣本,A/D字長為8位,數(shù)據(jù)傳輸率在20MB/S以上,這對以往基于ISA總線的數(shù)據(jù)采集系統(tǒng)來說,根本無法實(shí)現(xiàn)。
圖中粗線表示數(shù)據(jù)/地址總線,細(xì)線表示控制線。前端信號(hào)經(jīng)過提取、放大后,進(jìn)入A/D;在CPLD控制下,高速A/D芯片將模擬信號(hào)轉(zhuǎn)為數(shù)字信號(hào),并將數(shù)據(jù)輸出,存儲(chǔ)在雙口RAM中;當(dāng)一組數(shù)據(jù)存儲(chǔ)完畢后,由CPLD通過PCI控制芯片向主機(jī)申請中斷,主機(jī)響應(yīng)中斷后通過PCI控制芯片直接讀取RAM中的數(shù)據(jù)。
三、數(shù)據(jù)采集卡的設(shè)計(jì)方案
1、PCI總線控制器的實(shí)現(xiàn)
由于PCI總線協(xié)議的復(fù)雜度較高,其接口電路實(shí)現(xiàn)起來相對困難。因此,目前主要有兩種方案來實(shí)現(xiàn)PCI總線的控制:一種是采用專用的PCI接口芯片;另一種是用可嵌入PLD中的IP核。前者由于芯片本身已完成大部分PCI協(xié)議,不需設(shè)計(jì)者精通PCI協(xié)議的各種細(xì)節(jié),開發(fā)周期短,但系統(tǒng)集成度較低,并且費(fèi)用稍高;后者需要設(shè)計(jì)者根據(jù)PCI協(xié)議自己設(shè)計(jì)接口邏輯,要求設(shè)計(jì)人員*掌握PCI協(xié)議,設(shè)計(jì)的難度相對較大,但由于可將PCI接口邏輯與用戶邏輯集成在一片PLD中,提高了電路板的集成度和系統(tǒng)的性能。根據(jù)設(shè)計(jì)需求和實(shí)際情況,我們最終選擇了第一種方式,采用了PLX公司的PLX9050作為PCI總線控制器,它即能滿足設(shè)計(jì)需要,并且價(jià)格較低。
PLX9050是PLX公司推出的用于低成本適配器的PCI總線目標(biāo)接口芯片,支持32位、33MHZ的PCI總線規(guī)范。它提供用于適配卡的小型而高性能的PCI總線目標(biāo)接口,主要功能與性能如下:
(1)符合PCI2.1規(guī)范,接口芯片支持低成本從屬適配器;
(2)五個(gè)本地總線地址空間和四個(gè)片選信號(hào)
(3)支持復(fù)用和非復(fù)用8位、16位和32位通用本地總線;
(4)串行EEPROM用于裝載配置信息;
(5)可將兩個(gè)來自本地總線的中斷轉(zhuǎn)換成PCI中斷;
(6)支持本地總線與PCI總線時(shí)鐘異步運(yùn)行。
本設(shè)計(jì)方案采用了非復(fù)用方式(C模式),8位本地總線,兩個(gè)地址空間,一個(gè)本地中斷,接口電路的設(shè)計(jì)很簡單,在此不作具體介紹。
如果不用PCI9050的默認(rèn)配置(大多數(shù)情況不用),設(shè)計(jì)者需要對其進(jìn)行配置。配置數(shù)據(jù)預(yù)先燒入EEPROM中,上電后PCI9050自動(dòng)裝入。PCI9050的配置寄存器分為兩類。一類是PCI配置寄存器,另一類是本地配置寄存器。PCI配置寄存器配置PCI9050的PCI總線接口方面的屬性,根據(jù)文檔說明進(jìn)行配置即可。本地配置寄存器配置PCI9050的本地總線接口的屬性,由21個(gè)雙字配置寄存器組成,要根據(jù)實(shí)際開發(fā)的硬件板卡的硬件資源進(jìn)行配置。本地配置寄存器共分六類:本地地址空間范圍寄存器(LASxRR)和擴(kuò)展ROM范圍寄存器、本地地址空間的本地基地址寄存器(重新映射寄存器LASxBA)、本地地址空間總線屬性描述寄存器(LASxBRD)、片選基地址寄存器類(CSxBASE)、中斷控制寄存器、混合控制寄存器。在編寫配置EEPROM時(shí),要注意各屬性寄存器和控制寄存器的設(shè)置不要前后矛盾,地址范圍和基址寄存器的設(shè)置要符合要求。在設(shè)計(jì)中,用了兩個(gè)空間,一個(gè)為存貯器空間(對應(yīng)雙口RAM),一個(gè)為I/O空間(用于主機(jī)對采集卡的控制)。
下面以本地地址空間1為例說明將本地地址總線映射到PCI總線的過程。首先設(shè)置LAS3RR,初始化時(shí)PCI9050芯片將從EEPROM中讀出此值,放入PCI基地址寄存器5中,主機(jī)先寫入FFFFFFFFH后,再讀回其值,為1的位表示需要分配地址。例如當(dāng)LAS3RR的內(nèi)容為FFF00000H時(shí),PCI總線給本地地址空間3分配的PCI基地址可能是12300000H(此值是隨機(jī)的)。該例中內(nèi)存區(qū)域的大小是1M。接下來設(shè)置LAS3BA,即填入PCI地址12300000H對應(yīng)的本地總線地址。例如若填入04000001H。表明PCI總線上對PCI地址12300000H的訪問亦即對本地地址04000000H的訪問(注意C模式時(shí)最多只有28條地址線,J模式時(shí)可以有32位)。然后設(shè)置對應(yīng)的片選寄存器3,以便當(dāng)PCI總線對本地總線地址空間3的地址進(jìn)行訪問時(shí),片選信號(hào)3有效。其值設(shè)為04080001H,表示片選3的基地址是04080000H,其地址范圍計(jì)算:基地址第一個(gè)不是零的位前面有19個(gè)零,則范圍是2的19次冪再乘以2。這樣當(dāng)PCI的訪問地址落入片選3寄存器定義的范圍內(nèi)時(shí),片選3信號(hào)CS3#有效,用來選擇本地總線上的外圍設(shè)備。最后配置本地地址空間3的本地總線描述寄存器,具體請查看相應(yīng)參考文檔。
2、CPLD的內(nèi)部邏輯設(shè)計(jì)
CPLD中集成了DMA控制器、PCI局部總線及A/D控制等功能,是設(shè)計(jì)中的重點(diǎn)。設(shè)計(jì)中選用ALTERA的EPM7128芯片,其內(nèi)部邏輯框圖如圖2所示。其中,9050接口主要完成與PCI總線的握手,例如根據(jù)9050的時(shí)序要求產(chǎn)生相應(yīng)的響應(yīng)信號(hào)、當(dāng)一組數(shù)據(jù)寫入完畢后產(chǎn)生中斷請求信號(hào)等;時(shí)鐘部分用于產(chǎn)生片內(nèi)各種時(shí)鐘信號(hào);控制部分主要根據(jù)主機(jī)命令開啟(關(guān)閉)A/D及對CPLD片內(nèi)其它部分進(jìn)行控制;DMA控制器的關(guān)鍵部分是地址控制器,寫入RAM時(shí)地址控制器根據(jù)A/D頻率產(chǎn)生遞增的RAM地址,另外還有RAM片選信號(hào)等其它必要的邏輯。
主機(jī)通過向本地I/O空間的特定地址單元寫入特定值來發(fā)出啟動(dòng)命令,控制部分使A/D相應(yīng)引腳置有效,以啟動(dòng)A/D。A/D數(shù)據(jù)線上數(shù)據(jù)有效的同時(shí),DMA控制器輸出RAM寫地址和RAM片選信號(hào),將數(shù)據(jù)存入RAM。當(dāng)RAM地址大于特定值(此值小于RAM容量)時(shí),PCI局部總線部分產(chǎn)生LINT信號(hào),申請中斷。同時(shí),A/D仍繼續(xù)按地址遞增方式將變換后數(shù)據(jù)存入RAM,當(dāng)RAM寫地址為最高有效地址后,地址控制器歸零,重新向RAM低地址寫入數(shù)據(jù)。由于PCI總線速度比A/D變換速度快,不會(huì)出現(xiàn)未讀數(shù)據(jù)被覆蓋的情況。主機(jī)收到中斷信號(hào)后,進(jìn)入中斷處理程序,從低地址開始讀取數(shù)據(jù)采集卡上的RAM。PLX9050的數(shù)據(jù)線/地址線與RAM的數(shù)據(jù)線/地址線直接相連,讀寫控制線與CPLD相連,中斷過程中,CPLD根據(jù)邏輯產(chǎn)生控制信號(hào), PLX9050直接讀RAM中的數(shù)據(jù)。