王傳申,董高森
(江蘇自動(dòng)化研究所,連云港 222061)
王傳申(高級(jí)工程師),主要從事嵌入式系統(tǒng)設(shè)計(jì)。
工業(yè)用CPCI總線板卡測(cè)試環(huán)境一般配備計(jì)算機(jī)主模塊,以實(shí)現(xiàn)總線讀寫控制。已有的測(cè)試環(huán)境中,選擇外購(gòu)的PC/104-PLUS系列計(jì)算機(jī)作為主模塊,它具有體積小、功能全、適合工業(yè)應(yīng)用場(chǎng)合等優(yōu)點(diǎn),但作為測(cè)試環(huán)境組成部分也存在以下不足:
① 價(jià)格高。一塊PC/104-PLUS系列計(jì)算機(jī)模塊價(jià)格在3000~4000元。
② 狀態(tài)不確定。作為商用產(chǎn)品,該計(jì)算機(jī)模塊升級(jí)更新較快,這可能給使用方帶來(lái)停產(chǎn)、狀態(tài)變化等問(wèn)題。
③無(wú)法進(jìn)行特殊處理。由于模塊不屬于自主研發(fā),無(wú)相關(guān)的技術(shù)圖紙,故無(wú)法進(jìn)行三防等特殊處理,使得測(cè)試環(huán)境的應(yīng)用范圍受限。
鑒于測(cè)試應(yīng)用下對(duì)計(jì)算機(jī)主模塊的資源要求不高,設(shè)計(jì)以嵌入式處理器為核心的主控模塊,替代外購(gòu)的PC/104-PLUS系列計(jì)算機(jī)模塊,實(shí)現(xiàn)對(duì)被測(cè)板卡的PCI總線讀寫控制,完成測(cè)試任務(wù)。主控模塊硬件組成如圖1所示。
其工作原理是:嵌入式處理器接收計(jì)算機(jī)的測(cè)試命令并控制PCI接口芯片實(shí)現(xiàn)對(duì)被測(cè)板卡的讀寫控制及初始化操作。其中,由于嵌入式處理器外部存儲(chǔ)器總線與PCI局部總線接口不兼容,因此設(shè)計(jì)時(shí)序轉(zhuǎn)換模塊,通過(guò)該模塊完成兩種總線之間的信號(hào)轉(zhuǎn)換。目前,已有研制單位在工業(yè)控制系統(tǒng)的升級(jí)改造中使用51系列單片機(jī)控制PCI接口芯片實(shí)現(xiàn)ISA總線控制系統(tǒng)向PCI總線的升級(jí)[1]。但是,作為板卡測(cè)試環(huán)境主控模塊核心,51系列單片機(jī)在內(nèi)部資源及接口種類上略顯不足,同時(shí)考慮到以后功能擴(kuò)展的可能性,項(xiàng)目中選用ARM系列微處理器為核心開發(fā)主控模塊,并基于該處理器設(shè)計(jì)時(shí)序轉(zhuǎn)換模塊。
主控模塊的嵌入式處理器選擇NXP公司的LPC2478,該芯片具有以下主要特點(diǎn)[2]:
① 具有網(wǎng)口、USB接口、串口等多種接口方式,方便與系統(tǒng)計(jì)算機(jī)連接;
② 具有外部存儲(chǔ)器訪問(wèn)接口(包括24位地址線、32位數(shù)據(jù)線及讀、寫等控制信號(hào)),利用該接口可實(shí)現(xiàn)對(duì)PCI接口芯片的控制;
③ 工作頻率可達(dá)72MHz。
PCI接口芯片選擇PLX公司的PCI9054。PCI9054是常用的PCI總線接口芯片,局部總線工作頻率可達(dá)50 MHz、PCI總線工作頻率為33MHz。該芯片在PCI接口端支持主、從兩種工作模式,在局部總線端支持M、J、C三種工作模式。主控模塊設(shè)計(jì)中選擇PCI主模式+局部總線C模式的組合工作方式。
在進(jìn)行PCI總線板卡測(cè)試過(guò)程中,嵌入式處理器需要通過(guò)PCI局部總線控制PCI接口芯片完成以下操作:主控模塊PCI配置寄存器寫;被測(cè)板卡PCI配置寄存器讀、寫;被測(cè)板卡I/O(存儲(chǔ)器)讀、寫。
對(duì)于嵌入式處理器,以上操作按讀、寫兩種狀態(tài)分類,分別對(duì)應(yīng)LPC2478的外部存儲(chǔ)器讀(External Memory Read Access)、外部存儲(chǔ)器寫(external Memory Write Access)兩種時(shí)序過(guò)程[2]。
時(shí)序轉(zhuǎn)換模塊在硬件上是一片可編程芯片,設(shè)計(jì)時(shí)通過(guò)使用硬件描述語(yǔ)言及相關(guān)開發(fā)環(huán)境進(jìn)行內(nèi)部邏輯設(shè)計(jì)。邏輯設(shè)計(jì)采用模塊化方法,各模塊的設(shè)計(jì)如下各節(jié)所述。
時(shí)序轉(zhuǎn)換模塊的總體設(shè)計(jì)思路是:針對(duì)不同的本地總線時(shí)序,分別設(shè)計(jì)子模塊產(chǎn)生相應(yīng)讀寫狀態(tài)下的輸出時(shí)序。子模塊初始處于“空閑”態(tài),由上一級(jí)控制模塊啟動(dòng),同一時(shí)刻只有一個(gè)子模塊處于工作狀態(tài),轉(zhuǎn)換完成,子模塊再次進(jìn)入“空閑”態(tài),并等待下一次啟動(dòng)信號(hào)的到來(lái)。
由PCI9054數(shù)據(jù)手冊(cè)可以發(fā)現(xiàn),PCI9054五種局部總線時(shí)序過(guò)程中“PCI發(fā)起配置讀”與“PCI發(fā)起單次讀”在時(shí)序上完全一致,可以采用同一個(gè)子模塊實(shí)現(xiàn)轉(zhuǎn)換;同樣道理,“PCI發(fā)起配置寫”與“PCI發(fā)起單次寫”也可以采用同一個(gè)子模塊。時(shí)序轉(zhuǎn)換模塊的內(nèi)部邏輯如圖2所示。
圖2 時(shí)序轉(zhuǎn)換模塊內(nèi)部邏輯框圖
2.2.1 時(shí)序模塊設(shè)計(jì)
時(shí)序模塊(包括時(shí)序模塊一、時(shí)序模塊二、時(shí)序模塊三)接收來(lái)自控制模塊的啟動(dòng)信號(hào)、地址信號(hào)及外部數(shù)據(jù)信號(hào),通過(guò)內(nèi)部邏輯綜合,產(chǎn)生符合PCI9054局部總線時(shí)序的完整的信號(hào)輸出。下面以圖2中時(shí)序模塊二為例,介紹具體設(shè)計(jì)(本文中的三個(gè)時(shí)序模塊均采用狀態(tài)機(jī)[4]實(shí)現(xiàn))。
分析PCI9054數(shù)據(jù)手冊(cè)中“PCI Initiator Single Write”時(shí)序圖,將整個(gè)時(shí)序過(guò)程劃分為3個(gè)狀態(tài):idle狀態(tài)(總線周期開始前或結(jié)束后)、Stag_addr狀態(tài)(ADS#信號(hào)下降沿,總線周期開始)、Stag_data狀態(tài)(ADS#信號(hào)上升沿,數(shù)據(jù)信號(hào)有效)。根據(jù)以上劃分,模塊的狀態(tài)機(jī)設(shè)計(jì)如圖3所示。
圖3 時(shí)序模塊二狀態(tài)轉(zhuǎn)移圖
根據(jù)狀態(tài)轉(zhuǎn)移圖,模塊二復(fù)位后處于idle狀態(tài),等待控制模塊的啟動(dòng)命令;當(dāng)start信號(hào)有效時(shí)進(jìn)入Stag_addr狀態(tài),繼而直接進(jìn)入Stag_data狀態(tài),然后等待PCI9054的準(zhǔn)備好命令;當(dāng)ready信號(hào)有效時(shí),模塊重新進(jìn)入idle狀態(tài),然后等待下一次啟動(dòng)到來(lái)。
各個(gè)狀態(tài)下產(chǎn)生的輸出如下:
◆Stag_addr狀態(tài)。ADS#有效、LBE[3:0]有效、LW/R有效、LA[31:2]有效。
◆Stag_data狀態(tài)。ADS#無(wú)效、BLAST#有效、LD[31:0]有效。
◆idle狀態(tài)。上述信號(hào)均無(wú)效。
2.2.2 控制模塊設(shè)計(jì)
控制模塊的主要功能是產(chǎn)生啟動(dòng)信號(hào)和進(jìn)行地址轉(zhuǎn)換??刂颇K接收來(lái)自嵌入式處理器的地址信號(hào)、片選信號(hào)及讀寫控制信號(hào),通過(guò)內(nèi)部邏輯綜合,產(chǎn)生時(shí)序模塊的啟動(dòng)信號(hào),同時(shí)將嵌入式處理器的24位地址信號(hào)轉(zhuǎn)換為30位地址信號(hào),以便供給時(shí)序模塊使用。
嵌入式處理器通過(guò)時(shí)序轉(zhuǎn)換模塊訪問(wèn)的PCI9054局部總線地址空間包括3類:PCI存儲(chǔ)器空間(PCI memory space)、PCI I/O空間(PCI I/O configuration space)及本地配置寄存器空間(local configuration space)。通過(guò)將LPC2478的外部存儲(chǔ)器可尋址空間[2]劃分成若干個(gè)區(qū)域及控制模塊的譯碼,實(shí)現(xiàn)外部存儲(chǔ)器空間與局部總線地址空間的一一對(duì)應(yīng)。
具體設(shè)計(jì)中對(duì)LPC2478外部可尋址空間的一個(gè)靜態(tài)存儲(chǔ)區(qū)進(jìn)行空間劃分,該存儲(chǔ)區(qū)容量為16MB(地址范圍為0x8000 0000~0x80FF FFFF),為PCI9054局部總線3類地址空間各分配1MB的容量,每類地址空間以LPC2478外部地址總線的最高兩位進(jìn)行區(qū)分,分配后的各空間地址范圍如表1所列。
啟動(dòng)信號(hào)的產(chǎn)生主要通過(guò)對(duì)嵌入式處理器總線信號(hào)的狀態(tài)判斷來(lái)實(shí)現(xiàn)。3個(gè)時(shí)序模塊中,1個(gè)實(shí)現(xiàn)局部總線讀操作,2個(gè)實(shí)現(xiàn)局部總線寫操作。對(duì)于第1個(gè)模塊,控制模塊通過(guò)對(duì)“讀”控制信號(hào)的狀態(tài)判斷來(lái)決定是否產(chǎn)生啟動(dòng)信號(hào);對(duì)于后2個(gè)模塊,控制模塊在對(duì)“寫控制信號(hào)狀態(tài)判斷的基礎(chǔ)上還要結(jié)合輸入地址范圍來(lái)決定產(chǎn)生時(shí)序模塊二或時(shí)序模塊三的啟動(dòng)信號(hào)??偩€信號(hào)與啟動(dòng)信號(hào)的對(duì)應(yīng)關(guān)系如表2所列。
表1 LPC2478外部存儲(chǔ)器空間分配
表2 總線信號(hào)與啟動(dòng)信號(hào)關(guān)系真值表
控制模塊的邏輯設(shè)計(jì)同樣采用狀態(tài)機(jī)實(shí)現(xiàn),分析LPC2478數(shù)據(jù)手冊(cè)中“外部存儲(chǔ)器讀/寫操作(External Memory Read Access/Write Access)”時(shí)序圖,將控制模塊的工作過(guò)程分為7個(gè)狀態(tài):idle狀態(tài)(總線周期開始前或結(jié)束后)、decision狀態(tài)(片選信號(hào)有效,總線周期開始)、memrd狀態(tài)(讀 Memory空間)、iord狀態(tài)(讀I/O空間)、memwr狀態(tài)(寫 Memory空間)、iowr狀態(tài)(寫I/O空間)、configwr狀態(tài)(寫Local Configuration寄存器)。根據(jù)以上劃分,模塊的狀態(tài)機(jī)設(shè)計(jì)如圖4所示。
圖4 控制模塊狀態(tài)轉(zhuǎn)移圖
根據(jù)狀態(tài)轉(zhuǎn)移圖,模塊二復(fù)位后處于idle狀態(tài),等待總線上的片選信號(hào);當(dāng)cs信號(hào)有效時(shí)進(jìn)入decision狀態(tài),然后根據(jù)oe(讀)、we(寫)、addin[23]及addin[22]等信號(hào)是否有效,選擇進(jìn)入下一級(jí)各狀態(tài);當(dāng)cs信號(hào)無(wú)效時(shí),模塊重新進(jìn)入idle狀態(tài),然后等待下一次總線周期到來(lái)。
圖5為主控模塊向被測(cè)板卡進(jìn)行PCI讀操作時(shí),時(shí)序轉(zhuǎn)換模塊輸出波形的仿真結(jié)果。圖中各信號(hào)的定義如下:ADDRIN/OE為嵌入式處理器的24位地址信號(hào)/寫信號(hào);LA_O為時(shí)序轉(zhuǎn)換模塊輸出的30位地址信號(hào);LD_I為轉(zhuǎn)換前的數(shù)據(jù)(PCI9054局部總線數(shù)據(jù));LD_O為轉(zhuǎn)換后的數(shù)據(jù)(嵌入式處理器讀取的數(shù)據(jù))。
圖5 PCI發(fā)起單次讀操作仿真結(jié)果
通過(guò)與PCI9054數(shù)據(jù)手冊(cè)時(shí)序圖比較,仿真結(jié)果符合要求?!癙CI Initiator Single Read”時(shí)序圖略——編者注。
圖6為主控模塊向被測(cè)板卡進(jìn)行PCI寫操作時(shí),時(shí)序轉(zhuǎn)換模塊輸出波形的仿真結(jié)果。圖中各信號(hào)的定義如下:ADDRIN、LD_I、WE為嵌入式處理器的24位地址信號(hào)、32位數(shù)據(jù)信號(hào)、寫信號(hào);LA_O、LD_O為時(shí)序轉(zhuǎn)換模塊輸出的30位地址信號(hào)、32位數(shù)據(jù)信號(hào)。
圖6 PCI發(fā)起單次寫操作仿真結(jié)果
通過(guò)與PCI9054數(shù)據(jù)手冊(cè)“PCI Initiator Single Write”時(shí)序圖比較,仿真結(jié)果符合要求。“PCI Initiator Single Write”時(shí)序圖略——編者注。
圖7為嵌入式處理器寫PCI9054配置寄存器時(shí),時(shí)序轉(zhuǎn)換模塊輸出波形的仿真結(jié)果。圖中各信號(hào)的定義如下:ADDRIN、WE為嵌入式處理器的24位地址信號(hào)、寫信號(hào);CCS為配置寄存器片選;LA_O、LD_O為時(shí)序轉(zhuǎn)換模塊輸出的30位地址信號(hào)、32位數(shù)據(jù)信號(hào)。
圖7 局部總線寫配置寄存器仿真結(jié)果
通過(guò)與PCI9054數(shù)據(jù)手冊(cè)“Local Bus Write to configuration Register”時(shí)序圖比較,仿真結(jié)果符合要求。“Local Bus Write to configuration Register”時(shí)序圖略——編者注。
時(shí)序轉(zhuǎn)換模塊實(shí)現(xiàn)了LPC2478嵌入式處理器通過(guò)局部總線控制PCI接口芯片的功能。通過(guò)該模塊的設(shè)計(jì),解決了該型嵌入式處理器與PCI接口芯片局部總線兼容的問(wèn)題,具有借鑒意義。實(shí)際應(yīng)用中,時(shí)序轉(zhuǎn)換模塊已作為嵌入式PCI總線單板計(jì)算機(jī)的組成部分,用于板卡測(cè)試,工作狀況穩(wěn)定。
編者注:本文為期刊縮略版,全文見(jiàn)本刊網(wǎng)站www.mesnet.com.cn。
[1]金顯峰,邱春玲,田地.嵌入式PCI總線主模式設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與制,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電路設(shè)計(jì)[M].北京:清華大學(xué)出版社,2006:247-248.