加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

Mbist仿真初探

09/19 08:42
843
閱讀需 15 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

概述

Mbist 方法是目前大容量存儲(chǔ)器測(cè)試的主流技術(shù),該技術(shù)利用芯片內(nèi)部專門設(shè)計(jì)的BIST 電路進(jìn)行自動(dòng)化測(cè)試,能夠?qū)?a class="article-link" target="_blank" href="/tag/%E5%B5%8C%E5%85%A5%E5%BC%8F/">嵌入式存儲(chǔ)器這種具有復(fù)雜電路結(jié)構(gòu)的嵌入式模塊進(jìn)行全面的測(cè)試。MBIST 電路將產(chǎn)生測(cè)試向量的電路模塊以及檢測(cè)測(cè)試結(jié)果的比較模塊都置于芯片的內(nèi)部,在測(cè)試完成后,將測(cè)試的結(jié)果通過(guò)芯片的測(cè)試引腳送出到芯片的外部。

MBIST 的核心思想是在芯片內(nèi)部,存儲(chǔ)器外部建立測(cè)試電路結(jié)構(gòu),實(shí)現(xiàn)對(duì)存儲(chǔ)器的讀寫(xiě)控制:寫(xiě)入測(cè)試向量,讀出響應(yīng)數(shù)據(jù)。MBIST 電路的基本結(jié)構(gòu)一般包括測(cè)試向量產(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ì)和庫(kù)文件。set_context命令可以設(shè)置mbist環(huán)境的上下文,包括兩個(gè)部分,一是設(shè)置mbist硬件插入的環(huán)境;二是告訴dft工具讀入的設(shè)計(jì)是RTL級(jí)的還是門級(jí)的,“-rtl”表示讀入的設(shè)計(jì)是RTL級(jí)的,“-no_rtl”表示讀入的設(shè)計(jì)是門級(jí)的。使用read_cell_library可以讀取設(shè)計(jì)者被實(shí)例化的單元的庫(kù)文件。Mbist library在Tessent工具中被叫做Tessent core descriptions(TCDs),該文件后綴一般為.memlib。

最近接觸發(fā)現(xiàn),mbist所采用的算法是在庫(kù)文件中定義的。常用的確定性測(cè)試算法有MSCAN(Memory Scan)算法,跳步 (GALPAT) 和走步 (Walking 1/0)算法,Checkerboard 算法和March 類算法。March算法是一系列的算法,由于這類算法具有較高的故障覆蓋率同時(shí)測(cè)試時(shí)間較短,使得其在存儲(chǔ)器測(cè)試領(lǐng)域得到了廣泛研究和應(yīng)用。這類算法已經(jīng)廣泛應(yīng)用于運(yùn)用于對(duì)大容量SRAM 和DRAM 的測(cè)試,隨著研究的深入,各種改進(jìn)算法也相繼出現(xiàn)。目前的March 算法主要有MATS,MATS+,March X、March C、March C-、March C+、March LR 等類型。

Extract ICL這個(gè)步驟作用是抽取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,模塊連接語(yǔ)言ICL(Instrument Connectivity Language)和過(guò)程描述語(yǔ)言PDL(Procedural Description Language)。ICL是描述模塊間連接的語(yǔ)言,它不包括設(shè)備內(nèi)部具體操作的細(xì)節(jié)。因此可以概括地說(shuō),ICL是由Instruments 及其Connection描述組成的。ICL中的Instrument包含TAP、SIB、TDR及DFT IPs(EDT,OCC,MBIST…),它們是構(gòu)成1687網(wǎng)絡(luò)的關(guān)鍵節(jié)點(diǎn),每一個(gè)Instrument都在Module中定義。ICL中的Connection是對(duì)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

在仿真過(guò)程中遇到三個(gè)問(wèn)題。

第一個(gè)問(wèn)題始使用一個(gè)某仿真工具遇到編譯問(wèn)題,后來(lái)?yè)Q了兩個(gè)仿真工具,沒(méi)有編譯問(wèn)題了。如下命令中-simulator的value可換為ModelSim、Verilog-XL、NC-Verilog 和incisive,似乎暫不支持xcelium工具。

run_testbench_simulations -simulator VCS。

第二個(gè)問(wèn)題是mbist仿真遇到問(wèn)題需要生成波形進(jìn)行debug,可開(kāi)啟-store_simulation_waveforms option,Tessent生成的仿真環(huán)境則會(huì)生成波形。

run_testbench_simulations??-store_simulation_waveforms on

第三個(gè)問(wèn)題是上述方法生成波形較慢,所以自己搭建了一個(gè)xcelium仿真環(huán)境,生成波形速度較快。

觀察波形發(fā)現(xiàn)MBISTPG_GO信號(hào)一開(kāi)始就是X態(tài)。

Mbist 仿真debug

