劉 浩,段紅亮,張雪峰,張欣光,楊薇秀
(北京航天長征飛行器研究所,北京,100076)
SRAM 型FPGA 需要通過加載配置文件比特流至內部存儲器完成初始化配置過程。所謂的初始化配置技術,是一種FPGA 在上電后,外圍設備(比如配置芯片)開始加載全比特流文件對其內部的全部邏輯資源進行第1 次配置,以實現系統的初始功能[1]。
由于SRAM 型FPGA 的配置存儲器是易失型的,每次上電需要重新配置,因此必須外接存儲了配置文件的非遺失存儲器,通過配置接口完成配置文件比特流加載。較為常用的非遺失性配置文件存儲器為FLASH 型PROM(Programmable Read Only Memory),其采用了低功耗先進的COMS NOR FLASH 工藝,可重復擦除或編程達20 000 次,支持IEEE 1149.1 和IEEE 1532 標準邊界掃描(JTAG)協議[2]。以Xilinx SRAM型FPGA 為例,其通常的使用過程為:a)設計好軟件工程,經過綜合及布局布線等過程后生成比特型配置文件;b)根據配置存儲器類型轉化配置文件;c)通過JTAG 將配置文件燒寫至配置存儲器中;d)系統整機上電后FPGA 加載配置存儲器中的配置文件并開啟工作模式。
如果配置存儲器內數據異常,則會導致FPGA 無法配置成功,軟件無法運行,系統整機表現為失效狀態,電流比正常狀態偏低。本文針對一起國產FLASH型PROM 數據失效導致FPGA 無法正常配置的案例,對問題機理進行分析后,給出系統層防護措施。本系統選用Xilinx Virtex-4 FPGA 及國產某款配置PROM,此款PROM 可原位替代Xilinx XCFxxP 系列相應產品。
在系統進行60 ℃高溫老練試驗的某一循環上電啟動時出現系統整機失效現象,且系統上電后工作電流偏小,進一步排查發現系統主處理器FPGA 軟件未正常加載成功,因此軟件未運行。對系統重新斷電上電后,故障依舊,恢復常溫后故障仍然無法消除。即加電后系統再也無法正常啟動。后在上電情況下通過JTAG 在線調試方式向FPGA 加載程序,系統恢復正常且所有功能運行正確,因此排除FPGA 本身及外圍供電及其他電路異常情況。重新通過JTAG 接口向PROM燒寫配置文件后系統恢復正常,因此確定為PROM 出現異常情況導致上述問題。此PROM 為某型國產FLASH 型FPGA 芯片,其作為Xilinx Virtex-4 FPGA的配置芯片存儲FPGA 的配置文件。配置模式采用主并模式[3],配置電路見圖1 所示。

圖1 FPGA 配置電路Fig.1 FPGA Configuration Circuit
通過JTAG 接口讀取異常情況下FPGA 的狀態寄存器信息,讀取結果如圖2 所示。由圖2 可見“Value of DONE pin”已置低,FPGA 已做好讀取PROM 信息準備,而“Internal signal indicates that chip is configured”等信息表明FPGA 未收到或接收到錯誤的PROM 配置信息。通過示波器測試PROM 端CLK、/CE 及OE 端波形發現波形輸出均正常,進一步排除FPGA 異常可能。

圖2 FPGA 配置失敗時狀態寄存器信息Fig.2 Status Register Information When Configuration Fails
此款FLASH 型PROM 原理如圖3 所示,其中“JTAG 接口控制”電路及“存儲單元”為其核心部件。根據故障現象推斷該PROM“存儲單元”數據異常因有2 種可能:a)“存儲單元”數據保持能力失效;b)“JTAG 接口控制”電路異常擦寫“存儲單元”[4]。

圖3 PROM 原理Fig.3 PROM Schematic
“存儲單元”由FLASH 閃存存儲單元組成,單元內的數據在一段時間內被正確讀取的能力,也稱為FLASH 數據保持能力。其受到諸多因素影響,包括工藝制造、溫度和電壓、靜電環境、輻射暴露、累積擦除周期等。常見的致數據保持能力失效的具體模式包括:
a)工藝制造缺陷導致存在浮柵電子泄漏的存儲單元,通常被稱為單位電荷損傷單元,表現為低于典型的數據保持能力[5]。同時浮柵電子泄漏可以在電壓或高溫應力的作用下被進一歩加速。所有的芯片供應商都有標準的過程來描述和識別有工藝缺陷的存儲單元。
b)使用環境造成的偽單位電荷損傷單元。這類單元在物理上是合格的存儲位,只是被輕微地編程,即“欠編程”,無法100%識別。通常是由于編程操作過程中出現了系統噪聲或瞬變電壓導致無法達到完全編程存儲單元所需的閾值電壓。在執行讀操作時,一個“欠編程”的位可以讀取為“0”或“1”。
在第1 種失效模式下,單位電荷損傷單元會導致PROM 中存儲的數據為不可逆的錯誤配置文件,FPGA讀取此配置文件將始終無法正常啟動。在第2 種失效模式下,偽單位電荷損傷單元導致PROM 中存儲的數據為可逆的配置文件,在不同測試工況下FPGA 應有配置成功概率。兩種失效模式均與本系統故障模式不同。同時,進一步測試故障模式下D[0..7]數據端波形,并與正常模式下數據比對后發現故障產品PROM 數據內容錯誤。PROM 輸出異常數據D0 與CLK 波形如圖4 所示,正常數據D0 與CLK 波形見圖5 所示。如果存儲單元是一個被寫入過的,相當于邏輯“0”,相反,如果這個存儲單元是被擦除過的,相當于邏輯“1”[7]。經過測試排故后認為故障原因為FPGA 配置用FLASH型PROM 內部分數據被異常由“1”改寫為“0”,且現象穩定。同時可排除因“存儲單元”數據保持能力失效和被擦除導致故障。

