王傳申,董高森
(江蘇自動化研究所,連云港 222061)
王傳申(高級工程師),主要從事嵌入式系統設計。
工業用CPCI總線板卡測試環境一般配備計算機主模塊,以實現總線讀寫控制。已有的測試環境中,選擇外購的PC/104-PLUS系列計算機作為主模塊,它具有體積小、功能全、適合工業應用場合等優點,但作為測試環境組成部分也存在以下不足:
① 價格高。一塊PC/104-PLUS系列計算機模塊價格在3000~4000元。
② 狀態不確定。作為商用產品,該計算機模塊升級更新較快,這可能給使用方帶來停產、狀態變化等問題。
③無法進行特殊處理。由于模塊不屬于自主研發,無相關的技術圖紙,故無法進行三防等特殊處理,使得測試環境的應用范圍受限。
鑒于測試應用下對計算機主模塊的資源要求不高,設計以嵌入式處理器為核心的主控模塊,替代外購的PC/104-PLUS系列計算機模塊,實現對被測板卡的PCI總線讀寫控制,完成測試任務。主控模塊硬件組成如圖1所示。
其工作原理是:嵌入式處理器接收計算機的測試命令并控制PCI接口芯片實現對被測板卡的讀寫控制及初始化操作。其中,由于嵌入式處理器外部存儲器總線與PCI局部總線接口不兼容,因此設計時序轉換模塊,通過該模塊完成兩種總線之間的信號轉換。目前,已有研制單位在工業控制系統的升級改造中使用51系列單片機控制PCI接口芯片實現ISA總線控制系統向PCI總線的升級[1]。但是,作為板卡測試環境主控模塊核心,51系列單片機在內部資源及接口種類上略顯不足,同時考慮到以后功能擴展的可能性,項目中選用ARM系列微處理器為核心開發主控模塊,并基于該處理器設計時序轉換模塊。
主控模塊的嵌入式處理器選擇NXP公司的LPC2478,該芯片具有以下主要特點[2]:
① 具有網口、USB接口、串口等多種接口方式,方便與系統計算機連接;
② 具有外部存儲器訪問接口(包括24位地址線、32位數據線及讀、寫等控制信號),利用該接口可實現對PCI接口芯片的控制;
③ 工作頻率可達72MHz。
PCI接口芯片選擇PLX公司的PCI9054。PCI9054是常用的PCI總線接口芯片,局部總線工作頻率可達50 MHz、PCI總線工作頻率為33MHz。該芯片在PCI接口端支持主、從兩種工作模式,在局部總線端支持M、J、C三種工作模式。主控模塊設計中選擇PCI主模式+局部總線C模式的組合工作方式。
在進行PCI總線板卡測試過程中,嵌入式處理器需要通過PCI局部總線控制PCI接口芯片完成以下操作:主控模塊PCI配置寄存器寫;被測板卡PCI配置寄存器讀、寫;被測板卡I/O(存儲器)讀、寫。
對于嵌入式處理器,以上操作按讀、寫兩種狀態分類,分別對應LPC2478的外部存儲器讀(External Memory Read Access)、外部存儲器寫(external Memory Write Access)兩種時序過程[2]。
時序轉換模塊在硬件上是一片可編程芯片,設計時通過使用硬件描述語言及相關開發環境進行內部邏輯設計。邏輯設計采用模塊化方法,各模塊的設計如下各節所述。
時序轉換模塊的總體設計思路是:針對不同的本地總線時序,分別設計子模塊產生相應讀寫狀態下的輸出時序。子模塊初始處于“空閑”態,由上一級控制模塊啟動,同一時刻只有一個子模塊處于工作狀態,轉換完成,子模塊再次進入“空閑”態,并等待下一次啟動信號的到來。
由PCI9054數據手冊可以發現,PCI9054五種局部總線時序過程中“PCI發起配置讀”與“PCI發起單次讀”在時序上完全一致,可以采用同一個子模塊實現轉換;同樣道理,“PCI發起配置寫”與“PCI發起單次寫”也可以采用同一個子模塊。時序轉換模塊的內部邏輯如圖2所示。

