惠罡
(中國電子科技集團第二十研究所,陜西西安 710068)
某船舶的信息保障系統需要將羅經設備提供的艦船姿態信息做采集和分發。該系統的中心計算機為基于CPCI 總線的人機接口計算機,需設計一基于CPCI 總線的高速接口模塊,將羅經設備提供的模擬軸角信號采集進計算機系統中。
該羅經設備輸出的模擬軸角信號為粗精比36:1的雙通道信號,必須經旋轉變壓器-數字轉換器即RDC 轉換為數字信號才能被計算機讀取,故接口模塊共需使用三路(縱橫搖姿態和航向)雙通道RDC 轉換器。該接口模塊安裝于人機接口計算機的CPCI總線上,故模塊必須配置PCI 橋接芯片。另外總線接口的時序控制和雙通道羅經數據的合成工作還需要配置一片大規模的CPLD芯片。
本模塊硬件組成如圖所示。

本模塊的CPCI 總線接口芯片選用的是PLX 公司的PCI9054,該芯片是一種通用總線接口芯片,功能強大配置靈活,使用該芯片橋接CPCI 總線和本地總線,開發者可專注于開發硬件和驅動而不必考慮復雜的CPCI 總線規范。依據該芯片手冊推薦,選擇Microchip 公司型號為93AA56B的EEPROM 作為外部配置芯片,用于在系統上電時為PCI9054加載用戶配置數據。
PCI9054共有M、C、J 三種工作模式。其中M模式是摩托羅拉的MCU的專用工作模式;J模式仿照CPI 總線時序將地址和數據總線復用,控制較復雜。C模式是一種類似單片機的工作方式,芯片通過片內邏輯將地址線和數據線分開,本地時鐘與總線時鐘異步工作,為本地工作時序提供了多種工作方式,使用較為廣泛,故本設計將PCI9054配置成C模式,這一設置需通過芯片引腳硬連線來實現。本地時鐘使用32MHz的外部晶體振蕩器,直接通過印制板地層分割同時連接到CPLD的全局時鐘引腳和PCI9054的本地時鐘輸入引腳。
根據信號規模,CPLD 建議選擇Altera 公司EPM2210系列。PCI9054符合3.3V的CPCI 標準,可直接將其本地端的所有信號全部連接到CPLD 上,不用進行電平轉換。三路RDC 輸出的數字信號每路均為14Bit,外加每路2個控制信號,將它們全部連接到CPLD 以充分發揮CPLD 內部并行運算的優勢,可將縱搖、橫搖和航向三路信號同時進行轉換以提高效率。
模塊布線設計時,應保證PCI9054的位置靠近CPCI 總線插座。應特別注意的是,根據CPCI 總線規范要求,PCI9054的CPCI總線端各個信號走線長度不能相差過大,且CPCI 總線時鐘信號的走線長度必須限制在2400mil-2600mil 之間,可以使用蛇行線來控制長度。
本模塊軟件部分的主要設計工作包含三方面的內容,分別是CPLD的程序設計,PCI9054的EEPROM 配置數據設置,以及本模塊的CPCI 總線驅動程序設計。
CPLD 主要完成對PCI9054的本地總線時序進行譯碼和控制RDC 變換器數據的讀寫與合成。程序設計使用VerlogHDL 語言進行,開發環境為Altera的集成開發環境Quartus。
本模塊在CPCI 總線上作為被讀取的對象不主動發起總線讀寫周期,這一特性被稱為CPCI 總線的Target 操作。中心機每次從模塊讀取一個32Bit 數據的數據,頻率由中心機軟件使用定時中斷控制,且無大批量數據傳送的需求。依據9054數據手冊可知,這種操作特性對應的總線模式為PCI Single Target Read/Write,其時序關系如下圖所示。

由時序圖可知,CPLD 要進行的工作就是在CPCI 總線發起的讀寫操作后,對PCI9054產生的本地總線時序進行響應。其關鍵操作是當LHOLD(本地總線保持請求信號)變為有效后,要立即將LHODA(本地總線保持響應)拉高作為應答,然后再根據ADS#有效時的32Bit 本地地址和讀寫控制信號判斷讀寫的目標地址,并將對應寄存器的數據鎖存到32位本地數據總線上即可。
RDC 變換器控制信號需根據RDC的工作時序進行。根據數據手冊可知,RDC模塊通道轉換后,經過640ns 數據為有效,時序如圖所示。

為了在滿足時序限制的前提下盡可能提高RDC 變換器的轉換頻率,將本地32MHz時鐘進行分頻,產生A/B 通道選擇信號和輸出使能控制信號(OE/),使RDC 變換器交替輸出粗精通道的轉換結果。再分頻產生兩個周期約1.6us的鎖存信號,分別將兩個通道的數據鎖存到不同的寄存器中,再根據合成公式對這兩個寄存器中的數據進行計算,最后把計算結果鎖存到輸出寄存器當中。程序示意圖和仿真結果如圖所示:


