【摘要】自檢是指通過(guò)設(shè)備和系統(tǒng)內(nèi)部的程序?qū)χ饕糠诌M(jìn)行自動(dòng)測(cè)試,并定位故障。自檢功能可以減少故障檢測(cè)的時(shí)間,提高檢測(cè)的效率,是提高系統(tǒng)可靠度的必要手段。本文根據(jù)FPGA核心系統(tǒng)的結(jié)構(gòu)特點(diǎn),設(shè)計(jì)了FPGA核心系統(tǒng)的自檢方案。
【關(guān)鍵詞】FPGA;核心系統(tǒng);自檢
1.引言
FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專(zhuān)用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。隨著集成電路技術(shù)的不斷發(fā)展,F(xiàn)PGA已經(jīng)廣泛運(yùn)用在航空,醫(yī)療,自動(dòng)化控制等各個(gè)領(lǐng)域,F(xiàn)PGA核心系統(tǒng)的可靠穩(wěn)定是整個(gè)系統(tǒng)能夠正常運(yùn)行的基礎(chǔ)。FPGA核心系統(tǒng)主要由兩部分組成,即FPGA主機(jī)電路和外擴(kuò)存儲(chǔ)電路。FPGA主機(jī)電路由FPGA,電源,晶振構(gòu)成,外擴(kuò)存儲(chǔ)電路采用同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Synchronous Dynamic Random Access Memory,SDRAM)。自檢是指通過(guò)設(shè)備和系統(tǒng)內(nèi)部的程序?qū)χ饕糠诌M(jìn)行自動(dòng)測(cè)試,并定位故障。自檢功能可以減少故障檢測(cè)的時(shí)間,提高檢測(cè)的效率,是提高系統(tǒng)可靠度的必要手段。FPGA核心系統(tǒng)的自檢不僅可以提高系統(tǒng)的可靠性,還能及時(shí)發(fā)現(xiàn)故障,便于系統(tǒng)的維護(hù)。本文以ALTERA公司的Cyclone III系列的一款FPGA為例,設(shè)計(jì)了FPGA核心系統(tǒng)的自檢方案。
2.自檢結(jié)構(gòu)
自檢結(jié)構(gòu)一般包括三個(gè)功能模塊:自檢控制器模塊、激勵(lì)信號(hào)模塊和結(jié)果分析模塊。如圖1所示,激勵(lì)信號(hào)模塊在自檢控制器控制下將激勵(lì)信號(hào)加載到被測(cè)單元上,通過(guò)結(jié)果分析模塊將被測(cè)單元的輸出響應(yīng)與正確響應(yīng)特征比較,得到該系統(tǒng)單元的測(cè)試結(jié)果。自檢控制器根據(jù)系統(tǒng)的控制信號(hào)來(lái)控制自檢過(guò)程的運(yùn)行和中斷,激勵(lì)信號(hào)模塊根據(jù)自檢控制器的命令進(jìn)行原始信號(hào)和自檢激勵(lì)信號(hào)的切換。
圖1 自檢系統(tǒng)結(jié)構(gòu)框圖
3.FPGA主機(jī)電路自檢設(shè)計(jì)
FPGA主機(jī)電路自檢的主要任務(wù)是檢測(cè)時(shí)鐘,鎖相環(huán)以及FIFO等內(nèi)核模塊能否正常工作,即檢測(cè)控制電路中的時(shí)鐘電路和電源電路是否工作正常。FPGA不同于單片機(jī)等微處理器需要對(duì)其指令系統(tǒng)進(jìn)行檢測(cè),但由于其可重構(gòu)的特點(diǎn),可以在FPGA內(nèi)部設(shè)計(jì)檢測(cè)電路對(duì)常用的內(nèi)核模塊進(jìn)行檢測(cè)。圖2所示中的模塊通過(guò)簡(jiǎn)單的LED燈的亮暗來(lái)判斷控制電路是否能正常工作,模塊利用鎖相環(huán)PLL和FIFO模塊來(lái)檢測(cè)控制電路能否正常工作。
圖2 控制電路自檢模塊
利用FPGA鎖相環(huán)輸出100MHz時(shí)鐘對(duì)20MHz外部時(shí)鐘進(jìn)行檢測(cè),對(duì)20MHz時(shí)鐘的周期進(jìn)行計(jì)數(shù),并將計(jì)數(shù)值寫(xiě)入FIFO中,同時(shí)將計(jì)數(shù)值從FIFO中讀出在模100M的累加器中,當(dāng)累加器溢出時(shí),改變LED的狀態(tài)。假設(shè)FPGA可以正常工作,且LED正常。經(jīng)過(guò)一個(gè)20MHz時(shí)鐘的周期,累加器中的值增加10,累加器溢出需要0.5s,LED燈1s閃爍一次。仿真時(shí)序見(jiàn)圖3所示。
clk_100m:鎖相環(huán)輸出100MHz時(shí)鐘;clk:外部時(shí)鐘電路提供20MHz時(shí)鐘;cnt:對(duì)20MHz時(shí)鐘檢測(cè)的計(jì)數(shù)值;restult:FIFO中讀出的計(jì)數(shù)值;counter:累加器的累加值。
當(dāng)模擬鎖相環(huán)模塊故障時(shí),鎖相倍頻模塊將輸出不穩(wěn)定的低頻信號(hào),即clk_100m信號(hào)無(wú)法正確檢測(cè)20MHz信號(hào)的周期。當(dāng)FIFO緩沖模塊故障時(shí),累加器將無(wú)法得到正確的累加值。這些主機(jī)電路的故障都將導(dǎo)致LED燈的閃爍不正常。
圖4 SDRAM自檢流程
4.數(shù)據(jù)存儲(chǔ)器自檢設(shè)計(jì)
FPGA核心系統(tǒng)的外擴(kuò)存儲(chǔ)電路電路采用2片16位同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Synchronous Dynamic Random Access Memory,SDRAM)組成4M×32bits的存儲(chǔ)模塊。該存儲(chǔ)模塊具有讀寫(xiě)速度快,容量大,信號(hào)多,控制復(fù)雜等特點(diǎn)。數(shù)據(jù)在SDRAM中采用矩陣的方式存儲(chǔ),地址譯碼通過(guò)行列地址選通,根據(jù)地址信號(hào)來(lái)選取要操作的某幾個(gè)(或某行)數(shù)據(jù),以便讀寫(xiě)控制電路對(duì)這些相應(yīng)的單元進(jìn)行讀寫(xiě)操作。不同于SRAM這種靜態(tài)存儲(chǔ)器,SDRAM不僅提供的同步時(shí)鐘信號(hào)以進(jìn)行高速的讀寫(xiě),由于其動(dòng)態(tài)存儲(chǔ)方式,還需要不斷的進(jìn)行自刷新來(lái)保證數(shù)據(jù)不丟失。
FPGA在保存或讀取數(shù)據(jù)時(shí),需要對(duì)連續(xù)的內(nèi)存地址進(jìn)行操作,采用突發(fā)長(zhǎng)度為256的讀寫(xiě)方式,即連續(xù)讀/寫(xiě)256個(gè)存儲(chǔ)單元,進(jìn)行一次行列地址選通?;谶@種數(shù)據(jù)傳輸方式,SDRAM自檢時(shí),在進(jìn)行地址線(xiàn)掃描檢測(cè)的同時(shí),通過(guò)改變寫(xiě)入數(shù)據(jù)的方式對(duì)數(shù)據(jù)線(xiàn)故障進(jìn)行檢測(cè),流程圖如圖4所示。
本設(shè)計(jì)中采用12位寄存器add_flag[11:0]的各個(gè)二進(jìn)制位對(duì)應(yīng)地址線(xiàn)A0~A11,16位寄存器data_flag[15:0]的各個(gè)二進(jìn)制位對(duì)應(yīng)數(shù)據(jù)線(xiàn)DB0~DB15,在選取測(cè)試數(shù)據(jù)時(shí),同樣按照地址線(xiàn)掃描法的思想對(duì)數(shù)據(jù)線(xiàn)進(jìn)行掃描,當(dāng)Ai=0時(shí),突發(fā)寫(xiě)入時(shí)依次循環(huán)寫(xiě)入0001H,0002H…8000H,當(dāng)Ai=1時(shí)依次寫(xiě)入FFFEH,F(xiàn)FFDH~8FFFH。采取這樣的數(shù)據(jù)的好處是當(dāng)某個(gè)數(shù)據(jù)線(xiàn)發(fā)生短路或斷路時(shí),能明顯的檢測(cè)出來(lái)。然后讀取所存入的測(cè)試數(shù)據(jù),判斷數(shù)據(jù)線(xiàn)是否存在故障。以圖5為例,SDRAM_ADD為當(dāng)前選通的行地址,SDRAM_DB為輸入的數(shù)據(jù),SDRAM_DATA為從SDRAM中讀取的數(shù)據(jù),data_flag為數(shù)據(jù)線(xiàn)故障標(biāo)志。將SDRAM_DB和SDRAM_DATA進(jìn)行比較,可見(jiàn)當(dāng)SDRAM_DB=0008H時(shí),SDRAM_DATA=0000H,可見(jiàn)數(shù)據(jù)線(xiàn)DB4發(fā)生了故障,DB4在data_flag中的對(duì)應(yīng)位置1,即data_flag=0008H。
圖6所示中,address為當(dāng)前檢測(cè)的地址線(xiàn),add_flag為地址線(xiàn)故障標(biāo)志,data1為A8=1時(shí)讀出的數(shù)據(jù),data0為A8=0時(shí)讀出的數(shù)據(jù),由于讀出的數(shù)據(jù)data1和data0相同時(shí)(均為fffdH),該地址線(xiàn)故障,對(duì)應(yīng)表示為置1,即add_flag=008H。
用寄存器sdram_err來(lái)表示數(shù)據(jù)存儲(chǔ)電路模塊是否存在故障,若存在故障則置1,若能正常使用則為0。采用這種方法的優(yōu)點(diǎn)是:(1)對(duì)地址線(xiàn)進(jìn)行了逐根掃描,可以覆蓋由地址連線(xiàn)帶來(lái)的故障。(2)由于相鄰兩個(gè)單元的內(nèi)容不同,檢測(cè)了SDRAM的突發(fā)讀/寫(xiě)的操作方式。(3)覆蓋了數(shù)據(jù)線(xiàn)之間的故障和數(shù)據(jù)線(xiàn)的連線(xiàn)故障。
5.結(jié)束語(yǔ)
本文設(shè)計(jì)FPGA核心系統(tǒng)可以實(shí)時(shí)檢測(cè)FPGA主機(jī)電路的鎖相環(huán)模塊,F(xiàn)IFO緩存模塊,IO接口等基本功能,保證FPGA能夠正常運(yùn)行,并且可以及時(shí)發(fā)現(xiàn)故障,方便故障的檢測(cè)和維修。外擴(kuò)存儲(chǔ)器電路的自檢功能可以快速檢測(cè)存儲(chǔ)器數(shù)據(jù)線(xiàn)和地址線(xiàn)的故障。FPGA核心系統(tǒng)的正常運(yùn)行是整個(gè)系統(tǒng)實(shí)現(xiàn)功能,可靠運(yùn)行的基礎(chǔ),因此FPGA核心系統(tǒng)的自檢具有很重要的實(shí)際意義。
作者簡(jiǎn)介:盛銳(1982—),男,江蘇常州人,大學(xué)本科,現(xiàn)供職于天地(常州)自動(dòng)化股份有限公司,主要從事工礦安全監(jiān)控等成套系統(tǒng)的建設(shè)工作。