圖4 PROM 異常數據輸出波形Fig.4 PROM Wrong Data Output Waveform

圖5 PROM 正常數據輸出波形Fig.5 PROM Correct Data Output Waveform
JTAG 接口控制電路主要包括:上電初始化電路、讀存儲單元電路及寫存儲單元電路3 部分。與PROM內部分數據被異常由“1”改寫為“0”有關的部分為前兩種電路。
寫存儲單元電路工作流程為:通過JTAG 接口將配置文件以數據位流依次按照地址順序和數據映射關系寫入到PROM 存儲單元組成的陣列空間。故障出現過程沒有此操作流程,可以排除,重點針對“上電初始化”電路異常進行排查。
上電復位電路工作原理為:上電復位電壓閾值應高于器件最低工作電壓。在上電過程中,電壓在抵達最低工作電壓和復位閾值電壓前保持器件復位狀態,直至到達復位閾值電壓后復位解除,以此保證上電過程中器件初始狀態受控。如果上電復位閾值低于最低工作電壓,將導致器件復位解除后還未到達最低工作電壓,器件狀態不受控,存在錯誤進入“寫數據狀態機”或“擦數據狀態機”過程的可能。
狀態機被異常觸發后,可能不處于正常的復位或空閑的狀態,出現錯誤跳轉,導致誤寫入等異常情況。“寫數據狀態機”單次進入寫狀態,根據JTAG 接口指令設計最多可向PROM編程并寫入32Byte數據;“擦數據狀態機”單次進入擦狀態,根據JTAG 接口指令設計單次擦除256Byte 的整數倍數據。目前PROM 錯誤數據表現為“1”變“0”,是錯誤進入“寫數據狀態機”現象。
此款FLASH 型PROM 為國內某廠家參考Xilinx XCFxxP 系列同款產品設計,上電復位電壓閾值設計值為2.0 V。上電復位電路在工藝制造上存在上電復位電壓閾值過低的可能。同時,上電復位閾值電壓在工藝特性上隨溫度上升會進一步下降,對于與故障產品同批次的一只庫存合格產品實測在不同溫度下上電復位電壓如表1 所示。

表1 不同溫度下上電復位閾值實測值Tab.1 Power-on Reset Threshold Measured Value
對于上電復位電壓閾值遠低于設計值2.0 V 的個例,當其隨溫度上升使得上電復位閾值低于寄存器鎖存數據的最低工作電壓1.5 V 時,將使得初始化電路中PROM 控制狀態機在上電過程中存在一段時間的不確定狀態。PROM 控制狀態機以40 MHz OSC 時鐘作為工作時鐘,在RTL 代碼中為獨熱碼編碼,經綜合工具綜合時自動進行狀態機重構優化后,在網表中被優化為二進制編碼,如圖6 所示。

圖6 PROM 控制狀態機Fig.6 PROM Control State Machin Diagram
由圖6 可知,PROM 控制狀態機在網表中使用三比特寄存器表示當前狀態。當處于上電復位時,狀態機處于復位狀態011;當上電復位結束時,狀態機正常跳轉至初始化狀態000,開始進行OSC 修調等初始化操作。當初始化狀態執行完成后,狀態機進一步跳轉至空閑狀態001,等待響應來自JTAG 接口的擦除或寫操作指令,其中單次擦除時擦除區域大小為256 Byte扇區的倍數;單次寫操作時編程區域大小可為1~32 Byte,與JTAG 指令定義保持一致。
此款國產PROM 芯片控制狀態機復位的來源包括上電復位(POR)、VCCO 掉電復位和VCCJ 掉電復位。這3 種復位均為模擬模塊,不需要時鐘即可工作,其作用是保證在施加電源后,模擬和數字模塊初始化至已知狀態[6]。由于系統復位源與PROM 狀態機的40 MHz 與OSC 時鐘為異步關系,芯片電路設計采用異步復位、同步撤銷設計,對系統復位進行同步處理后,接入PROM 狀態機異步復位端,如圖7 所示。