圖2 時序轉換模塊內部邏輯框圖
2.2.1 時序模塊設計
時序模塊(包括時序模塊一、時序模塊二、時序模塊三)接收來自控制模塊的啟動信號、地址信號及外部數據信號,通過內部邏輯綜合,產生符合PCI9054局部總線時序的完整的信號輸出。下面以圖2中時序模塊二為例,介紹具體設計(本文中的三個時序模塊均采用狀態機[4]實現)。
分析PCI9054數據手冊中“PCI Initiator Single Write”時序圖,將整個時序過程劃分為3個狀態:idle狀態(總線周期開始前或結束后)、Stag_addr狀態(ADS#信號下降沿,總線周期開始)、Stag_data狀態(ADS#信號上升沿,數據信號有效)。根據以上劃分,模塊的狀態機設計如圖3所示。

圖3 時序模塊二狀態轉移圖
根據狀態轉移圖,模塊二復位后處于idle狀態,等待控制模塊的啟動命令;當start信號有效時進入Stag_addr狀態,繼而直接進入Stag_data狀態,然后等待PCI9054的準備好命令;當ready信號有效時,模塊重新進入idle狀態,然后等待下一次啟動到來。
各個狀態下產生的輸出如下:
◆Stag_addr狀態。ADS#有效、LBE[3:0]有效、LW/R有效、LA[31:2]有效。
◆Stag_data狀態。ADS#無效、BLAST#有效、LD[31:0]有效。
◆idle狀態。上述信號均無效。
2.2.2 控制模塊設計
控制模塊的主要功能是產生啟動信號和進行地址轉換。控制模塊接收來自嵌入式處理器的地址信號、片選信號及讀寫控制信號,通過內部邏輯綜合,產生時序模塊的啟動信號,同時將嵌入式處理器的24位地址信號轉換為30位地址信號,以便供給時序模塊使用。
嵌入式處理器通過時序轉換模塊訪問的PCI9054局部總線地址空間包括3類:PCI存儲器空間(PCI memory space)、PCI I/O空間(PCI I/O configuration space)及本地配置寄存器空間(local configuration space)。通過將LPC2478的外部存儲器可尋址空間[2]劃分成若干個區域及控制模塊的譯碼,實現外部存儲器空間與局部總線地址空間的一一對應。
具體設計中對LPC2478外部可尋址空間的一個靜態存儲區進行空間劃分,該存儲區容量為16MB(地址范圍為0x8000 0000~0x80FF FFFF),為PCI9054局部總線3類地址空間各分配1MB的容量,每類地址空間以LPC2478外部地址總線的最高兩位進行區分,分配后的各空間地址范圍如表1所列。
啟動信號的產生主要通過對嵌入式處理器總線信號的狀態判斷來實現。3個時序模塊中,1個實現局部總線讀操作,2個實現局部總線寫操作。對于第1個模塊,控制模塊通過對“讀”控制信號的狀態判斷來決定是否產生啟動信號;對于后2個模塊,控制模塊在對“寫控制信號狀態判斷的基礎上還要結合輸入地址范圍來決定產生時序模塊二或時序模塊三的啟動信號。總線信號與啟動信號的對應關系如表2所列。

表1 LPC2478外部存儲器空間分配

表2 總線信號與啟動信號關系真值表
控制模塊的邏輯設計同樣采用狀態機實現,分析LPC2478數據手冊中“外部存儲器讀/寫操作(External Memory Read Access/Write Access)”時序圖,將控制模塊的工作過程分為7個狀態:idle狀態(總線周期開始前或結束后)、decision狀態(片選信號有效,總線周期開始)、memrd狀態(讀 Memory空間)、iord狀態(讀I/O空間)、memwr狀態(寫 Memory空間)、iowr狀態(寫I/O空間)、configwr狀態(寫Local Configuration寄存器)。根據以上劃分,模塊的狀態機設計如圖4所示。

圖4 控制模塊狀態轉移圖
根據狀態轉移圖,模塊二復位后處于idle狀態,等待總線上的片選信號;當cs信號有效時進入decision狀態,然后根據oe(讀)、we(寫)、addin[23]及addin[22]等信號是否有效,選擇進入下一級各狀態;當cs信號無效時,模塊重新進入idle狀態,然后等待下一次總線周期到來。
圖5為主控模塊向被測板卡進行PCI讀操作時,時序轉換模塊輸出波形的仿真結果。圖中各信號的定義如下:ADDRIN/OE為嵌入式處理器的24位地址信號/寫信號;LA_O為時序轉換模塊輸出的30位地址信號;LD_I為轉換前的數據(PCI9054局部總線數據);LD_O為轉換后的數據(嵌入式處理器讀取的數據)。

圖5 PCI發起單次讀操作仿真結果
通過與PCI9054數據手冊時序圖比較,仿真結果符合要求。“PCI Initiator Single Read”時序圖略——編者注。
圖6為主控模塊向被測板卡進行PCI寫操作時,時序轉換模塊輸出波形的仿真結果。圖中各信號的定義如下:ADDRIN、LD_I、WE為嵌入式處理器的24位地址信號、32位數據信號、寫信號;LA_O、LD_O為時序轉換模塊輸出的30位地址信號、32位數據信號。

圖6 PCI發起單次寫操作仿真結果
通過與PCI9054數據手冊“PCI Initiator Single Write”時序圖比較,仿真結果符合要求。“PCI Initiator Single Write”時序圖略——編者注。
圖7為嵌入式處理器寫PCI9054配置寄存器時,時序轉換模塊輸出波形的仿真結果。圖中各信號的定義如下:ADDRIN、WE為嵌入式處理器的24位地址信號、寫信號;CCS為配置寄存器片選;LA_O、LD_O為時序轉換模塊輸出的30位地址信號、32位數據信號。

圖7 局部總線寫配置寄存器仿真結果
通過與PCI9054數據手冊“Local Bus Write to configuration Register”時序圖比較,仿真結果符合要求。“Local Bus Write to configuration Register”時序圖略——編者注。
時序轉換模塊實現了LPC2478嵌入式處理器通過局部總線控制PCI接口芯片的功能。通過該模塊的設計,解決了該型嵌入式處理器與PCI接口芯片局部總線兼容的問題,具有借鑒意義。實際應用中,時序轉換模塊已作為嵌入式PCI總線單板計算機的組成部分,用于板卡測試,工作狀況穩定。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
[1]金顯峰,邱春玲,田地.嵌入式PCI總線主模式設計[J].計算機測量與制,2005,13(8):821-823.
[2]NXP.LPC2478Preliminary data sheet Rev.01 [EB/OL].(2007-07)[2013-10].http://www.nxp.com/.1-3,60,28.
[3]PLX Technology,Inc.PCI9054Data Book V2.1 [EB/OL].(2000-01)[2013-10].http://www.plxtech.com/.
[4]雷伏容.VHDL電路設計[M].北京:清華大學出版社,2006:247-248.