CPLD 內部硬件資源豐富,設計時可根據合成公式,可以讓系統自己分配資源以達到最優配置,編寫程序時直接輸入計算公式即可。在CPCI 總線需要讀取轉換結果時,直接將已經準備好的數據放到本地總線上以供PCI9054使用,不需插入等待周期,以滿足CPCI 總線單周期讀寫的時序要求。如果等到CPCI 總線讀寫操作發起后再進行通道選擇和粗精合成等操作,就無法在一次PCI Target 單周期操作中將合成好的RDC 數據準備就緒。雙通道數據的合成運算由內部邏輯硬件完成速度較快,最后一級輸出寄存器的數據刷新率為微秒級別,而中心機對本模塊的讀取時間間隔為20毫秒,故可以滿足系統的使用要求,實現較簡單。注意在總線讀取時,應當禁止存儲計算結果的寄存器進行刷新。
對于本接口模塊中使用的粗精比為36:1,輸出數據為14位的RDC 轉換器來說,粗精合成公式為:
{(A*32+2000H-B)取整+B}
式中為A為粗通道值,B為精通道值;取整是指將低14位舍去,用精通道的14位值代替。合成結果位寬約20位,由計算機讀取后再根據需要換算成不同格式。
EEPROM 數據配置的目的是指定PCI9054的工作方式和總線地址映射關系。這是本模塊作為CPCI 設備能被中心機系統識別并正常工作的前提。模塊工作時,由中心機發起總線周期對本模塊上的資源進行讀寫,這種數據傳輸方式稱為PCI9054的Direct Slave 方式,在該模式工作的PCI9054的可以將3種本地地址空間進行映射,分別是:本地地址空間0,本地地址空間1和擴展ROM 空間。每種本地地址空間都可以被映射到中心機的內存空間或者IO 空間。映射時需指定本地地址范圍(Local Address Range),本地地址基地址(Local Bass Address),以及PCI 基地址(Pci Base Address),映射示意圖如圖

由于本模塊可以讀取的寄存器較少且沒有擴展存儲器,故只需使本地地址空間0映射到計算機的存儲器空間或者IO 空間即可滿足使用要求,本地地址空間范圍按照要求使用推薦的最小值4K 即可。映射到內存空間還是IO 空間則沒有本質區別,只是計算機在訪問這兩種地址空間時使用的指令不同而已,一般來說,系統可用的IO 空間范圍要遠小于內存空間,故建議將本地地址空間0映射到內存空間。
EEPROM 數據配置的主要內容就是設置PCI9054的工作方式和地址映射關系,此外還需填寫各種廠家和設備標識以及子系統號,應注意將不使用的功能關閉,如中斷、DMA 和不使用的本地地址空間等。具體的寄存器配置數據格式和內容必須仔細對照9054數據手冊進行,用二進制編輯器軟件寫好后,用燒寫器將數據寫入EEPROM中,然后才能進行后面的工作。
由于本模塊的中心機使用的是WindowsXP Embedded 操作系統,在應用程序中實現對羅經接口模塊的讀寫必須為其開發驅動程序。驅動程序開發是一項復雜的工程,通常WindowsXP Embedded 下的驅動開發有兩種途徑,一是使用微軟提供的DriverDevelopKit(DDK)進行開發,一是借助第三方工具開發。這兩種方式開發的驅動程序均為符合微軟WDM驅動模型框架要求的內核級驅動,具有較高的實時性能。但使用DDK 進行開發要求開發人員對操作系統有著比較深刻的認識,不適合一般工程技術人員。另一方案是使用第三方工具,目前應用較廣的DriverStudio(DS)是一款功能非常強大的第三方工具,他將DDK的功能封裝成類以方便用戶使用,使用方便。
使用DS的DriverWizard 工具,按照向導即可生成驅動程序框架,然后需根據功能需求添加用戶代碼,就可以生成所需要的驅動程序安裝文件了。
使用DriverWizard時首先應指定本模塊驅動類型為PCI 設備的WDM 功能驅動。后面的步驟需根據硬件的具體設計進行。本模塊在PCI9054配置時選擇的地址映射方式為將本地地址空間0映射到存儲器空間,所以在添加硬件資源的步驟中,必須為驅動添加一個memory 類型的硬件資源,并處理對這一資源的讀、寫請求(IRP),對應的I/O 方式均為直接(Direct)、不排隊的訪問方式,適用于快速傳送大批量數據。特別注意這里填寫的設備、廠家信息以及子系統號,必須與EEPROM 配置數據中所填寫的內容保持一致。
映射到內存的本地地址空間0作為一個硬件資源被包裝成一個類KMemoryRange,它封裝了對模塊的映射內存區域的操作。本模塊驅動只處理Read、Wrtie 兩種請求,接下來的工作就是為這些IRP 請求添加代碼,以完成驅動程序對模塊上CPLD 內部寄存器讀寫操作的具體代碼實現。
本文描述了一種基于CPCI 總線的羅經接口模塊的硬件和軟件設計方法。著重描述了用CPLD 實現雙通道數據合成和C模式下PCI9054局部總線接口的一種實現方式,介紹了CPCI 總線的地址映射和設備的驅動程序開發基本流程。這種方法適用于傳輸數據規模較小的場合,實用性強,開發周期短。如要實現中斷和DMA 等高級功能,則需要對CPCI 局部總線的時序做進一步設計,同時在驅動程序增加相應機制的實現代碼。
[1]PCI 9054 Data Book Version 1.0 PLX Technology 1998
[2]Windows2000/XP WDM 設備驅動程序開發(第2版)武安河編著.電子工業出版社,2005