李衛(wèi)兵 , 王洪國(guó) , 胡 波 , 史傳寶
(1.濱州學(xué)院 物理與電子科學(xué)系,山東 濱州 256600;2.濱州學(xué)院 飛行學(xué)院,山東 濱州 256600;3.濱州學(xué)院 航空信息技術(shù)研發(fā)中心,山東 濱州 256600)
計(jì)算機(jī)在當(dāng)今社會(huì)作為一個(gè)重要的工具使用已經(jīng)很普遍,但是人們也為其故障影響工作而煩惱,而計(jì)算機(jī)都是板卡設(shè)計(jì),非專業(yè)人員若是能借助計(jì)算機(jī)故障診斷系統(tǒng)診斷出故障所在,自己維修也是可行的。利用計(jì)算機(jī)的加電自檢[1](POST——Power-on self Test英文縮寫),在計(jì)算機(jī)啟動(dòng)的時(shí)候?qū)懭朐贐IOS芯片中的自檢程序就會(huì)自動(dòng)啟動(dòng)[2]。啟動(dòng)后它首先對(duì) CPU、內(nèi)存、顯卡、硬盤、光驅(qū)/軟驅(qū)等硬件部位進(jìn)行檢查,并分析對(duì)比系統(tǒng)的原始配置情況,以及對(duì)基本輸入/輸出(I/O)端口和對(duì)其它的外部設(shè)備進(jìn)行初始化,檢測(cè)出無(wú)異常,將引導(dǎo)并加載操作系統(tǒng),檢測(cè)出異常,將會(huì)使加電自檢程序掛起。若能根據(jù)計(jì)算機(jī)加電自檢原理,設(shè)計(jì)一故障診斷系統(tǒng),以文字的形式給出故障原因,則可以提高維修效率。目前,市場(chǎng)上有一些主板檢測(cè)卡,但經(jīng)常出現(xiàn)走碼、跳碼現(xiàn)象,使得一些錯(cuò)誤代碼不能準(zhǔn)確的檢測(cè)出來(lái)。本文給出一種基于FPGA和PCI總線的計(jì)算機(jī)故障智能診斷系統(tǒng)。以Altera公司的Cyclone II系列EP2C5T144C8N為信號(hào)處理模塊電路,以PCI總線接口電路作為與電腦主板的通信的接口。采用VHDL硬件描述語(yǔ)言在FPGA上設(shè)計(jì)硬件電路實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),分析,提取等一系列處理,以漢字的形式在液晶上顯示出電腦硬件故障,檢測(cè)速度快,系統(tǒng)性能可靠,準(zhǔn)確率高,顯示直觀。
設(shè)計(jì)中采用的是Altera公司的CyClone II(颶風(fēng))系列的低成本FPGA——EP2C5T144C8N,其觸發(fā)器模塊的最大延遲時(shí)間在800 ps以下,支持最高50 MHz的工作頻率,足夠滿足33M SPS采樣速率的PCI數(shù)據(jù)采集,而且該型號(hào)的FPGA還可嵌入51內(nèi)核,這一特性對(duì)于時(shí)序的設(shè)計(jì)是很方便的。
系統(tǒng)硬件電路包括地址、數(shù)據(jù)譯碼電路、時(shí)鐘電路、數(shù)據(jù)處理電路、數(shù)據(jù)鎖存電路、狀態(tài)機(jī)控制電路、單片機(jī)系統(tǒng)設(shè)計(jì)等,總體結(jié)構(gòu)框圖如圖1所示。
圖1 總體結(jié)構(gòu)框圖Fig.1 Overall structure diagram
根據(jù)PCI總線協(xié)議,PCI總線上所有的數(shù)據(jù)基本上是FRMAE#,IRDY#,TRDY#3條信號(hào)線控制的[3-4]。 本設(shè)計(jì)中用到的主要是寫操作,重點(diǎn)分析寫操作的時(shí)序關(guān)系。PCI基本寫操作時(shí)序如圖2所示,在FRAME#有效后的第一個(gè)時(shí)鐘周期內(nèi),AD上傳輸?shù)氖且獙懭肽繕?biāo)PCI設(shè)備的地址信息,C/BE#上傳輸?shù)氖敲铑愋停↖/O寫命令為0011),DEVSEL#信號(hào)有效后,表明目標(biāo)PCI設(shè)備已經(jīng)被選擇到,IRDY#和TRDY#同時(shí)有效后,主PCI設(shè)備向目標(biāo)PCI設(shè)備中傳輸要寫入的數(shù)據(jù),在第5個(gè)時(shí)鐘周期時(shí),IRDY#和TRDY#同時(shí)變?yōu)闊o(wú)效狀態(tài),AD總線上被插入一個(gè)等待周期,第6和第7個(gè)時(shí)鐘周期時(shí),IRDY#有效,但是TRDY#無(wú)效,傳輸仍然不能有效進(jìn)行,總線上被繼續(xù)插入兩個(gè)等待周期,第8個(gè)時(shí)鐘周期時(shí),IRDY#和TRDY#都有效,數(shù)據(jù)傳輸繼續(xù)。
地址數(shù)據(jù)譯碼器電路的FPGA設(shè)計(jì)如圖3所示,其工作為譯出80H的地址,在下一個(gè)時(shí)鐘上升沿時(shí)讀出數(shù)據(jù),并將其引出至數(shù)據(jù)處理電路的片選信號(hào)端進(jìn)行數(shù)據(jù)處理。由于PCI總線是地址數(shù)據(jù)復(fù)用的總線,為獲取80H端口的信息需要把地址數(shù)據(jù)分開(kāi)。本設(shè)計(jì)中用到的主要是寫操作,寫操作時(shí)序如下。
圖2 PCI寫操作時(shí)序圖Fig.2 Diagram of PCI write operation sequence
圖3 地址數(shù)據(jù)譯碼電路Fig.3 Address data decoding circuit
當(dāng)framej(j或#表示低電平有效)有效時(shí),總線傳輸開(kāi)始,在 data[7::0]上保持有效的地址信號(hào),同時(shí) comd[3 ::0]上保持一個(gè)總線命令。如果總線命令為0011b(存儲(chǔ)器寫命令),同時(shí)data[7::0]上的地址又在目標(biāo)設(shè)備的地址范圍內(nèi),該設(shè)備將置devselj信號(hào)有效,由于地址和數(shù)據(jù)都是由主設(shè)備提供,不存在data[7::0]切換驅(qū)動(dòng)問(wèn)題,所以第一個(gè)數(shù)據(jù)節(jié)拍產(chǎn)生于第二個(gè)時(shí)期周期。在這個(gè)數(shù)據(jù)內(nèi),comd[3::0]信號(hào)是字節(jié)允許,表示數(shù)據(jù)總線的data[7::0]字節(jié)有效。主設(shè)備在接下來(lái)的每個(gè)時(shí)鐘周期的上升沿檢查trdyj信號(hào),如果trdyj為高電平,表示從設(shè)備沒(méi)有準(zhǔn)備好,主設(shè)備自動(dòng)插入等待周期,反之,將傳送數(shù)據(jù),完成一個(gè)數(shù)據(jù)節(jié)拍。當(dāng)主設(shè)備是framej從有效變?yōu)闊o(wú)效,表示當(dāng)前是最后一個(gè)數(shù)據(jù)節(jié)拍。在寫周期里,只要framej有效,則下一個(gè)周期即可以接收數(shù)據(jù),利用這一點(diǎn),可以為檢碼帶來(lái)方便。
數(shù)據(jù)處理單元的功能是根據(jù)狀態(tài)的轉(zhuǎn)換對(duì)實(shí)時(shí)鎖存的信息進(jìn)行選擇,數(shù)據(jù)處理電路的設(shè)計(jì)主要的就是設(shè)計(jì)數(shù)據(jù)選擇器。由鎖存器將不同的檢測(cè)信息鎖存住,然后后續(xù)的數(shù)據(jù)進(jìn)行對(duì)比,通過(guò)這些選擇器,將沒(méi)用的數(shù)據(jù)代碼篩選掉,然后傳遞給51單片機(jī)處理,并將其顯示在液晶屏上。數(shù)據(jù)處理電路[5]如圖4所示。
圖4 數(shù)據(jù)處理電路Fig.4 Data processing circuit
鎖存電路如圖5,其中左邊的電路是對(duì)地址、數(shù)據(jù)電路檢測(cè)的POST原代碼鎖存,右邊所示的鎖存器是對(duì)處理過(guò)后的代碼信息的鎖存,其輸出直接連接單片機(jī),與單片機(jī)系統(tǒng)的始終匹配。
以上設(shè)計(jì)中使用的信號(hào):
clk:總線時(shí)鐘輸入。
cmd[3::0]:命令/字節(jié)使能,即總線中的 cbej。
framej:由總線主控驅(qū)動(dòng),指明傳輸?shù)钠鹗紩r(shí)間和終止時(shí)間。
resetj:重新啟動(dòng)(重新分配地址)信號(hào)。
根據(jù)以上的分析,整個(gè)系統(tǒng)有4個(gè)狀態(tài),用圓圈表示,如圖6所示,分別記為:
start:系統(tǒng)為開(kāi)始工作的狀態(tài);
idle:總線資源被CPU或其他設(shè)備占用的狀態(tài),此時(shí)的標(biāo)志是 framej=1;
圖5 鎖存電路Fig.5 Latch circuit
port right:系統(tǒng)剛檢測(cè)到計(jì)算機(jī)準(zhǔn)備往80H端口寫信息的狀態(tài);
data2buffer:所需要的數(shù)據(jù)已經(jīng)寫入緩沖區(qū)的狀態(tài)。
另外,還有一個(gè)執(zhí)行動(dòng)作,即把數(shù)據(jù)寫入緩沖區(qū)動(dòng)作,是在時(shí)鐘周期的間隙完成的。
圖6 狀態(tài)轉(zhuǎn)換圖Fig.6 State transition diagram
單片機(jī)控制電路采用AT89S52單片機(jī),由復(fù)位電路、時(shí)鐘電路、程序下載電路組成。SPI(Serial Peripheral Interface)總線系統(tǒng)是一種同步串行外設(shè)接口[6],它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。SPI總線系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,該接口一般使用4條線:串行時(shí)鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線SS。本系統(tǒng)利用單片機(jī)自帶的SPI總線下載程序,可實(shí)現(xiàn)在線編程。
實(shí)現(xiàn)數(shù)據(jù)的采集、轉(zhuǎn)換、存儲(chǔ)、處理和I/O等功能,它把從通過(guò)PCI總線獲得的計(jì)算機(jī)主板數(shù)據(jù)經(jīng)過(guò)接收、鎖存(分頻、選擇)、譯碼,最終送至51單片機(jī)。然后經(jīng)過(guò)51單片機(jī)處理后送至液晶顯示。其程序流程圖[2]如圖7所示。
本設(shè)計(jì)給出一種基于FPGA和PCI總線的計(jì)算機(jī)故障智能診斷系統(tǒng)。該系統(tǒng)以Altera公司的Cyclone II系列EP2C5T144C8N控制核心為,以PCI總線接口電路作為與電腦主板的通信的接口。根據(jù)計(jì)算機(jī)自身的加電自檢原理,采用VHDL硬件描述語(yǔ)言在FPGA上設(shè)計(jì)硬件電路實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),分析,提取等一系列處理,以漢字的形式在液晶上顯示出電腦硬件故障。為了提高系統(tǒng)的可靠性和準(zhǔn)確度,實(shí)行模塊化電路設(shè)計(jì),單元電路包括:地址譯碼單元、數(shù)據(jù)譯碼單元、數(shù)據(jù)處理單元、狀態(tài)及控制單元、電源診斷電路單元、液晶顯示單元,系統(tǒng)性能可靠,準(zhǔn)確率高,顯示直觀。
圖7 程序流程圖Fig.7 Program flow chart
[1]劉福勝.計(jì)算機(jī)加電自檢與故障診斷卡的使用[J].電子世界,2003(11):15-16.
LIU Fu-sheng.Using of card in computers electricity selfinspection and fault diagnosis[J].The Electronic World,2003(11):15-16.
[2]李曉莉,甘明.基于PCI總線的主板診斷卡設(shè)計(jì)[J].電子技術(shù),2007(3):156-158.
LI Xiao-li,GAN Ming.Post card design based on PCI Bus[J].Electronic Technology,2007(3):156-158.
[3]趙敏.基于FPGA實(shí)現(xiàn)的PCI數(shù)據(jù)采集卡的研究[D].太原:華北工學(xué)院,2002.
[4]潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].3版.北京:清華大學(xué)出版社,2009.
[5]李衛(wèi)兵,王洪國(guó).一種基于FPGA的計(jì)算機(jī)硬件診斷裝置:中國(guó),ZL 201120450587.8[P],2012.
[6]何志宏,丁楚平,吳俊.基于PicoBlaze的SPI核設(shè)計(jì)與實(shí)現(xiàn)[J].微處理機(jī),2010(2):86-89.
HE Zhi-hong,DING Chu-ping,WU Jun.The SPll pcore design and realization based on PicoBlaze[J].Microprocessors,2010(2):86-89.