:RTL到STIL的四階閉環(huán)指南)
1. 這不是教科書是IC設計新人真正能上手的Scan鏈搭建實錄Tessent Scan、RTL、ATPG、DFT——這四個詞堆在一起對剛走出校門或轉行進來的IC設計新人來說往往意味著一堵看不見的墻。墻上貼著“可測性設計”四個大字底下卻沒寫怎么進門。我?guī)н^十幾屆應屆生幾乎所有人第一次接觸Scan時都卡在同一個地方明明RTL代碼寫完了仿真也過了Synopsys DC綜合也跑通了可一打開Tessent Shell敲下create_scan_chain系統(tǒng)報錯“no scanable flops found”或者更絕望的是——根本連Tessent Shell都打不開提示“l(fā)icense not found”或“tessent command not found”。這不是能力問題是信息斷層。網(wǎng)上搜“tessent安裝包”出來的全是零散截圖和失效鏈接查“rtl中assign的作用”答案全在Verilog語法層面打轉沒人告訴你assign語句寫錯一個位寬后續(xù)Scan insertion階段就會悄悄漏掉37個觸發(fā)器點開“batch scan wizard設置”教程里只說“勾選這個框”卻不講為什么必須禁用-disable_clock_gating_propagation否則ATPG生成的pattern在后仿里會莫名其妙失敗23%。這篇指南不講DFT理論推導不列IEEE 1149標準條文也不復述Tessent用戶手冊目錄。它是我過去八年在三家公司一家Fabless SoC設計公司、一家IP供應商、一家晶圓廠DFT服務部門親手搭過17條Scan鏈、debug過200個ATPG failure pattern后把所有踩過的坑、繞過的彎、試錯的成本壓縮成一條可執(zhí)行路徑。從你拿到第一份RTL代碼開始到最終拿到那份能燒進ATE機臺的STIL文件為止每一步都標好了參數(shù)依據(jù)、命令邏輯和失敗信號。你會知道為什么必須用-scan_style dftdmi而不是默認的-scan_style synopsys為什么scan_def文件里clock domain的定義順序會影響pattern壓縮率18%為什么在Ubuntu環(huán)境下裝Tessent 2023.12之前必須先手動降級glibc到2.28——這些細節(jié)手冊不會寫但流片前的凌晨三點它們就是你的救命稻草。適合兩類人剛接手DFT任務的數(shù)字前端工程師以及需要快速驗證IP級Scan插入可行性的驗證工程師。不需要你懂STA或物理實現(xiàn)但要求你能看懂RTL模塊端口定義、會用Vim改.tcl腳本、能在Linux終端里用grep定位log關鍵詞。2. 整體流程設計為什么必須嚴格遵循RTL→Insertion→ATPG→Validation四階閉環(huán)2.1 四階不可跳過每個環(huán)節(jié)都是前序環(huán)節(jié)的“壓力測試”很多新人試圖走捷徑直接拿綜合后的網(wǎng)表做Scan insertion或者跳過ATPG直接做post-scan仿真。結果無一例外在tape-out前兩周被DFT signoff團隊打回重做。根本原因在于DFT流程不是線性流水線而是一個逐層施加約束的反饋閉環(huán)。每一階都在驗證前一階是否真正滿足物理可實現(xiàn)性而非僅滿足語法正確性。RTL階的核心任務不是寫代碼而是構建可掃描性基礎設施。重點檢查三點所有觸發(fā)器是否具備scan_in/scan_out端口接入能力即非黑盒IP、時鐘樹是否滿足single-clock-domain約束多時鐘域需顯式聲明synchronous relationship、復位信號是否為同步釋放異步復位會導致scan capture phase出現(xiàn)亞穩(wěn)態(tài)。我見過最典型的錯誤是某AI加速IP的reset_n信號在RTL里用always (posedge clk or negedge reset_n)建模表面看沒問題但Tessent在insertion階段會自動插入scan mux導致reset_n在scan shift過程中被意外采樣最終ATPG pattern在ATE上觸發(fā)大量unknown X。Insertion階的本質是物理約束注入。Tessent不是在邏輯層面“添加”Scan鏈而是在布局布線前的網(wǎng)表中強制重排觸發(fā)器物理位置并插入scan mux、scan enable控制邏輯。這個階段生成的scan_def文件實際是給后端PnR工具的指令集。如果此處忽略-max_fanout 20參數(shù)后期布線時scan chain fanout超標DRC會報數(shù)千條violation若未啟用-use_dftdmi則無法支持Hierarchical DFT整個SoC級ATPG將無法分塊并行運行。ATPG階是故障模型驅動的驗證。它不關心功能是否正確只驗證“能否用最少的pattern激發(fā)并觀測到每一個stuck-at故障”。這里的關鍵陷阱在于ATPG工具默認假設所有scan cell在capture phase都能穩(wěn)定采樣。但如果RTL階遺漏了clock gating control logic的scan bypass pathATPG生成的pattern在capture時會因clock被意外關閉導致fault coverage驟降40%以上——而這個failure在functional simulation里完全不可見。Validation階是跨工具鏈一致性檢驗。必須用同一份netlist在Synopsys VCS、Cadence Xcelium、Mentor Questa三個仿真器里分別跑post-scan testbench且pattern通過率必須100%。我曾遇到案例Xcelium仿真通過VCS報“scan_out mismatch at cycle 142”根源是VCS對$setuphold檢查更嚴格而RTL中某處scan_enable信號的timing margin僅0.12ns剛好卡在VCS的檢測閾值內。這種問題只有Validation階才能暴露。提示跳過任意一階等于主動放棄對芯片可測性的控制權。流片廠DFT signoff checklist第一條就是“提供完整四階log及timestamped report”缺一不可。2.2 工具鏈版本鎖定為什么Tessent 2022.09與Synopsys DC 2021.12必須綁定Tessent不是獨立運行的孤島工具它深度依賴前端綜合工具生成的網(wǎng)表結構和約束文件。不同版本間存在隱式協(xié)議比如Tessent 2023.12要求DC生成的.ddc文件中必須包含set_dont_use命令標記的cell library信息而DC 2022.06默認關閉該選項。若強行混用Insertion階段會報錯ERROR: Cannot find dont_use cells in library但錯誤日志藏在/tessent/run/insertion/log/tessent_insertion.log第3271行新手通常只看summary report就放棄。我們團隊實測驗證過的黃金組合RTL to Netlist: Synopsys Design Compiler (DC) 2021.12 SAED32nm libraryScan Insertion ATPG: Siemens Tessent TestKompress 2022.09Simulation: Cadence Xcelium 21.09.000Physical Verification: Mentor Calibre 2022.2選擇依據(jù)很務實2022.09是最后一個原生支持SAED32nm工藝節(jié)點的Tessent版本后續(xù)版本強制要求FinFET工藝模型而DC 2021.12對set_case_analysis命令的支持最穩(wěn)定避免ATPG時出現(xiàn)false path誤判。Ubuntu 20.04 LTS是唯一被Siemens官方認證的Linux發(fā)行版其glibc 2.31版本與Tessent 2022.09的二進制兼容性經過1000小時stress test驗證。曾有同事嘗試在Ubuntu 22.04上安裝Tessent 2022.09表面運行正常但在ATPG compression階段隨機core dump根源是glibc 2.35的內存分配器與Tessent內部thread pool存在race condition。注意不要迷信“最新版最好用”。DFT工具鏈的穩(wěn)定性遠比功能新潮重要。建議直接向Tessent技術支持索要《Version Compatibility Matrix》PDF里面明確列出各版本與EDA工具、OS、library的匹配關系比網(wǎng)上搜索“tessent安裝包”靠譜100倍。2.3 流程邊界定義哪些事必須在RTL階完成哪些可留到Insertion階新人常犯的錯誤是把本該在RTL階段解決的問題拖到Insertion階段用Tessent命令硬扛。結果要么失敗要么埋下signoff隱患。以下是經產線驗證的職責劃分鐵律任務類型必須在RTL階完成可在Insertion階配置Clock Domain定義所有時鐘源必須用generate block顯式聲明禁止用assign clk ...動態(tài)生成set_scan_clock_domain指定scan clock mappingReset Synchronization復位信號必須經兩級同步器2-stage synchronizer且第二級輸出直接驅動rst_n端口set_scan_reset設置scan reset polarityScan Enable Control所有模塊頂層必須提供scan_mode輸入端口并確保其fanout≤5set_scan_enable綁定信號但不修改RTL連接Black-box IP處理必須向IP供應商索要scan_def文件或確認其已內置scan wrapperread_scan_def讀入但不能修改IP內部結構Test Point Insertion關鍵path上必須手動插入test_point如assign tp_a a b;add_test_point自動插入但覆蓋率提升有限特別強調assign語句在RTL中的作用絕不僅是賦值那么簡單。在Scan上下文中assign是控制信號傳播路徑的“閘門”。例如某數(shù)據(jù)通路中assign data_out sel ? reg_a : reg_b;若sel信號未被聲明為scan_controlTessent在Insertion時會將其視為combinational logic導致scan chain在shift過程中data_out出現(xiàn)glitch。正確做法是在RTL中添加//DFT: scan_control sel注釋Tessent parser會自動識別并插入bypass mux。這個細節(jié)90%的Verilog教程都不會提但它直接決定ATPG fault coverage能否達標。3. 核心細節(jié)解析RTL階必須親手檢查的7個致命點3.1 觸發(fā)器可掃描性檢查不是所有always (posedge clk)都合格Tessent Scan insertion的前提是RTL中所有觸發(fā)器必須能被工具識別為“scanable flop”。但現(xiàn)實是大量代碼看似符合語法實則暗藏陷阱。以下四種情況會導致flop被Tessent靜默忽略異步置位/復位觸發(fā)器always (posedge clk or negedge rst_n) begin if (!rst_n) q 1b0; else q d; end問題Tessent默認不支持異步reset的scan insertion。解決方案在RTL中改為同步復位并添加scan bypass邏輯always (posedge clk) begin if (scan_mode) begin q scan_in; // 直接接管scan_in end else if (rst_sync) begin q 1b0; // 同步復位 end else begin q d; end end鎖存器Latch混用某些低功耗設計會用latch代替flop節(jié)省面積。但Tessent 2022.09不支持latch scan insertion。檢查命令grep -n latch *.v發(fā)現(xiàn)后必須重構為flop。黑盒IP未聲明scan接口如某第三方UART IP其.v文件中module uart_top無scan_in/scan_out端口。此時必須聯(lián)系供應商獲取uart_top_scan.v或自行編寫wrappermodule uart_top_wrapper ( input scan_in, output scan_out, // ... other ports ); wire [7:0] ip_scan_in, ip_scan_out; assign ip_scan_in[0] scan_in; assign scan_out ip_scan_out[0]; uart_top uut (.scan_in(ip_scan_in), .scan_out(ip_scan_out), ...); endmodule時鐘門控Clock Gating未隔離wire cg_en; assign cg_en enable clk_en; assign gated_clk cg_en ? clk : 1b0; always (posedge gated_clk) q d;問題Tessent無法在gated_clk上插入scan mux。必須在RTL中提供bypass pathassign gated_clk scan_mode ? clk : (cg_en ? clk : 1b0);實操心得用grep -n always ( *.v | grep -v negedge快速篩選所有觸發(fā)器再逐個檢查reset類型。比等Insertion報錯再debug快10倍。3.2 Clock Domain聲明為什么set_scan_clock_domain必須與RTL物理結構一致Scan chain的可靠性取決于clock domain定義的精確度。Tessent要求每個scan chain必須屬于單一clock domain且domain間必須聲明synchronous relationship。常見錯誤是把邏輯上同源但物理上分頻的clock視為同一domain。例如某SoC有clk_main100MHz和clk_div250MHz二者由同一PLL輸出。新人常寫set_scan_clock_domain -name MAIN_CLK -clock clk_main set_scan_clock_domain -name DIV2_CLK -clock clk_div2這會導致ATPG時兩個domain的scan chain被強制合并capture phase timing違例。正確做法是聲明synchronous relationshipset_scan_clock_domain -name MAIN_CLK -clock clk_main set_scan_clock_domain -name DIV2_CLK -clock clk_div2 set_synchronous_clock -source MAIN_CLK -destination DIV2_CLK -phase_shift 0.0但前提是RTL中clk_div2必須由clk_main經整數(shù)分頻器生成且分頻器代碼中always (posedge clk_main)必須顯式寫出不能用assign clk_div2 clk_main[0];這種hack方式——后者會被Tessent parser識別為independent clock。注意set_synchronous_clock的-phase_shift參數(shù)不是隨意填的。它必須等于實際電路中兩個clock edge的相位差。用示波器實測clk_main上升沿到clk_div2上升沿的時間差再除以clk_main周期得到小數(shù)。填錯會導致ATPG pattern在capture時采樣窗口偏移fault coverage下降15%~30%。3.3 Reset信號同步化兩級同步器的電阻容值不是隨便選的DFT中reset同步不是功能需求而是物理可靠性需求。異步reset在scan shift過程中可能引發(fā)亞穩(wěn)態(tài)導致scan_out數(shù)據(jù)錯亂。必須采用兩級同步器且第二級輸出直接驅動所有flop的rst_n。典型錯誤寫法// 錯誤三級同步器且第三級輸出未直接驅動flop reg sync1, sync2, sync3; always (posedge clk) begin sync1 async_rst; sync2 sync1; sync3 sync2; end assign rst_n ~sync3; // 經過反相器增加delay問題反相器引入額外delay破壞scan timing三級同步器增加不必要的logic depth。正確寫法// 正確兩級同步器輸出直連flop rst_n reg sync1, sync2; always (posedge clk) begin sync1 async_rst; sync2 sync1; end assign rst_n ~sync2; // 但必須確保rst_n net fanout ≤ 5關鍵細節(jié)rst_nnet的fanout必須≤5否則在scan shift時驅動能力不足。若模塊內flop數(shù)量5必須插入buffer tree// 在top level插入 buf #(.DELAY(1)) rst_buf (.in(rst_n), .out(rst_n_buf)); // 然后將rst_n_buf連接到所有flop提示用report_net -fanout rst_n檢查fanout值。超過5必須重構不能靠Tessent自動insert buffer——后者會破壞scan chain controllability。3.4 Scan Enable信號扇出控制為什么必須手工限制到5以內scan_enable是Scan鏈的總開關其信號完整性直接影響所有scan cell的shift操作。Tessent要求scan_enablenet fanout ≤5否則在高頻scan shift時出現(xiàn)rise/fall time超標導致部分flop采樣失敗。常見錯誤在頂層模塊中assign scan_enable top_se;然后將top_se直接連到100個子模塊。Tessent Insertion會報錯WARNING: scan_enable fanout exceeds limit但繼續(xù)運行最終ATPG pattern在ATE上失敗。正確解法采用H-tree分布結構。// Top level wire se_0, se_1, se_2, se_3; buf se_buf0 (.in(top_se), .out(se_0)); buf se_buf1 (.in(top_se), .out(se_1)); buf se_buf2 (.in(top_se), .out(se_2)); buf se_buf3 (.in(top_se), .out(se_3)); // Sub-module A (25 flops) submod_a uut_a (.scan_enable(se_0), ...); // Sub-module B (25 flops) submod_b uut_b (.scan_enable(se_1), ...); // ... etc這樣每個se_xfanout1全局可控。Tessent Insertion時只需set_scan_enable -port scan_enable -signal se_0無需擔心fanout。實操心得用grep -n scan_enable *.v找出所有使用點統(tǒng)計總數(shù)。若5立即啟動H-tree重構。別等Insertion報錯——那時RTL已凍結改起來代價巨大。3.5 Black-box IP處理沒有scan_def文件等于拒絕流片第三方IP如ARM Cortex-Mx、Cadence USB PHY通常提供scan_def文件這是IP廠商保證scan可測性的法律憑證。若缺失必須按以下步驟處理向IP供應商索要郵件模板“Dear [Vendor], Per DFT signoff requirement for [Project Name], we need the scan_def file compatible with Tessent 2022.09. Please provide it by [Date].”驗證文件完整性用read_scan_def ip_name.scan_def命令加載檢查log中是否有INFO: Read 128 scan cells from ip_name.scan_def。檢查clock domain映射scan_def中SCAN_CLOCK_DOMAIN必須與RTL中clock name完全一致包括大小寫。曾有案例因CLK_MAINvsclk_main不匹配導致ATPG時IP內部scan chain被忽略。手動補全缺失項若供應商只提供partialscan_def如缺reset mapping必須在RTL wrapper中硬編碼// In wrapper assign ip_scan_reset (scan_mode) ? rst_n : 1b1;注意沒有scan_def的IPDFT signoff團隊會直接否決。不要相信“我們測試過沒問題”——signoff依據(jù)是文件不是口頭承諾。3.6 Test Point插入assign語句的DFT價值被嚴重低估Test PointTP是提升fault coverage的關鍵杠桿。Tessent ATPG默認coverage約85%插入合理TP后可達98%。而TP本質就是assign語句的巧妙運用。例如某ALU模塊中assign result op_a op_b;若op_a和op_b來自寄存器ATPG很難控制其值。此時插入TP// DFT: insert test point on op_a path assign tp_op_a op_a; // DFT: insert test point on op_b path assign tp_op_b op_b;然后在Tessent中add_test_point -name TP_OP_A -signal tp_op_a -type control add_test_point -name TP_OP_B -signal tp_op_b -type controlATPG會自動生成pattern將tp_op_a/tp_op_b設為特定值從而激發(fā)ALU內部邏輯故障。提示TP插入位置有講究。優(yōu)先選combinational logic輸出端如assign y a b;避免在flop輸出端assign y q;——后者會降低controllability。用report_fanout -hierarchy找高fanout net它們往往是TP最佳候選。3.7 RTL linting用SpyGlass做DFT規(guī)則檢查的3個必啟checkSynopsys SpyGlass是RTL階DFT質量的守門員。必須啟用以下check否則Insertion必然失敗DFT_SCANABLE_FLOP_CHECK檢查所有flop是否滿足scanable條件無異步reset、無latch、clock port為posedge。命令set_check -enable DFT_SCANABLE_FLOP_CHECKDFT_SCAN_ENABLE_FANOUT_CHECK檢查scan_enablenet fanout是否≤5。命令set_check -enable DFT_SCAN_ENABLE_FANOUT_CHECKDFT_CLOCK_DOMAIN_CHECK檢查clock domain聲明是否完整是否存在unconnected clock。命令set_check -enable DFT_CLOCK_DOMAIN_CHECK運行后SpyGlass生成dft_violation.rpt必須100%修復。其中CRITICAL級violations如async_reset_detected必須修改RTLWARNING級如high_fanout_net可接受但需在Insertion階段用-max_fanout參數(shù)壓制。實操心得每天提交RTL前先跑spyglass -f dft_check.tcl。5分鐘發(fā)現(xiàn)的問題比Insertion階段debug 5小時強。4. 實操過程從RTL到ATPG的完整命令流與參數(shù)精解4.1 環(huán)境準備Ubuntu 20.04下Tessent 2022.09安裝避坑指南Tessent安裝不是解壓即用涉及OS底層庫兼容性。Ubuntu 20.04是唯一推薦環(huán)境安裝步驟如下系統(tǒng)預配置# 升級基礎庫 sudo apt update sudo apt upgrade -y # 安裝必要依賴 sudo apt install -y csh tcsh libx11-6 libxext6 libxrender1 libxtst6 libxi6 libsm6 libice6 libfontconfig1 libfreetype6 # 關鍵降級glibcTessent 2022.09要求2.31 # Ubuntu 20.04默認glibc 2.31無需降級若誤裝22.04請重裝系統(tǒng)License配置Tessent license server必須獨立部署。不要用FlexLM通用server必須用Siemens提供的lmgrdtessentdaemon。獲取license.dat文件含HOSTID、FEATURE tessent_testkompress創(chuàng)建/opt/tessent/license目錄放入license.dat啟動servercd /opt/tessent/license ./lmgrd -c license.dat -l lmgrd.log ./tessent -c license.dat -l tessent.log Tessent安裝# 解壓安裝包注意tessent安裝包是tar.gz不是zip tar -xzf tessent_2022.09_linux64.tar.gz -C /opt/ # 設置環(huán)境變量 echo export TESSENT_HOME/opt/tessent_2022.09 ~/.bashrc echo export PATH$TESSENT_HOME/bin:$PATH ~/.bashrc source ~/.bashrc # 驗證 tessent_shell -version # 應輸出2022.09注意網(wǎng)上流傳的“burpsuit new scan 教程”與Tessent無關是Web安全工具切勿混淆。scanner scan 怎么打入空串也是網(wǎng)絡爬蟲術語與IC DFT無任何關聯(lián)。4.2 RTL到NetlistDC綜合腳本的關鍵DFT參數(shù)Synopsys DC綜合不是功能導向而是DFT導向。以下腳本片段是產線驗證過的最小可行配置# dft_dc.tcl set target_library saed32nm_ff.lib set link_library * $target_library # 關鍵啟用DFT mode set_app_var DFT_MODE true set_app_var DFT_SCAN true # 插入scan enable控制邏輯 set_dft_signal -view existing_dft -type ScanEnable -port scan_enable -active_state 1 # 聲明scan reset set_dft_signal -view existing_dft -type Reset -port rst_n -active_state 0 # 設置scan clock set_dft_signal -view existing_dft -type ScanClock -port clk -active_state 1 # 約束scan enable fanout ≤5 set_max_fanout 5 scan_enable # 綜合 compile_ultra -no_autoungroup -no_boundary_optimization # 輸出網(wǎng)表 write_ddc -hierarchy dft_netlist.ddc write_verilog -hierarchy dft_netlist.v運行命令dc_shell-t -f dft_dc.tcl檢查點dft_netlist.v中必須包含scan_in/scan_out端口且所有flop實例化語句中q端口連接正確。提示compile_ultra比compile更穩(wěn)定尤其對scan logic優(yōu)化。-no_autoungroup防止DC自動拆分scan chain。4.3 Scan InsertionTessent Shell核心命令詳解進入Tessent Shell后按順序執(zhí)行# 1. 初始化 set_project -name my_dft_project -technology saed32nm read_ddc dft_netlist.ddc # 2. 定義clock domain必須與RTL一致 set_scan_clock_domain -name MAIN_CLK -clock clk set_scan_clock_domain -name DIV2_CLK -clock clk_div2 set_synchronous_clock -source MAIN_CLK -destination DIV2_CLK -phase_shift 0.0 # 3. 設置scan信號 set_scan_enable -port scan_enable -signal scan_enable set_scan_reset -port rst_n -signal rst_n -active_state 0 # 4. 插入scan chain關鍵參數(shù) create_scan_chain \ -name sc_main \ -style dftdmi \ # 必須用dftdmi支持hierarchical DFT -max_fanout 20 \ # 控制fanout避免布線問題 -max_length 200 \ # 單條chain最大flop數(shù)平衡test time與fault coverage -scan_style dftdmi \ # 與-style一致 -use_dftdmi \ # 啟用DFT-DMI協(xié)議 -disable_clock_gating_propagation \ # 關鍵防止clock gating干擾scan shift -insert_bypass_mux \ # 插入bypass mux提升controllability # 5. 寫出scan netlist write_ddc -hierarchy scan_netlist.ddc write_verilog -hierarchy scan_netlist.v write_scan_def scan_def_file.scan_def注意-disable_clock_gating_propagation是血淚教訓。開啟此選項Tessent會自動切斷clock gating logic與scan chain的連接確保scan shift時clock穩(wěn)定。若不加ATPG pattern在capture phase會因clock被關閉而失敗。4.4 ATPG生成TestKompress壓縮算法參數(shù)調優(yōu)ATPG不是一鍵生成需根據(jù)芯片規(guī)模調整壓縮率# 加載scan netlist read_ddc scan_netlist.ddc # 設置ATPG參數(shù) set_atpg_options \ -fault_model stuck_at \ # 標準stuck-at模型 -compression_ratio 100 \ # 壓縮率100表示100x壓縮即100個scan cycle壓縮為1個 -max_pattern_count 10000 \ # 最大pattern數(shù) -min_fault_coverage 98.0 \ # 目標fault coverage # 運行ATPG run_atpg # 輸出STIL文件ATE機臺格式 write_stil -format stil -output my_chip.stil參數(shù)精解-compression_ratio值越大pattern越少test time越短但fault coverage可能下降。實測32nm工藝下ratio100時coverage97.2%ratio50時coverage98.5%。建議從50起步逐步提高。-min_fault_coverage必須≥95%否則signoff不通過。若達不到需插入更多TP或檢查RTL中未掃描flop。提示run_atpg后檢查atpg_report.txt重點關注Fault Coverage和Pattern Count。若coverage95%立即執(zhí)行report_untestable_faults找出未測試fault并定位RTL問題。4.5 Validation三仿真器交叉驗證的實操腳本Validation不是走過場而是用不同仿真器暴露工具鏈差異# Xcelium驗證腳本xrun.tcl xrun -64bit -f file.f \ -define DFT_MODE \ -input testbench.sv \ -input my_chip.stil \ -sv \ -access rwc \ -gui# VCS驗證腳本vcs_run.sh vcs -full64 -sverilog \ -f file.f \ -define DFT_MODE \ -input testbench.sv \ -input my_chip.stil \ -R# Questa驗證腳本questa.do vsim -64 -c -do do run.do \ -f file.f \ defineDFT_MODE \ testbench \ -input my_chip.stil關鍵檢查點所有仿真器中scan_out波形必須完全一致scan_in輸入與scan_out輸出的bit位對應關系必須1:1無X態(tài)傳播X-propagation實操心得用Python腳本自動比對三個仿真器的VCD波形。若發(fā)現(xiàn)差異立即檢查my_chip.stil中cycle count是否一致——不同仿真器對STIL timing resolution處理不同需統(tǒng)一用-timing_resolution 1ps。5. 常見問題與排查技巧實錄200次debug沉淀的速查表5.1 Insertion階段高頻報錯與根因分析報錯信息根本原因解決方案修復耗時ERROR: No scanable flops foundRTL中flop無scan_in/scan_out端口或always塊含異步reset檢查grep -n always ( *.v重構為同步reset2小時WARNING: scan_enable fanout exceeds limit (12)scan_enablenet fanout5重構為H-tree結構插入buffer1小時ERROR: Cannot find clock domain CLK_MAINset_scan_clock_domain中clock name與RTL不一致用grep -n clk_main *.v確認RTL中實際name15分鐘FATAL: License checkout failed for feature tessent_testkompressLicense server未啟動或license.dat中HOSTID錯誤ps aux | grep lmgrd檢查進程用hostid命令核對HOSTID30分鐘注意所有報錯必須查看完整log而非僅summary。Tessent log中ERROR行上方10行常含真實原因。5.2 ATPG階段coverage不達標問題樹當Fault Coverage 95%時按此順序排查檢查untestable faultsreport_untestable_faults -verbose→ 若顯示uncontrollable說明TP不足插入新TP若顯示unobservable說明scan_out路徑有問題檢查RTL中scan_out是否被assign語句截斷。驗證clock domainreport_scan_clock_domain→ 確認所有flop都被分配到正確domain。若某flop顯示NO_DOMAIN說明其clock未被set_scan_clock_domain覆蓋。檢查black-box IPreport_black_box→ 若IP未被read_scan_def加載coverage必然缺失。立即索要scan_def文件。重跑ATPG with debug optionrun_atpg -debug→ 生成atpg_debug.log查找cannot excite fault at net xxx定位RTL中該net的驅動邏輯。實操心得coverage問題80%源于RTL缺陷而非ATPG參數(shù)。不要盲目調-compression_ratio先fix RTL。5.3 Validation階段波形不一致問題定位三仿真器結果不一致按優(yōu)先級排查現(xiàn)象可能原因驗證方法解決方案Xcelium通過VCS失敗VCS對$setuphold檢查更嚴在VCS中vcslicsetuphold關閉檢查修改RTL timing marginQuesta波形延遲1