結(jié)合mbist數(shù)據(jù)對(duì)比的原理進(jìn)行分析。第一步,TMB中包含了FSM,由MBIST_EN控制開(kāi)啟,BIST_SETUP進(jìn)行配置。FSM控制SIGNAL GEN信號(hào),一個(gè)是送入到mem interface中的mux中非func的一端口,另一個(gè)是數(shù)據(jù)送入到COMP和經(jīng)過(guò)RAM的數(shù)據(jù)進(jìn)行對(duì)比;同時(shí),SIGNAL_GEN會(huì)反饋信號(hào)控制FSM進(jìn)行下一步操作。第二步,test數(shù)據(jù)送入到interface中,然后經(jīng)過(guò)SRAM輸出之后,送回到TMB中的COMP中進(jìn)行和原始數(shù)據(jù)比較,如果數(shù)據(jù)比對(duì)正確,則MBIST_GO拉高,否則如果數(shù)據(jù)對(duì)比錯(cuò)誤,則MBIST_GO變低。同時(shí)在比對(duì)初期,COMP會(huì)送出CMP_STAT信號(hào)。第三步,這個(gè)FMS控制相應(yīng)的MEM比對(duì)完成,則輸出MBIST_DONE信號(hào)。最后,TMB中的MBIST_GO和MBIST_DONE信號(hào),是可以在仿真過(guò)程中進(jìn)行觀測(cè)的。從而用于 debug。

可以根據(jù)MBIST_GO和MBIST_DOWN的狀態(tài)判斷測(cè)試結(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的情況,推測(cè)大概原因是數(shù)據(jù)沒(méi)有讀入到sram內(nèi)部;檢查發(fā)現(xiàn)sram的數(shù)據(jù)輸出端(dout)和數(shù)據(jù)輸入端(din)都是“X”態(tài),驗(yàn)證了sram數(shù)據(jù)沒(méi)有成功讀入和寫(xiě)出的設(shè)想。

普通的Single-Port ram(sp ram)的常見(jiàn)端口如下。地線(GND):接地引腳,連接到電路的地點(diǎn)。供電線(Vcc):供電引腳,用于提供正常工作電壓。輸入/輸出引腳(I/O):用于數(shù)據(jù)讀取和寫(xiě)入操作的引腳。地址引腳(Address):用于指定要讀取或?qū)懭氲拇鎯?chǔ)單元地址的引腳。使能引腳(CE):使能引腳,控制存儲(chǔ)器的讀取和寫(xiě)入操作。寫(xiě)使能引腳(WE):寫(xiě)使能引腳,控制存儲(chǔ)器的寫(xiě)入操作。輸出使能引腳(OE):輸出使能引腳,控制存儲(chǔ)器的輸出操作。數(shù)據(jù)引腳(Data):用于傳輸數(shù)據(jù)的引腳。

檢查發(fā)現(xiàn),上述波形中多了一個(gè)reset端口,是Dual-Port RAM(雙端口RAM)。雙端口RAM 是在一個(gè)SRAM 存儲(chǔ)器上具有兩套完全獨(dú)立的數(shù)據(jù)線、地址線和讀寫(xiě)控制線,并允許兩個(gè)獨(dú)立的系統(tǒng)同時(shí)對(duì)該存儲(chǔ)器進(jìn)行隨機(jī)性的訪問(wèn)。即共享式多端口存儲(chǔ)器,讀寫(xiě)可同時(shí)進(jìn)行。雙并且雙口RAM分偽雙端口RAM和真雙端口RAM。

偽雙口輸入有一組數(shù)據(jù)線,兩組地址線,兩個(gè)時(shí)鐘。兩個(gè)輸出端口共用有個(gè)輸出端口。所以一個(gè)端口只讀,另一個(gè)端口只寫(xiě),但寫(xiě)入和讀取的時(shí)鐘可以不同,且位寬比可以不是1:1。即允許寫(xiě)A的同時(shí)讀B,且速率可以不同。

真雙口輸入有兩組地址線和兩組數(shù)據(jù)線,兩個(gè)時(shí)鐘。輸出有兩個(gè)分別的數(shù)據(jù)線。所以雙口RAM兩個(gè)端口都分別帶有讀寫(xiě)端口,可以在沒(méi)有干擾的情況下進(jìn)行讀寫(xiě),彼此互不干擾。

雙端口SRAM相比單端口SRAM增加了復(fù)雜性,主要體現(xiàn)在讀寫(xiě)干擾問(wèn)題上。雙端口SRAM通過(guò)增加存取管實(shí)現(xiàn)了兩個(gè)端口對(duì)存儲(chǔ)單元的獨(dú)立讀寫(xiě),但這降低了存儲(chǔ)單元的穩(wěn)定性。當(dāng)兩個(gè)端口進(jìn)行同行存取時(shí),會(huì)發(fā)生讀寫(xiě)干擾問(wèn)題,盡管目前尚未找到完美的解決方法,但復(fù)位操作對(duì)于確保系統(tǒng)的穩(wěn)定性和可靠性仍然非常重要。

檢查發(fā)現(xiàn),sram的數(shù)據(jù)沒(méi)有正確讀入的原因是雙端口RAM沒(méi)有進(jìn)行有效復(fù)位引起的。由于在mbist腳本中的如下設(shè)置,導(dǎo)致復(fù)位信號(hào)一直保持在高電平,使得雙端口RAM沒(méi)有進(jìn)行有效的復(fù)位。

add_input_constraints??reset??-c1

解決方法

方法一:在生成的test bench中手動(dòng)控制復(fù)位信號(hào)進(jìn)行有效復(fù)位,仿真PASS。

方法二:在mbist腳本中使用Register_static_dft_signal_names、Add_dft_signal reset1

和Add_dft_control_points三個(gè)命令組合實(shí)現(xiàn)對(duì)指定的SRAM的reset pin的復(fù)位控制,仿真也可PASS。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

前華為海思工程師;與非網(wǎng)2022年度影響力創(chuàng)作者;IC技術(shù)圈成員。

微信公眾號(hào)