劉 浩,段紅亮,張雪峰,張欣光,楊薇秀
(北京航天長征飛行器研究所,北京,100076)
SRAM 型FPGA 需要通過加載配置文件比特流至內(nèi)部存儲(chǔ)器完成初始化配置過程。所謂的初始化配置技術(shù),是一種FPGA 在上電后,外圍設(shè)備(比如配置芯片)開始加載全比特流文件對(duì)其內(nèi)部的全部邏輯資源進(jìn)行第1 次配置,以實(shí)現(xiàn)系統(tǒng)的初始功能[1]。
由于SRAM 型FPGA 的配置存儲(chǔ)器是易失型的,每次上電需要重新配置,因此必須外接存儲(chǔ)了配置文件的非遺失存儲(chǔ)器,通過配置接口完成配置文件比特流加載。較為常用的非遺失性配置文件存儲(chǔ)器為FLASH 型PROM(Programmable Read Only Memory),其采用了低功耗先進(jìn)的COMS NOR FLASH 工藝,可重復(fù)擦除或編程達(dá)20 000 次,支持IEEE 1149.1 和IEEE 1532 標(biāo)準(zhǔn)邊界掃描(JTAG)協(xié)議[2]。以Xilinx SRAM型FPGA 為例,其通常的使用過程為:a)設(shè)計(jì)好軟件工程,經(jīng)過綜合及布局布線等過程后生成比特型配置文件;b)根據(jù)配置存儲(chǔ)器類型轉(zhuǎn)化配置文件;c)通過JTAG 將配置文件燒寫至配置存儲(chǔ)器中;d)系統(tǒng)整機(jī)上電后FPGA 加載配置存儲(chǔ)器中的配置文件并開啟工作模式。
如果配置存儲(chǔ)器內(nèi)數(shù)據(jù)異常,則會(huì)導(dǎo)致FPGA 無法配置成功,軟件無法運(yùn)行,系統(tǒng)整機(jī)表現(xiàn)為失效狀態(tài),電流比正常狀態(tài)偏低。本文針對(duì)一起國產(chǎn)FLASH型PROM 數(shù)據(jù)失效導(dǎo)致FPGA 無法正常配置的案例,對(duì)問題機(jī)理進(jìn)行分析后,給出系統(tǒng)層防護(hù)措施。本系統(tǒng)選用Xilinx Virtex-4 FPGA 及國產(chǎn)某款配置PROM,此款PROM 可原位替代Xilinx XCFxxP 系列相應(yīng)產(chǎn)品。
在系統(tǒng)進(jìn)行60 ℃高溫老練試驗(yàn)的某一循環(huán)上電啟動(dòng)時(shí)出現(xiàn)系統(tǒng)整機(jī)失效現(xiàn)象,且系統(tǒng)上電后工作電流偏小,進(jìn)一步排查發(fā)現(xiàn)系統(tǒng)主處理器FPGA 軟件未正常加載成功,因此軟件未運(yùn)行。對(duì)系統(tǒng)重新斷電上電后,故障依舊,恢復(fù)常溫后故障仍然無法消除。即加電后系統(tǒng)再也無法正常啟動(dòng)。后在上電情況下通過JTAG 在線調(diào)試方式向FPGA 加載程序,系統(tǒng)恢復(fù)正常且所有功能運(yùn)行正確,因此排除FPGA 本身及外圍供電及其他電路異常情況。重新通過JTAG 接口向PROM燒寫配置文件后系統(tǒng)恢復(fù)正常,因此確定為PROM 出現(xiàn)異常情況導(dǎo)致上述問題。此PROM 為某型國產(chǎn)FLASH 型FPGA 芯片,其作為Xilinx Virtex-4 FPGA的配置芯片存儲(chǔ)FPGA 的配置文件。配置模式采用主并模式[3],配置電路見圖1 所示。
圖1 FPGA 配置電路Fig.1 FPGA Configuration Circuit
通過JTAG 接口讀取異常情況下FPGA 的狀態(tài)寄存器信息,讀取結(jié)果如圖2 所示。由圖2 可見“Value of DONE pin”已置低,F(xiàn)PGA 已做好讀取PROM 信息準(zhǔn)備,而“Internal signal indicates that chip is configured”等信息表明FPGA 未收到或接收到錯(cuò)誤的PROM 配置信息。通過示波器測試PROM 端CLK、/CE 及OE 端波形發(fā)現(xiàn)波形輸出均正常,進(jìn)一步排除FPGA 異??赡?。
圖2 FPGA 配置失敗時(shí)狀態(tài)寄存器信息Fig.2 Status Register Information When Configuration Fails
此款FLASH 型PROM 原理如圖3 所示,其中“JTAG 接口控制”電路及“存儲(chǔ)單元”為其核心部件。根據(jù)故障現(xiàn)象推斷該P(yáng)ROM“存儲(chǔ)單元”數(shù)據(jù)異常因有2 種可能:a)“存儲(chǔ)單元”數(shù)據(jù)保持能力失效;b)“JTAG 接口控制”電路異常擦寫“存儲(chǔ)單元”[4]。
圖3 PROM 原理Fig.3 PROM Schematic
“存儲(chǔ)單元”由FLASH 閃存存儲(chǔ)單元組成,單元內(nèi)的數(shù)據(jù)在一段時(shí)間內(nèi)被正確讀取的能力,也稱為FLASH 數(shù)據(jù)保持能力。其受到諸多因素影響,包括工藝制造、溫度和電壓、靜電環(huán)境、輻射暴露、累積擦除周期等。常見的致數(shù)據(jù)保持能力失效的具體模式包括:
a)工藝制造缺陷導(dǎo)致存在浮柵電子泄漏的存儲(chǔ)單元,通常被稱為單位電荷損傷單元,表現(xiàn)為低于典型的數(shù)據(jù)保持能力[5]。同時(shí)浮柵電子泄漏可以在電壓或高溫應(yīng)力的作用下被進(jìn)一歩加速。所有的芯片供應(yīng)商都有標(biāo)準(zhǔn)的過程來描述和識(shí)別有工藝缺陷的存儲(chǔ)單元。
b)使用環(huán)境造成的偽單位電荷損傷單元。這類單元在物理上是合格的存儲(chǔ)位,只是被輕微地編程,即“欠編程”,無法100%識(shí)別。通常是由于編程操作過程中出現(xiàn)了系統(tǒng)噪聲或瞬變電壓導(dǎo)致無法達(dá)到完全編程存儲(chǔ)單元所需的閾值電壓。在執(zhí)行讀操作時(shí),一個(gè)“欠編程”的位可以讀取為“0”或“1”。
在第1 種失效模式下,單位電荷損傷單元會(huì)導(dǎo)致PROM 中存儲(chǔ)的數(shù)據(jù)為不可逆的錯(cuò)誤配置文件,F(xiàn)PGA讀取此配置文件將始終無法正常啟動(dòng)。在第2 種失效模式下,偽單位電荷損傷單元導(dǎo)致PROM 中存儲(chǔ)的數(shù)據(jù)為可逆的配置文件,在不同測試工況下FPGA 應(yīng)有配置成功概率。兩種失效模式均與本系統(tǒng)故障模式不同。同時(shí),進(jìn)一步測試故障模式下D[0..7]數(shù)據(jù)端波形,并與正常模式下數(shù)據(jù)比對(duì)后發(fā)現(xiàn)故障產(chǎn)品PROM 數(shù)據(jù)內(nèi)容錯(cuò)誤。PROM 輸出異常數(shù)據(jù)D0 與CLK 波形如圖4 所示,正常數(shù)據(jù)D0 與CLK 波形見圖5 所示。如果存儲(chǔ)單元是一個(gè)被寫入過的,相當(dāng)于邏輯“0”,相反,如果這個(gè)存儲(chǔ)單元是被擦除過的,相當(dāng)于邏輯“1”[7]。經(jīng)過測試排故后認(rèn)為故障原因?yàn)镕PGA 配置用FLASH型PROM 內(nèi)部分?jǐn)?shù)據(jù)被異常由“1”改寫為“0”,且現(xiàn)象穩(wěn)定。同時(shí)可排除因“存儲(chǔ)單元”數(shù)據(jù)保持能力失效和被擦除導(dǎo)致故障。
圖4 PROM 異常數(shù)據(jù)輸出波形Fig.4 PROM Wrong Data Output Waveform
圖5 PROM 正常數(shù)據(jù)輸出波形Fig.5 PROM Correct Data Output Waveform
JTAG 接口控制電路主要包括:上電初始化電路、讀存儲(chǔ)單元電路及寫存儲(chǔ)單元電路3 部分。與PROM內(nèi)部分?jǐn)?shù)據(jù)被異常由“1”改寫為“0”有關(guān)的部分為前兩種電路。
寫存儲(chǔ)單元電路工作流程為:通過JTAG 接口將配置文件以數(shù)據(jù)位流依次按照地址順序和數(shù)據(jù)映射關(guān)系寫入到PROM 存儲(chǔ)單元組成的陣列空間。故障出現(xiàn)過程沒有此操作流程,可以排除,重點(diǎn)針對(duì)“上電初始化”電路異常進(jìn)行排查。
上電復(fù)位電路工作原理為:上電復(fù)位電壓閾值應(yīng)高于器件最低工作電壓。在上電過程中,電壓在抵達(dá)最低工作電壓和復(fù)位閾值電壓前保持器件復(fù)位狀態(tài),直至到達(dá)復(fù)位閾值電壓后復(fù)位解除,以此保證上電過程中器件初始狀態(tài)受控。如果上電復(fù)位閾值低于最低工作電壓,將導(dǎo)致器件復(fù)位解除后還未到達(dá)最低工作電壓,器件狀態(tài)不受控,存在錯(cuò)誤進(jìn)入“寫數(shù)據(jù)狀態(tài)機(jī)”或“擦數(shù)據(jù)狀態(tài)機(jī)”過程的可能。
狀態(tài)機(jī)被異常觸發(fā)后,可能不處于正常的復(fù)位或空閑的狀態(tài),出現(xiàn)錯(cuò)誤跳轉(zhuǎn),導(dǎo)致誤寫入等異常情況。“寫數(shù)據(jù)狀態(tài)機(jī)”單次進(jìn)入寫狀態(tài),根據(jù)JTAG 接口指令設(shè)計(jì)最多可向PROM編程并寫入32Byte數(shù)據(jù);“擦數(shù)據(jù)狀態(tài)機(jī)”單次進(jìn)入擦狀態(tài),根據(jù)JTAG 接口指令設(shè)計(jì)單次擦除256Byte 的整數(shù)倍數(shù)據(jù)。目前PROM 錯(cuò)誤數(shù)據(jù)表現(xiàn)為“1”變“0”,是錯(cuò)誤進(jìn)入“寫數(shù)據(jù)狀態(tài)機(jī)”現(xiàn)象。
此款FLASH 型PROM 為國內(nèi)某廠家參考Xilinx XCFxxP 系列同款產(chǎn)品設(shè)計(jì),上電復(fù)位電壓閾值設(shè)計(jì)值為2.0 V。上電復(fù)位電路在工藝制造上存在上電復(fù)位電壓閾值過低的可能。同時(shí),上電復(fù)位閾值電壓在工藝特性上隨溫度上升會(huì)進(jìn)一步下降,對(duì)于與故障產(chǎn)品同批次的一只庫存合格產(chǎn)品實(shí)測在不同溫度下上電復(fù)位電壓如表1 所示。
表1 不同溫度下上電復(fù)位閾值實(shí)測值Tab.1 Power-on Reset Threshold Measured Value
對(duì)于上電復(fù)位電壓閾值遠(yuǎn)低于設(shè)計(jì)值2.0 V 的個(gè)例,當(dāng)其隨溫度上升使得上電復(fù)位閾值低于寄存器鎖存數(shù)據(jù)的最低工作電壓1.5 V 時(shí),將使得初始化電路中PROM 控制狀態(tài)機(jī)在上電過程中存在一段時(shí)間的不確定狀態(tài)。PROM 控制狀態(tài)機(jī)以40 MHz OSC 時(shí)鐘作為工作時(shí)鐘,在RTL 代碼中為獨(dú)熱碼編碼,經(jīng)綜合工具綜合時(shí)自動(dòng)進(jìn)行狀態(tài)機(jī)重構(gòu)優(yōu)化后,在網(wǎng)表中被優(yōu)化為二進(jìn)制編碼,如圖6 所示。
圖6 PROM 控制狀態(tài)機(jī)Fig.6 PROM Control State Machin Diagram
由圖6 可知,PROM 控制狀態(tài)機(jī)在網(wǎng)表中使用三比特寄存器表示當(dāng)前狀態(tài)。當(dāng)處于上電復(fù)位時(shí),狀態(tài)機(jī)處于復(fù)位狀態(tài)011;當(dāng)上電復(fù)位結(jié)束時(shí),狀態(tài)機(jī)正常跳轉(zhuǎn)至初始化狀態(tài)000,開始進(jìn)行OSC 修調(diào)等初始化操作。當(dāng)初始化狀態(tài)執(zhí)行完成后,狀態(tài)機(jī)進(jìn)一步跳轉(zhuǎn)至空閑狀態(tài)001,等待響應(yīng)來自JTAG 接口的擦除或?qū)懖僮髦噶?,其中單次擦除時(shí)擦除區(qū)域大小為256 Byte扇區(qū)的倍數(shù);單次寫操作時(shí)編程區(qū)域大小可為1~32 Byte,與JTAG 指令定義保持一致。
此款國產(chǎn)PROM 芯片控制狀態(tài)機(jī)復(fù)位的來源包括上電復(fù)位(POR)、VCCO 掉電復(fù)位和VCCJ 掉電復(fù)位。這3 種復(fù)位均為模擬模塊,不需要時(shí)鐘即可工作,其作用是保證在施加電源后,模擬和數(shù)字模塊初始化至已知狀態(tài)[6]。由于系統(tǒng)復(fù)位源與PROM 狀態(tài)機(jī)的40 MHz 與OSC 時(shí)鐘為異步關(guān)系,芯片電路設(shè)計(jì)采用異步復(fù)位、同步撤銷設(shè)計(jì),對(duì)系統(tǒng)復(fù)位進(jìn)行同步處理后,接入PROM 狀態(tài)機(jī)異步復(fù)位端,如圖7 所示。
圖7 PROM 控制狀態(tài)機(jī)復(fù)位電路Fig.7 PROM Control State Machine Reset Circuit
在正常情況下,當(dāng)復(fù)位同步2 寄存器復(fù)位撤離后,狀態(tài)寄存器1 和狀態(tài)寄存器0 均由“1”跳轉(zhuǎn)至“0”。當(dāng)狀態(tài)寄存器1 和狀態(tài)寄存器0 工作在寄存器鎖存數(shù)據(jù)的最低工作電壓1.5 V 以下時(shí)可能跳轉(zhuǎn)至“0”,也可能保持在復(fù)位值“1”,其狀態(tài)不能穩(wěn)定輸出。當(dāng)狀態(tài)寄存器[1:0]跳轉(zhuǎn)至“00”時(shí),PROM 控制器仍為正常功能;當(dāng)狀態(tài)寄存器[1:0]跳轉(zhuǎn)至“01”時(shí),PROM 控制器跳過初始化進(jìn)入空閑狀態(tài);當(dāng)狀態(tài)寄存器[1:0]跳轉(zhuǎn)至“10”時(shí),PROM 控制器跳過初始化進(jìn)入寫操作狀態(tài),如圖8 虛線所示。而在斷電時(shí)VCCO 和VCCJ分別有掉電復(fù)位保護(hù),正??臻e狀態(tài)的狀態(tài)機(jī)不會(huì)誤翻轉(zhuǎn)到寫操作狀態(tài)。
圖8 PROM 控制狀態(tài)機(jī)異常跳轉(zhuǎn)圖Fig.8 PROM Control State Machine Error Diagram
電路中編程地址寄存器的復(fù)位值為全“0”,該寄存器值會(huì)送往PROM 芯片地址端,因此PROM 地址在復(fù)位后始終為全“0”開始。編程字節(jié)計(jì)數(shù)寄存器和編程數(shù)據(jù)寄存器作為外部輸入的緩沖寄存器采用不帶異步復(fù)位端口的寄存器,在系統(tǒng)復(fù)位期間它們不會(huì)被復(fù)位。寄存器是雙穩(wěn)態(tài)電路,未被復(fù)位的寄存器在上電后的狀態(tài)不能確定為高電平或低電平,因此可理解為隨機(jī)值。在正常JTAG 編程指令中,JTAG 會(huì)對(duì)編程地址、字節(jié)計(jì)數(shù)、數(shù)據(jù)寄存器進(jìn)行寫操作,因此編程字節(jié)計(jì)數(shù)和數(shù)據(jù)寄存器上電復(fù)位期間是隨機(jī)值不影響正常流程的操作。
PROM 狀態(tài)機(jī)單次寫操作狀態(tài)可寫入1~32 Byte數(shù)據(jù),當(dāng)編程字節(jié)計(jì)數(shù)寄存器為隨機(jī)值時(shí),PROM 單次編程狀態(tài)最多寫入32 Byte 數(shù)據(jù)。由于工作電壓異常,導(dǎo)致PROM 控制狀態(tài)機(jī)從復(fù)位狀態(tài)011 誤跳轉(zhuǎn)為編程狀態(tài)010 時(shí),PROM 控制狀態(tài)機(jī)會(huì)對(duì)PROM 的復(fù)位地址即0 地址發(fā)起1~32 Byte 隨機(jī)大小的隨機(jī)數(shù)據(jù)寫入,導(dǎo)致PROM 前32 Byte 數(shù)據(jù)被改寫。進(jìn)而導(dǎo)致后續(xù)FPGA 上電配置時(shí)發(fā)現(xiàn)比特流同步頭數(shù)據(jù)出錯(cuò),自動(dòng)停止配置,導(dǎo)致FPGA 配置失敗。
由于低于上電復(fù)位閾值時(shí)狀態(tài)機(jī)有過復(fù)位過程,因此在不受控的電源電壓范圍內(nèi)狀態(tài)機(jī)大概率是保持復(fù)位狀態(tài),從而正常翻轉(zhuǎn)到初始狀態(tài)。不受控的電源電壓范圍內(nèi)狀態(tài)機(jī)跳轉(zhuǎn)到寫操作狀態(tài)或空閑狀態(tài)的機(jī)會(huì)均等,其中空閑狀態(tài)也不會(huì)改寫數(shù)據(jù),因此狀態(tài)機(jī)異常改寫數(shù)據(jù)的概率極低,但有發(fā)生的可能性。
在使用軟件燒寫工具(如Xilinx iMACT)時(shí)勾選寫保護(hù)功能,可防止數(shù)據(jù)改寫。進(jìn)口及國產(chǎn)FLASH 型PROM 都帶有寫保護(hù)功能,當(dāng)狀態(tài)機(jī)進(jìn)入編程010 狀態(tài)后,首先會(huì)讀取保存在FLASH PROM NVR 區(qū)的寫保護(hù)位,并將此位的數(shù)據(jù)與待編程數(shù)據(jù)進(jìn)行“或”操作后送往PROM。由于PROM 編程只能寫“0”,當(dāng)數(shù)據(jù)均被寫保護(hù)電路箝位為“1”時(shí),編程動(dòng)作不會(huì)改寫FLASH PROM 內(nèi)部數(shù)據(jù)。此時(shí)即便發(fā)生上電狀態(tài)機(jī)誤跳轉(zhuǎn),也不會(huì)產(chǎn)生PROM 數(shù)據(jù)被改寫致使配置數(shù)據(jù)失效,可規(guī)避初始化異常對(duì)存儲(chǔ)體配置數(shù)據(jù)的改寫。
在開啟寫保護(hù)后在仿真時(shí)進(jìn)行錯(cuò)誤注入,可以看到當(dāng)PROM 狀態(tài)機(jī)從復(fù)位狀態(tài)錯(cuò)誤地跳轉(zhuǎn)至編程狀態(tài)時(shí),PROM 的DIN 被箝位至高電平,未出現(xiàn)數(shù)據(jù)誤改寫故障,如圖9 所示。同時(shí),為驗(yàn)證措施有效性,對(duì)故障產(chǎn)品進(jìn)行故障復(fù)現(xiàn)及措施有效性試驗(yàn)驗(yàn)證情況。對(duì)同一臺(tái)故障產(chǎn)品進(jìn)行60 ℃,48 h 高溫老練試驗(yàn)補(bǔ)充試驗(yàn),分別開展更改措施實(shí)施前后的試驗(yàn)比對(duì)驗(yàn)證,每次驗(yàn)證24 h,驗(yàn)證過程中使用自動(dòng)設(shè)備每間隔5 min為整機(jī)上、斷電,并檢測FPGA 配置成功與否,如配置失敗,則重新通過人工燒寫PROM 配置程序后繼續(xù)試驗(yàn)。試驗(yàn)驗(yàn)證結(jié)果為:未加措施前,24 h 內(nèi)故障復(fù)現(xiàn)4 次。增加措施后24 h 內(nèi)故障未出現(xiàn),高溫老練試驗(yàn)通過,可以證明該措施有效。
圖9 寫保護(hù)仿真圖Fig.9 Write Protection Simulation
在采購芯片時(shí)要求芯片供應(yīng)商增加系統(tǒng)板級(jí)上電復(fù)位閾值測試篩選,并提供篩選測試報(bào)告。經(jīng)過對(duì)此款芯片設(shè)計(jì)及工藝復(fù)查后,芯片供應(yīng)商提出的篩選辦法為:通過在電源電壓2.0 V時(shí)進(jìn)行寫操作并且在3.3 V正常電壓時(shí)讀取上一步寫的地址數(shù)據(jù),數(shù)據(jù)有改寫則為失效品,以此避免缺陷芯片出廠。篩選過程中寫操作使用2.0 V 電源電壓由芯片供應(yīng)商確定,并保證篩選的有效性。同時(shí),在系統(tǒng)層要求燒寫PROM 數(shù)據(jù)時(shí)勾選寫保護(hù)選項(xiàng)。
經(jīng)分析認(rèn)為,F(xiàn)PGA 配置用FLASH 型PROM 數(shù)據(jù)失效原因是國產(chǎn)PROM 器件上電復(fù)位閾值低于最低工作電壓,在高溫老煉過程中偶發(fā)寫狀態(tài)機(jī)錯(cuò)誤跳轉(zhuǎn)至編程狀態(tài),使FPGA 配置文件被改寫。針對(duì)此問題提出了行之有效的技術(shù)及管理防護(hù)措施。