概述
Mbist 方法是目前大容量存儲器測試的主流技術(shù),該技術(shù)利用芯片內(nèi)部專門設(shè)計(jì)的BIST 電路進(jìn)行自動化測試,能夠?qū)?a class="article-link" target="_blank" href="/tag/%E5%B5%8C%E5%85%A5%E5%BC%8F/">嵌入式存儲器這種具有復(fù)雜電路結(jié)構(gòu)的嵌入式模塊進(jìn)行全面的測試。MBIST 電路將產(chǎn)生測試向量的電路模塊以及檢測測試結(jié)果的比較模塊都置于芯片的內(nèi)部,在測試完成后,將測試的結(jié)果通過芯片的測試引腳送出到芯片的外部。
MBIST 的核心思想是在芯片內(nèi)部,存儲器外部建立測試電路結(jié)構(gòu),實(shí)現(xiàn)對存儲器的讀寫控制:寫入測試向量,讀出響應(yīng)數(shù)據(jù)。MBIST 電路的基本結(jié)構(gòu)一般包括測試向量產(chǎn)生電路、BIST 控制電路、響應(yīng)分析電路三部分。
Mbist Flow
Tessent mbist flow流程圖如下。
Mbist腳本模板如下。
#Design Loading
set_context dft -rtl
read_cell_library ../library/adk.tcelllib
set_design_sources -format verilog -y {../library/mem ../design/rtl}
-extension v
set_design_sources -format tcd_memory -y ../library/mem -extension lib
read_verilog ../design/rtl/blockA.v
set_current_design blockA
#Specify and Verify DFT Requirements
set_design_level physical_block
set_dft_specification_requirements -memory_test on
add_clocks CLK -period 12ns -label clka
check_design_rules
#Create DFT Specification
set spec [create_dft_specification]
report_config_data $spec
#Process DFT Specification
process_dft_specification
#Extract ICL
extract_icl
#Create Patterns Specification
create_patterns_specification
#Process Patterns Specification
process_patterns_specification
#Run and Check Test Bench Simulations
run_testbench_simulations
check_testbench_simulations
#Test Logic Synthesis
run_synthesis
其中Design Loading這一步主要是讀入設(shè)計(jì)和庫文件。set_context命令可以設(shè)置mbist環(huán)境的上下文,包括兩個部分,一是設(shè)置mbist硬件插入的環(huán)境;二是告訴dft工具讀入的設(shè)計(jì)是RTL級的還是門級的,“-rtl”表示讀入的設(shè)計(jì)是RTL級的,“-no_rtl”表示讀入的設(shè)計(jì)是門級的。使用read_cell_library可以讀取設(shè)計(jì)者被實(shí)例化的單元的庫文件。Mbist library在Tessent工具中被叫做Tessent core descriptions(TCDs),該文件后綴一般為.memlib。
最近接觸發(fā)現(xiàn),mbist所采用的算法是在庫文件中定義的。常用的確定性測試算法有MSCAN(Memory Scan)算法,跳步 (GALPAT) 和走步 (Walking 1/0)算法,Checkerboard 算法和March 類算法。March算法是一系列的算法,由于這類算法具有較高的故障覆蓋率同時測試時間較短,使得其在存儲器測試領(lǐng)域得到了廣泛研究和應(yīng)用。這類算法已經(jīng)廣泛應(yīng)用于運(yùn)用于對大容量SRAM 和DRAM 的測試,隨著研究的深入,各種改進(jìn)算法也相繼出現(xiàn)。目前的March 算法主要有MATS,MATS+,March X、March C、March C-、March C+、March LR 等類型。
Extract ICL這個步驟作用是抽取ICL模型。隨著SoC芯片逐漸復(fù)雜化,其DFT(Design for Test)架構(gòu)也由單層向多層網(wǎng)絡(luò)發(fā)展。IEEE 1687是DFT多層網(wǎng)絡(luò)結(jié)構(gòu)的通用標(biāo)準(zhǔn),其核心內(nèi)容包括Heirachical Architecture,模塊連接語言ICL(Instrument Connectivity Language)和過程描述語言PDL(Procedural Description Language)。ICL是描述模塊間連接的語言,它不包括設(shè)備內(nèi)部具體操作的細(xì)節(jié)。因此可以概括地說,ICL是由Instruments 及其Connection描述組成的。ICL中的Instrument包含TAP、SIB、TDR及DFT IPs(EDT,OCC,MBIST…),它們是構(gòu)成1687網(wǎng)絡(luò)的關(guān)鍵節(jié)點(diǎn),每一個Instrument都在Module中定義。ICL中的Connection是對Instrument的Keywords 、Attribute、Scan_Cell、Interface以及PortsToPorts連接等的描述。
Run and Check Test Bench Simulations就是生成仿真test bench文件并調(diào)用仿真工具進(jìn)行仿真。Tessent內(nèi)嵌支持的仿真工具是ModelSim、Verilog-XL、NC-Verilog 、VCS和incisive。
Mbist pattern仿真fail
在仿真過程中遇到三個問題。
第一個問題始使用一個某仿真工具遇到編譯問題,后來換了兩個仿真工具,沒有編譯問題了。如下命令中-simulator的value可換為ModelSim、Verilog-XL、NC-Verilog 和incisive,似乎暫不支持xcelium工具。
run_testbench_simulations -simulator VCS。
第二個問題是mbist仿真遇到問題需要生成波形進(jìn)行debug,可開啟-store_simulation_waveforms option,Tessent生成的仿真環(huán)境則會生成波形。
run_testbench_simulations??-store_simulation_waveforms on
第三個問題是上述方法生成波形較慢,所以自己搭建了一個xcelium仿真環(huán)境,生成波形速度較快。
觀察波形發(fā)現(xiàn)MBISTPG_GO信號一開始就是X態(tài)。
Mbist 仿真debug
結(jié)合mbist數(shù)據(jù)對比的原理進(jìn)行分析。第一步,TMB中包含了FSM,由MBIST_EN控制開啟,BIST_SETUP進(jìn)行配置。FSM控制SIGNAL GEN信號,一個是送入到mem interface中的mux中非func的一端口,另一個是數(shù)據(jù)送入到COMP和經(jīng)過RAM的數(shù)據(jù)進(jìn)行對比;同時,SIGNAL_GEN會反饋信號控制FSM進(jìn)行下一步操作。第二步,test數(shù)據(jù)送入到interface中,然后經(jīng)過SRAM輸出之后,送回到TMB中的COMP中進(jìn)行和原始數(shù)據(jù)比較,如果數(shù)據(jù)比對正確,則MBIST_GO拉高,否則如果數(shù)據(jù)對比錯誤,則MBIST_GO變低。同時在比對初期,COMP會送出CMP_STAT信號。第三步,這個FMS控制相應(yīng)的MEM比對完成,則輸出MBIST_DONE信號。最后,TMB中的MBIST_GO和MBIST_DONE信號,是可以在仿真過程中進(jìn)行觀測的。從而用于 debug。
可以根據(jù)MBIST_GO和MBIST_DOWN的狀態(tài)判斷測試結(jié)果。DONE =1 & GO =1:test finished and pass;DONE =0 & GO =1 :test not complete but no errors until now, can be caused by using a slower clock than specified;DONE =1& GO =0:test finished but at least one mem test failed;DONE =0 & GO =0 :test not complete and at least one mem test failed。
該fail的仿真屬于DONE =1& GO =0的情況,推測大概原因是數(shù)據(jù)沒有讀入到sram內(nèi)部;檢查發(fā)現(xiàn)sram的數(shù)據(jù)輸出端(dout)和數(shù)據(jù)輸入端(din)都是“X”態(tài),驗(yàn)證了sram數(shù)據(jù)沒有成功讀入和寫出的設(shè)想。
普通的Single-Port ram(sp ram)的常見端口如下。地線(GND):接地引腳,連接到電路的地點(diǎn)。供電線(Vcc):供電引腳,用于提供正常工作電壓。輸入/輸出引腳(I/O):用于數(shù)據(jù)讀取和寫入操作的引腳。地址引腳(Address):用于指定要讀取或?qū)懭氲拇鎯卧刂返囊_。使能引腳(CE):使能引腳,控制存儲器的讀取和寫入操作。寫使能引腳(WE):寫使能引腳,控制存儲器的寫入操作。輸出使能引腳(OE):輸出使能引腳,控制存儲器的輸出操作。數(shù)據(jù)引腳(Data):用于傳輸數(shù)據(jù)的引腳。
檢查發(fā)現(xiàn),上述波形中多了一個reset端口,是Dual-Port RAM(雙端口RAM)。雙端口RAM 是在一個SRAM 存儲器上具有兩套完全獨(dú)立的數(shù)據(jù)線、地址線和讀寫控制線,并允許兩個獨(dú)立的系統(tǒng)同時對該存儲器進(jìn)行隨機(jī)性的訪問。即共享式多端口存儲器,讀寫可同時進(jìn)行。雙并且雙口RAM分偽雙端口RAM和真雙端口RAM。
偽雙口輸入有一組數(shù)據(jù)線,兩組地址線,兩個時鐘。兩個輸出端口共用有個輸出端口。所以一個端口只讀,另一個端口只寫,但寫入和讀取的時鐘可以不同,且位寬比可以不是1:1。即允許寫A的同時讀B,且速率可以不同。
真雙口輸入有兩組地址線和兩組數(shù)據(jù)線,兩個時鐘。輸出有兩個分別的數(shù)據(jù)線。所以雙口RAM兩個端口都分別帶有讀寫端口,可以在沒有干擾的情況下進(jìn)行讀寫,彼此互不干擾。
雙端口SRAM相比單端口SRAM增加了復(fù)雜性,主要體現(xiàn)在讀寫干擾問題上。雙端口SRAM通過增加存取管實(shí)現(xiàn)了兩個端口對存儲單元的獨(dú)立讀寫,但這降低了存儲單元的穩(wěn)定性。當(dāng)兩個端口進(jìn)行同行存取時,會發(fā)生讀寫干擾問題,盡管目前尚未找到完美的解決方法,但復(fù)位操作對于確保系統(tǒng)的穩(wěn)定性和可靠性仍然非常重要。
檢查發(fā)現(xiàn),sram的數(shù)據(jù)沒有正確讀入的原因是雙端口RAM沒有進(jìn)行有效復(fù)位引起的。由于在mbist腳本中的如下設(shè)置,導(dǎo)致復(fù)位信號一直保持在高電平,使得雙端口RAM沒有進(jìn)行有效的復(fù)位。
add_input_constraints??reset??-c1
解決方法
方法一:在生成的test bench中手動控制復(fù)位信號進(jìn)行有效復(fù)位,仿真PASS。
方法二:在mbist腳本中使用Register_static_dft_signal_names、Add_dft_signal reset1
和Add_dft_control_points三個命令組合實(shí)現(xiàn)對指定的SRAM的reset pin的復(fù)位控制,仿真也可PASS。