錢勁宇,強小燕,屈凌翔
(中國電子科技集團公司第五十八研究所,江蘇 無錫 214072)
隨著信息技術(shù)的飛速發(fā)展,用戶對數(shù)據(jù)存儲系統(tǒng)的容量、功耗、速度等要求也越來越嚴格[1-2]。Flash 存儲器相對傳統(tǒng)的存儲器件RAM 而言,具有集成度高、體積小、成本低等優(yōu)點[3-4],因而隨著集成電路的規(guī)模越來越大,F(xiàn)lash 存儲器飛速發(fā)展,逐漸成為系統(tǒng)芯片主流的容量存儲媒體[5]。
目前Flash 存儲器在完成設計后,通常將串行標準接口作為測試接口進行擦寫測試,而串行時鐘頻率比較低,傳輸數(shù)據(jù)慢,測試效率低。另一方面,F(xiàn)lash 存儲器的測試往往存在著擦除、編程數(shù)據(jù)比較慢的問題,這對存在多塊Flash 的芯片產(chǎn)生了巨大的測試量,需要進行大量重復的測試,導致需要的測試時間較長[6-7],因此,如何提高測試效率,簡化測試流程,在Flash 測試中顯得尤為重要。
本文對片上Flash 存儲器增加了測試接口,設計了片外測試通道,實現(xiàn)了片上嵌入式Flash 的可測試性。為了提高測試速度,降低測試成本,一方面,設計了基于1/2/4/8 線多線傳輸?shù)腟PI 測試接口,在兼容串行傳輸數(shù)據(jù)的同時支持并行傳輸數(shù)據(jù),另一方面,在確保穩(wěn)定性的情況下,實現(xiàn)了靈活選定1/2/3 塊Flash 存儲器并行擦寫測試的設計。
Flash 存儲器的總體設計主要由Flash 控制器模塊和Flash 測試器模塊兩部分組成,如圖1 所示,正常工作模式時由Flash 控制器模塊控制,實現(xiàn)Flash 與內(nèi)核之間的交互,測試模式時由Flash 測試器模塊控制,通過外部測試引腳來實現(xiàn)對Flash 的編程、讀取和擦除操作。Flash控制器模塊和Flash 測試器模塊通過選通模塊來實現(xiàn)對9 塊Flash 的控制,選通信號可以通過內(nèi)部寄存器配置來進行模式切換。
本文選用的Flash 是一款CMOS 頁擦除、附帶ECC校驗的字編程嵌入式存儲器,數(shù)據(jù)輸入總線位寬為36 bit,數(shù)據(jù)輸出總線位寬為144 bit,地址總線位寬為15 bit。內(nèi)部存儲空間可以分為存儲塊和信息塊兩部分,其中存儲塊的空間為32 K×144 bit,512頁,每頁容量為1 KB,信息塊的空間為64×144 bit,8頁,每頁容量為1 KB。Flash IP的接口信號如表1 所示。
表1 Flash 接口信號
在進行編程、讀取和擦除操作期間時,CS 都必須保持為1,若CS 變?yōu)?,則忽略其余所有控制信號和地址信號。Flash IP 在進行讀取、編程以及擦除時接口信號都必須滿足相應的時序要求,測試Flash IP 的讀取操作的時序圖如圖2 所示,其中IFREN 為1 時選定信息塊,為0時選定存儲 塊。首先將CS置為1,ADDR 和IFREN 在AE 上升沿到來前后都需要保持相應的建立時間tAS 和保持時間tAH,在AE 置為1后,等待tAC后,數(shù)據(jù)輸出總線DOUT 將相應地址的數(shù)據(jù)輸出。在讀操作期間時,PROG、SERA、MASE、NVSTR 將保持為0 直到操作完成。
測試Flash IP 的編程操作的時序圖如圖3 所示,其中AP 為2'b11 時DIN[35:0]對應于編程位[143:108],AP 為2'b10 時DIN[35:0]對應于編程位[107:72],AP 為2'b01 時DIN[35:0]對應于編程位[71:36],AP 為2'b00 時DIN[35:0]對應于編程位[35:0]。進行編程操作時,AE 類似于時鐘信號,IFREN、ADDR、AP、PROG、DIN、CS 在AE的上升沿到來前后都需要保持相應的建立時間和保持時間。在AE 置為1后,等待tNVSTR后,NVSTR 置為1,tPROG 為編程時間,編程結(jié)束后,NVSTR 置0,等待tCSLW后,CS 置0。在編程操作期間,SERA、MASE 將保持為0直到編程操作結(jié)束。
測試Flash IP 的擦除操作的時序圖如圖4 和圖5 所示,F(xiàn)lash IP 被分成512 頁的相同的1 KB 空間,擦除方式有頁擦除和全擦除2 種方式,頁擦除可以對任何單獨一頁進行擦除,全擦除直接對整塊Flash 進行擦除,其中SERA 為頁擦除使能信號,MASE 為全擦除使能信號,兩種擦除方式不能同時觸發(fā),同一時間僅一種擦除使能信號置位,NVSTR 根據(jù)擦除方式保持相應的擦除時間。
Flash 測試器的結(jié)構(gòu)如圖6 所示,可以將其分為3 個模塊:轉(zhuǎn)換模塊、控制模塊和選通模塊。轉(zhuǎn)換模塊連接外部SPI 接口選擇1/2/4/8 線進行傳輸,提取出指令、數(shù)據(jù)和地址,進行相應的轉(zhuǎn)換,控制模塊根據(jù)測試指令,輸入滿足Flash IP 操作時序的控制信號,選通模塊根據(jù)片選指令,來選擇1/2/3 塊Flash 進行測試。在編程指令時,由于Flash IP 的數(shù)據(jù)輸入總線位寬為36 bit,因此先要將SPI 傳輸?shù)臄?shù)據(jù)轉(zhuǎn)換為36 bit 數(shù)據(jù)暫存在寫數(shù)據(jù)FIFO中,再依次等待控制模塊輸入對應的編程操作的控制信號時,傳入對應的Flash IP 數(shù)據(jù)輸入總線DIN 中。讀取指令時,控制模塊先執(zhí)行讀取操作將數(shù)據(jù)輸出總線DOUT的數(shù)據(jù)讀出,暫存在位寬為144 bit 的讀數(shù)據(jù)FIFO中,通過轉(zhuǎn)換模塊將144 bit 數(shù)據(jù)轉(zhuǎn)換為1/2/4/8 bit 數(shù)據(jù),等待SPI 工作時傳輸?shù)狡獗容^器中。
Flash 測試器模塊的具體操作流程如圖7 所示。首先通過內(nèi)部控制信號進入測試模式,在進入測試模式后,通過配置SPI 可以實現(xiàn)1/2/4/8 線數(shù)據(jù)傳輸,SPI 接口持續(xù)輸入測試序列,來確定對Flash 測試器的操作。其次經(jīng)SPI 接口輸入片選指令,來選定需要進行操作的Flash IP,可以靈活選定1/2/3 塊Flash。選定Flash后,再輸入操作指令,來控制對Flash 進行編程操作、讀取操作或者擦除操作。如果是編程操作,會繼續(xù)等待SPI 接口輸入編程地址以及操作編程個數(shù),連續(xù)輸入編程數(shù)據(jù)至對應的Flash IP,直到編程個數(shù)為0后,此次編程測試結(jié)束。如果是讀取操作,則繼續(xù)等待輸入讀取地址以及操作讀取個數(shù),隨后讀取對應地址的數(shù)據(jù)至片外比較器進行校驗,讀取個數(shù)為0后,此次讀取測試結(jié)束。如果是擦除操作,則輸入擦除地址后直接進行擦除操作。待操作結(jié)束后,則可以輸入下一次測試指令繼續(xù)進行測試。
在Linux 平臺上利用NCverilog 對Flash 存儲器測試接口設計進行仿真。Flash 存儲器的編程操作只能把數(shù)據(jù)位從1 變0,而不能將數(shù)據(jù)位從0 轉(zhuǎn)換為1,只有擦除操作可以實現(xiàn)數(shù)據(jù)位從0 到1 的轉(zhuǎn)換[8],因此為了仿真測試的正確性,在編程和讀取操作前,首先應該對Flash進行一次全擦除操作。圖8 所示是對Flash1、Flash2 進行的串行仿真測試,首先依次對Flash1、Flash2 進行一次全擦除操作,然后再通過SPI 分別向Flash1、Flash2 輸入一個144 bit 數(shù)據(jù),由于數(shù)據(jù)輸入總線DIN 位寬為36 bit,因此需要4 次編程操作,通過地址映射控制信號AP 來寫入0 地址的144 bit中,隨后再讀取0 地址的數(shù)據(jù),讀出的數(shù)據(jù)與寫入的數(shù)據(jù)相符。
為了加快測試速度,可以將上述串行測試轉(zhuǎn)換為并行測試,如圖9 所示,對Flash1、Flash2 同時進行擦除操作和編程操作,然后依次讀取對應地址的數(shù)據(jù),可以發(fā)現(xiàn),與單獨操作Flash 相比,簡化了整體操作流程。由仿真測出,進入測試模式后編程一片F(xiàn)lash 全空間的時間在3.2 s 左右,則串行編程9 片F(xiàn)lash 的時間大概在28.8 s,若每次并行測試3 片F(xiàn)lash,則只需要9.6 s 左右即可完成,由此可見,并行測試大大降低了測試成本,提高了測試效率。
本文設計并實現(xiàn)了一種片上嵌入式Flash 存儲器的測試接口,測試接口能夠在外部操作指令的控制下實現(xiàn)對Flash 存儲器的編程、讀取和擦除操作,實現(xiàn)了Flash存儲器的可測試性,并進一步實現(xiàn)了基于多線SPI 的測試接口以及Flash 存儲器并行測試的設計,有效提高了Flash 存儲器的測試速度,降低了測試成本。通過仿真驗證,實現(xiàn)了測試功能的要求,并成功應用于一款32 位浮點微處理器中。