圖7 PROM 控制狀態機復位電路Fig.7 PROM Control State Machine Reset Circuit
在正常情況下,當復位同步2 寄存器復位撤離后,狀態寄存器1 和狀態寄存器0 均由“1”跳轉至“0”。當狀態寄存器1 和狀態寄存器0 工作在寄存器鎖存數據的最低工作電壓1.5 V 以下時可能跳轉至“0”,也可能保持在復位值“1”,其狀態不能穩定輸出。當狀態寄存器[1:0]跳轉至“00”時,PROM 控制器仍為正常功能;當狀態寄存器[1:0]跳轉至“01”時,PROM 控制器跳過初始化進入空閑狀態;當狀態寄存器[1:0]跳轉至“10”時,PROM 控制器跳過初始化進入寫操作狀態,如圖8 虛線所示。而在斷電時VCCO 和VCCJ分別有掉電復位保護,正常空閑狀態的狀態機不會誤翻轉到寫操作狀態。

圖8 PROM 控制狀態機異常跳轉圖Fig.8 PROM Control State Machine Error Diagram
電路中編程地址寄存器的復位值為全“0”,該寄存器值會送往PROM 芯片地址端,因此PROM 地址在復位后始終為全“0”開始。編程字節計數寄存器和編程數據寄存器作為外部輸入的緩沖寄存器采用不帶異步復位端口的寄存器,在系統復位期間它們不會被復位。寄存器是雙穩態電路,未被復位的寄存器在上電后的狀態不能確定為高電平或低電平,因此可理解為隨機值。在正常JTAG 編程指令中,JTAG 會對編程地址、字節計數、數據寄存器進行寫操作,因此編程字節計數和數據寄存器上電復位期間是隨機值不影響正常流程的操作。
PROM 狀態機單次寫操作狀態可寫入1~32 Byte數據,當編程字節計數寄存器為隨機值時,PROM 單次編程狀態最多寫入32 Byte 數據。由于工作電壓異常,導致PROM 控制狀態機從復位狀態011 誤跳轉為編程狀態010 時,PROM 控制狀態機會對PROM 的復位地址即0 地址發起1~32 Byte 隨機大小的隨機數據寫入,導致PROM 前32 Byte 數據被改寫。進而導致后續FPGA 上電配置時發現比特流同步頭數據出錯,自動停止配置,導致FPGA 配置失敗。
由于低于上電復位閾值時狀態機有過復位過程,因此在不受控的電源電壓范圍內狀態機大概率是保持復位狀態,從而正常翻轉到初始狀態。不受控的電源電壓范圍內狀態機跳轉到寫操作狀態或空閑狀態的機會均等,其中空閑狀態也不會改寫數據,因此狀態機異常改寫數據的概率極低,但有發生的可能性。
在使用軟件燒寫工具(如Xilinx iMACT)時勾選寫保護功能,可防止數據改寫。進口及國產FLASH 型PROM 都帶有寫保護功能,當狀態機進入編程010 狀態后,首先會讀取保存在FLASH PROM NVR 區的寫保護位,并將此位的數據與待編程數據進行“或”操作后送往PROM。由于PROM 編程只能寫“0”,當數據均被寫保護電路箝位為“1”時,編程動作不會改寫FLASH PROM 內部數據。此時即便發生上電狀態機誤跳轉,也不會產生PROM 數據被改寫致使配置數據失效,可規避初始化異常對存儲體配置數據的改寫。
在開啟寫保護后在仿真時進行錯誤注入,可以看到當PROM 狀態機從復位狀態錯誤地跳轉至編程狀態時,PROM 的DIN 被箝位至高電平,未出現數據誤改寫故障,如圖9 所示。同時,為驗證措施有效性,對故障產品進行故障復現及措施有效性試驗驗證情況。對同一臺故障產品進行60 ℃,48 h 高溫老練試驗補充試驗,分別開展更改措施實施前后的試驗比對驗證,每次驗證24 h,驗證過程中使用自動設備每間隔5 min為整機上、斷電,并檢測FPGA 配置成功與否,如配置失敗,則重新通過人工燒寫PROM 配置程序后繼續試驗。試驗驗證結果為:未加措施前,24 h 內故障復現4 次。增加措施后24 h 內故障未出現,高溫老練試驗通過,可以證明該措施有效。

圖9 寫保護仿真圖Fig.9 Write Protection Simulation
在采購芯片時要求芯片供應商增加系統板級上電復位閾值測試篩選,并提供篩選測試報告。經過對此款芯片設計及工藝復查后,芯片供應商提出的篩選辦法為:通過在電源電壓2.0 V時進行寫操作并且在3.3 V正常電壓時讀取上一步寫的地址數據,數據有改寫則為失效品,以此避免缺陷芯片出廠。篩選過程中寫操作使用2.0 V 電源電壓由芯片供應商確定,并保證篩選的有效性。同時,在系統層要求燒寫PROM 數據時勾選寫保護選項。
經分析認為,FPGA 配置用FLASH 型PROM 數據失效原因是國產PROM 器件上電復位閾值低于最低工作電壓,在高溫老煉過程中偶發寫狀態機錯誤跳轉至編程狀態,使FPGA 配置文件被改寫。針對此問題提出了行之有效的技術及管理防護措施。