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