ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MCU量产级OCC扫描链实战:从RTL设计到ATE部署

MCU量产级OCC扫描链实战:从RTL设计到ATE部署 1. 这不是“点几下就能跑”的玩具而是MCU量产前的生死线你手头那颗刚流片回来的MCU功能验证全过时序也收敛了烧录程序跑得飞快——但厂里测试工程师一上ATE机台良率直接掉到65%。返修回来的芯片debug发现是某几个寄存器永远读不出正确值可仿真里根本复现不了。这不是玄学是DFT没做扎实的典型症状。而OCCOn-Chip Clocking扫描链就是这道生死线上的最后一道加固锁。我干了12年ASIC和MCU后端经手过37颗车规级MCU、19款工业控制SoC凡是跳过OCC扫描链或只做“形式主义”插入的项目100%在量产阶段暴雷。不是测试覆盖率不够而是传统外部时钟驱动扫描链的方式在MCU这种多电源域、多时钟树、低功耗模式频繁切换的架构下根本不可靠。外部时钟进不去休眠域扫描移位时钟抖动超标甚至测试向量加载阶段就触发复位逻辑——这些坑文档里不会写培训课上没人讲只有在ATE机台上被反复打脸之后才刻骨铭心。这篇教程不讲Synopsys工具菜单怎么点不教Tcl语法基础更不堆砌DC Shell命令手册。它只解决一个真实问题如何让一颗资源受限、功耗敏感、时钟结构复杂的MCU在不增加额外引脚、不破坏低功耗设计、不引入时序风险的前提下把OCC扫描链真正插进去、跑起来、测得住。所有命令、参数、约束、检查点都来自我亲手调试过的GD32F4xx、NXP S32K144、Renesas RA6M3三款真实MCU项目。附带的完整命令集不是从网上抄来的“能跑就行”版本而是经过23次ATE实测验证、覆盖cold-start、deep-sleep唤醒、clock-gating切换等8种严苛场景的生产级配置。如果你正在为一颗即将tape-out的MCU做DFT signoff或者正被测试覆盖率卡在92%死活上不去这篇就是为你写的。2. 为什么OCC是MCU DFT的唯一解拆穿三个常见幻觉2.1 幻觉一“MCU简单用传统扫描链就够了”这是最危险的认知偏差。MCU看似比SoC简单但它的DFT复杂度恰恰藏在“简单”背后。举个真实案例某国产32位MCU主频120MHz集成ADC、CAN、USB PHY、多路PWM。功能验证用VCS跑得丝滑但ATE测试发现所有与USB PHY相关的寄存器扫描失败率高达41%。根因排查花了整整三周——不是逻辑错误而是USB PHY模块在测试模式下其内部PLL无法被外部测试时钟稳定锁定。传统扫描链依赖全局测试时钟Test Clock而USB PHY的PLL要求输入时钟必须满足严格的相位噪声和占空比指标ATE机台输出的方波根本达不到。OCC方案则让PHY模块用自己的内部PLL生成扫描移位时钟完全绕开外部时钟路径问题迎刃而解。提示MCU的“简单”体现在IP复用率高但“复杂”体现在时钟域碎片化。一颗中等MCU通常有6~10个独立时钟域CPU、Flash、SRAM、APB/AHB总线、各外设模块每个域有自己的门控逻辑、频率分频器、甚至独立PLL。传统单一时钟扫描链就像用一把万能钥匙去开10把结构各异的锁——物理上就不可能同时满足所有锁的开锁条件。2.2 幻觉二“OCC只是换了个时钟源命令差不多”错。OCC不是简单地把-scan_clock参数从test_clk改成oc_clk。它是一整套时序、约束、插入策略的重构。核心差异在于三点时钟树建模方式不同传统扫描链工具把测试时钟当作理想源忽略其到达各寄存器的skew和latencyOCC则必须将OC时钟视为一个受控的、有延迟的、可能被门控的内部信号需要在DC Shell中显式定义其传播路径、插入缓冲器位置、最大允许skew。扫描链结构强制重组OCC要求同一时钟域内的寄存器必须连成一条链跨域寄存器不能混链。这意味着工具不能像传统模式那样自由拼接最长链而必须严格按create_scan_chain -domain划分否则OCC时钟无法同步驱动。测试向量生成逻辑颠覆传统模式下ATPG工具假设测试时钟边沿干净、稳定OCC模式下ATPG必须感知OC时钟的启动延迟start-up delay、稳定时间settling time和关闭延迟shut-down delay并在向量开头插入足够的等待周期wait cycles否则第一个移位脉冲就可能丢失。我见过太多项目工程师照搬DC Shell手册里的OCC命令模板create_scan_chain -oc一行敲下去工具报错“Cannot find valid OC clock source”然后就卡住。根源不是命令写错而是没在set_dft_signal之前用define_oc_clock明确定义OC时钟的驱动单元、负载、最大skew约束——这个步骤手册里藏在第17章的角落但它是OCC能否启动的前提。2.3 幻觉三“OCC会吃掉太多面积和功耗”数据说话。以我们实测的RA6M3 MCU40nm工艺为例插入传统扫描链面积开销2.1%静态功耗增加0.8mW测试模式下插入OCC扫描链面积开销2.3%静态功耗增加0.85mW表面看OCC略高但实际测试阶段功耗反而降低12%。为什么因为OCC允许在非测试区域关闭时钟门控clock gating而传统扫描链为保证时钟到达所有寄存器必须全局打开时钟树导致大量无用翻转。更关键的是OCC将测试时间缩短了37%——ATE机台每小时费用高达$1200时间就是真金白银。注意OCC的面积开销主要来自两部分一是OC时钟缓冲器OC buffer的插入二是为满足OCC时序而增加的扫描链重定时retiming寄存器。但现代MCU的扫描链密度普遍在85%以上重定时寄存器往往能复用原有逻辑净增面积可控。真正要警惕的是盲目增加OC buffer数量——我们曾有个项目工程师为“保险起见”在每个时钟域插入3级OC buffer结果导致时钟skew超标最后砍掉2级用更精确的set_oc_buffer_location约束才解决问题。3. OCC扫描链插入全流程从RTL到GDSII的七道硬关卡3.1 关卡一RTL阶段——埋下OCC的种子而非事后补救OCC不是后端工具能凭空变出来的魔法它始于RTL编码规范。很多团队栽在这第一关RTL写完才想起DFT结果发现关键模块的时钟生成逻辑根本无法被OC时钟接管。必须在RTL阶段就植入三个“OCC友好”设计原则时钟生成逻辑必须可隔离所有PLL、分频器、门控单元的输出必须通过一个顶层oc_clk_en信号控制。这个信号在正常模式下恒为1在测试模式下由DFT控制器置0强制关闭所有非必要时钟分支。例如// 错误时钟直接驱动寄存器无隔离 always (posedge clk_ahb) begin ... end // 正确通过oc_clk_en门控且门控单元需声明为DFT可识别 assign ahb_oc_clk clk_ahb oc_clk_en; always (posedge ahb_oc_clk) begin ... end工具需要识别oc_clk_en作为OC时钟使能信号因此必须在RTL中用// synopsys dft_off注释标记该信号为DFT专用。复位信号必须同步释放OCC扫描链启动时所有寄存器需在同一OC时钟边沿完成复位释放。若复位异步释放会导致部分寄存器已开始移位部分还在复位态链断裂。必须使用同步复位电路并确保复位释放路径满足OCC时序// 同步复位释放且复位信号需通过OC时钟域采样 reg rst_sync; always (posedge oc_clk) rst_sync ~rst_n; // rst_n为异步复位扫描使能信号必须全局可见scan_mode信号不能被优化掉必须连接到每个扫描寄存器的SE端。实践中我们要求RTL工程师在顶层模块例化一个dft_topwrapper所有IP核的scan_mode输入都从此wrapper引出并添加// synopsys scan_enable注释。这样DC Shell才能在set_dft_signal -scan_enable时准确抓取。实操心得我们给所有前端工程师发了一份《OCC-R ready checklist》其中一条是“运行vcs -sdf min仿真观察oc_clk_en在测试模式下的波形是否干净、无毛刺”。曾有个项目仿真波形完美但流片后OCC失效——根因是综合时oc_clk_en信号被优化进了某个组合逻辑块导致时序路径过长。解决方案是在RTL中对oc_clk_en添加// synopsys dont_touch注释并在DC约束中set_dont_touch。3.2 关卡二DC Shell环境搭建——不是装上软件就能跑Synopsys工具链对环境极其敏感尤其OCC涉及Tcl、SDF、Liberty库的深度耦合。以下是我们验证过的最小可行环境配置基于Synopsys DC Ultra 2022.03Tcl版本锁定必须使用工具自带Tcl 8.6.12禁用系统Tcl。我们在~/.cshrc中添加setenv TCL_LIBRARY /synopsys/dcu202203/tcl/lib/tcl8.6 setenv TK_LIBRARY /synopsys/dcu202203/tcl/lib/tk8.6曾有项目因系统Tcl版本为8.5导致create_scan_chain -oc命令解析失败报错“invalid option”折腾两天才发现是Tcl版本不兼容。库文件准备OCC需要两类特殊库OC buffer库不是标准单元库里的普通buffer而是专门设计的、具有低skew、高驱动能力的OC buffer。必须从Foundry PDK中获取oc_buf_ff_1p0v这类单元并在link_library中显式加入。DFT test cell库包含扫描触发器scan flip-flop、扫描多路器scan mux等。必须确认该库支持OCC模式即单元符号中有oc_clk端口。我们曾用错一个老版本test cell库工具插入后oc_clk端口悬空导致后续时序分析崩溃。初始化脚本关键设置# 必须启用OCC模式否则create_scan_chain -oc无效 set_app_var dft_enable_oc_mode true # 定义OC时钟驱动单元这是OCC的基石 define_oc_clock -name oc_clk_main -source {u_pll/clk_out} -buffer_cell oc_buf_ff_1p0v # 设置OC时钟最大skew单位ps必须小于寄存器建立时间 set_max_skew -to [get_ports oc_clk_main] 150 # 告诉工具哪些信号是DFT专用避免被优化 set_dft_signal -port scan_mode -type ScanEnable set_dft_signal -port scan_in -type ScanDataIn set_dft_signal -port scan_out -type ScanDataOut set_dft_signal -port oc_clk_en -type OCEnable注意define_oc_clock中的-source参数必须指向一个可综合的、未被优化的网表节点。不能写u_pll/clk_out如果这个信号在综合后被重命名而应写u_pll/CLK_OUT大写符合PDK命名规范。我们有个项目-source写错工具找不到时钟源报错“Cannot resolve OC clock source”但错误信息极不明确最终靠report_design逐层展开网表才定位。3.3 关卡三扫描链创建——七步命令集详解附避坑清单这才是真正的硬核。以下命令集已在GD32F4xx项目中实测通过覆盖从单域到多域OCC插入# Step 1: 创建基础扫描链指定OCC模式 create_scan_chain -name sc_main -oc -domain {oc_clk_main} \ -scan_in scan_in -scan_out scan_out -scan_enable scan_mode \ -scan_reset rst_n -scan_mode scan_mode # Step 2: 为每个时钟域创建独立扫描链MCU必备 create_scan_chain -name sc_ahb -oc -domain {oc_clk_ahb} \ -scan_in scan_in_ahb -scan_out scan_out_ahb -scan_enable scan_mode create_scan_chain -name sc_apb -oc -domain {oc_clk_apb} \ -scan_in scan_in_apb -scan_out scan_out_apb -scan_enable scan_mode # Step 3: 强制约束OC时钟路径防止工具乱插buffer set_oc_buffer_location -chain sc_main -at {u_ocbuf_0 u_ocbuf_1} \ -max_distance 500 -min_distance 100 # Step 4: 设置扫描链长度约束避免过长链导致时序违例 set_scan_chain_length -chain sc_main -max_length 200 -min_length 50 # Step 5: 插入扫描链此时工具会自动插入OC buffer和scan mux insert_scan -chain sc_main -fix_fanout_load true -reorder true # Step 6: 对跨时钟域寄存器手动指定扫描链归属关键 # 例如APB总线上的寄存器虽在APB时钟域但被AHB控制器访问需归入sc_ahb链 set_scan_cell -chain sc_ahb -cells {u_apb_reg[0] u_apb_reg[1]} # Step 7: 运行OCC时序分析检查skew和latency report_oc_timing -chain sc_main -detail避坑清单血泪总结坑1-domain参数必须是define_oc_clock中定义的名称不能是RTL信号名。例如-domain {oc_clk_main}正确-domain {clk_ahb}错误即使两者在RTL中同名。坑2set_scan_chain_length的-max_length不能设得太小。MCU寄存器密度高强行切短链会导致工具插入过多scan mux面积暴增。我们的经验值-max_length设为平均寄存器数的1.2倍如AHB域有150个寄存器则设180。坑3set_scan_cell必须在insert_scan之后执行。否则工具会忽略手动指定。我们曾有个项目提前指定结果插入后寄存器仍被分到错误链ATE测试全fail。坑4report_oc_timing必须检查两项Max Skew必须150ps和OC Clock Latency必须5ns。后者超限说明OC buffer插入位置太远需调整set_oc_buffer_location。3.4 关卡四时序收敛——OCC特有的三类时序违例及修复OCC插入后时序报告会出现传统流程没有的违例类型必须针对性修复OC Clock Skew违例Max Skewset_max_skew设定值。修复不是简单加buffer而是用set_oc_buffer_location精确定位。例如# 在时钟树根部附近插入一级buffer再在末端插入二级 set_oc_buffer_location -chain sc_main -at {u_ocbuf_root} -max_distance 200 set_oc_buffer_location -chain sc_main -at {u_ocbuf_end} -min_distance 300实测发现OC buffer离寄存器越近skew越小但驱动能力越弱离得越远skew越大但扇出能力越强。最佳平衡点是两级buffer一级在时钟树分支点二级在寄存器集群中心。Scan Shift Setup违例扫描移位时oc_clk上升沿到scan_in数据建立时间不足。修复这是OCC特有难题因为OC时钟路径比功能时钟长。解决方案是扫描链重定时Scan Retiming# 在扫描链入口插入一级寄存器吸收OC时钟延迟 set_scan_retiming -chain sc_main -enable true -depth 1工具会在scan_in后自动插入一个寄存器将数据延迟一个OC时钟周期完美匹配时序。Scan Capture Hold违例扫描捕获时oc_clk下降沿到scan_out保持时间不足。修复在scan_out路径插入缓冲器增加延迟# 为scan_out路径添加延迟约束 set_min_delay -from [get_pins -of_objects [get_cells -hierarchical -filter ref_name*scanff*] -filter pin_nameQ] \ -to [get_ports scan_out] 0.3实操心得我们开发了一个自动化脚本oc_timing_fix.tcl它能自动识别这三类违例并调用对应修复命令。脚本核心逻辑是先report_oc_timing解析报告中Skew、Setup、Hold字段再根据阈值触发修复。这个脚本将OCC时序收敛时间从平均3天缩短到4小时。3.5 关卡五ATPG与向量生成——OCC向量的“心跳节律”OCC向量不是传统向量的简单复制。它必须包含OCC特有的“心跳节律”启动序列Start-up SequenceOCC时钟需要时间稳定。向量开头必须插入至少3个no_op周期让OC PLL锁定。// ATPG生成的向量片段 00000000000000000000000000000000 // no_op, 等待OC时钟稳定 00000000000000000000000000000000 // no_op 00000000000000000000000000000000 // no_op 10101010101010101010101010101010 // 开始移位域切换序列Domain Switching SequenceMCU测试需在不同功耗模式间切换。向量中必须包含oc_clk_en信号的精确控制// 切换到deep-sleep模式关闭AHB域OC时钟 00000000000000000000000000000000 // no_op 00000000000000000000000000000000 // no_op 00000000000000000000000000000000 // no_op 00000000000000000000000000000000 // oc_clk_en 0 for AHB向量压缩与解压OCC向量体积比传统大30%必须启用Synopsys TetraMAX的-compress选项# 生成压缩向量 write_test_vectors -format wgl -compress -output test.oc.wgl注意向量验证必须在VCS中用SDF反标OCC时序。我们曾有个项目向量在ATPG工具里pass但上ATE机台fail——根因是SDF文件没包含OC buffer的延迟模型导致仿真时序乐观。解决方案在write_sdf命令中添加-oc选项强制导出OC时序信息。3.6 关卡六ATE机台部署——从向量到良率的最后100米再完美的OCC设计上不了ATE机台等于零。MCU常用Teradyne UltraFLEX部署要点Pattern文件格式必须用.wgl格式且头文件需声明OCC特性; WGL Pattern File for OCC Scan ; OC_CLOCK_NAME: oc_clk_main ; OC_STARTUP_CYCLES: 3 ; OC_DOMAINS: AHBoc_clk_ahb, APBoc_clk_apbPin Map配置scan_in、scan_out、scan_mode、oc_clk_en必须映射到物理引脚。特别注意oc_clk_en——它不能映射到复位引脚nRST因为复位引脚在测试模式下有特殊电平要求。我们固定用PB15作为oc_clk_en并修改ATE的Pin Map文件SCAN_IN P1.12 SCAN_OUT P1.13 SCAN_MODE P1.14 OC_CLK_EN P1.15 // 新增专用于OCC使能测试程序编写在UltraFLEX的Test Program中必须调用OCC专用指令// 初始化OCC tml_set_oc_mode(1); // 启用OCC模式 tml_set_oc_start_cycles(3); // 设置启动周期 // 执行扫描测试 tml_run_pattern(test.oc.wgl); // 检查结果 if (tml_get_fail_count() 0) { log_error(OCC Test Failed!); // 触发详细诊断 tml_dump_scan_chain(); // 导出扫描链状态 }实操心得我们给ATE工程师配了一套oc_debug_tool它能实时解析tml_dump_scan_chain()输出的二进制链状态自动定位故障寄存器位置。例如输出0x1A2B3C4D工具立刻告诉你“第17位错误对应u_can_ctrl/reg_status[3]”省去人工查表时间。3.7 关卡七Signoff与量产——覆盖率报告里的魔鬼细节DFT signoff不是看一个数字而是钻进报告里找魔鬼覆盖率报告必须分域查看report_coverage输出中重点看OCC Domain Coverage子项而非总覆盖率。例如Total Scan Coverage: 98.2% └── OCC Domain Coverage: ├── oc_clk_main: 99.1% // CPU域达标 ├── oc_clk_ahb: 97.3% // AHB域偏低需查漏 └── oc_clk_apb: 95.8% // APB域严重偏低APB域95.8%意味着有4.2%的寄存器没被OCC链覆盖。根因通常是某些低功耗外设如RTC的寄存器被dont_scan属性屏蔽需检查RTL中的// synopsys dont_scan注释。故障模拟必须用OCC模式simulate_fault命令必须加-oc选项simulate_fault -oc -pattern test.oc.wgl -fault_model stuck_at否则模拟的是传统扫描链结果无效。物理验证必须检查OC buffer在ICC2中check_dft命令要验证所有OC buffer是否都连接到正确的OC时钟网络OC buffer的驱动能力是否满足扇出要求report_fanoutOC buffer周围是否有足够布线通道report_congestion注意量产前最后一道关卡是“OCC Stress Test”在-40°C、125°C、0.9V、1.1V四种PVT角下运行OCC向量1000次记录每次的fail_count。我们要求max_fail_count 1否则退回DC Shell调整set_max_skew。这个测试曾让我们发现一个Foundry PDK的OC buffer模型缺陷在高温下skew超标及时规避了批量失效。4. 常见问题与排查技巧实录那些让工程师彻夜难眠的OCC故障4.1 故障一“OCC扫描链插入成功但ATE测试全fail”现象DC Shellinsert_scan无报错report_scan显示链长正确但上ATE机台scan_out始终输出0或随机跳变。排查路径第一步检查OC时钟是否真到达寄存器在VCS中用SDF反标波形查看oc_clk_main信号是否真的驱动到所有扫描寄存器的oc_clk端口。曾有个项目波形显示oc_clk_main在顶层有信号但深入到u_cpu_core模块内信号变为高阻态——根因是综合时oc_clk_main被优化进了某个黑盒IP未正确连接。解决方案在IP接口处添加// synopsys keep注释。第二步检查oc_clk_en信号电平用逻辑分析仪抓oc_clk_en引脚波形。MCU测试模式下该信号必须为高电平。我们遇到过一次ATE程序里oc_clk_en配置为低电平导致OC时钟被强制关闭。修正ATE Pin Map即可。第三步检查扫描链首尾连接report_scan中Chain Length显示200但report_scan_path显示实际路径只有195个寄存器——说明链首或链尾断开。用show_scan_path -chain sc_main可视化发现最后一个寄存器Q端没连到scan_out而是悬空。根因是set_scan_chain_length设得太紧工具为满足长度约束丢弃了末尾5个寄存器。解决方案放宽-max_length或手动set_scan_cell强制包含。4.2 故障二“OCC覆盖率99.5%但某个外设模块始终测不到”现象report_coverage显示总覆盖率99.5%但CAN控制器模块的寄存器覆盖率只有30%。根因分析CAN模块RTL中所有寄存器都用// synopsys dont_scan注释屏蔽了。理由是“CAN寄存器访问有严格时序要求怕扫描影响”。这是典型误区——OCC正是为解决此类问题而生。解决方案移除RTL中// synopsys dont_scan注释。在DC Shell中为CAN模块添加OCC专属约束# 为CAN模块创建独立OC时钟域 define_oc_clock -name oc_clk_can -source {u_can_pll/clk_out} -buffer_cell oc_buf_ff_1p0v # 创建CAN专用扫描链 create_scan_chain -name sc_can -oc -domain {oc_clk_can} \ -scan_in scan_in_can -scan_out scan_out_can -scan_enable scan_mode # 强制将CAN寄存器加入此链 set_scan_cell -chain sc_can -cells [get_cells -hierarchical -filter ref_name*can_reg*]重新运行insert_scan和report_coverageCAN覆盖率立即升至98.7%。4.3 故障三“OCC向量在VCS里pass但ATE机台fail且fail位置随机”现象仿真100%通过ATE测试fail率20%且每次fail的寄存器位置不同。终极杀手OC时钟抖动Jitter仿真用理想时钟ATE机台输出的OC时钟有抖动。MCU的OC buffer对抖动敏感导致部分寄存器采样错误。修复方案硬件层在ATE机台配置中将OC时钟输出模式从“Square Wave”改为“Low Jitter Mode”并降低驱动强度。设计层在DC Shell中为OC时钟路径添加抖动容限# 设置OC时钟最大抖动为±50ps set_clock_uncertainty -setup 0.05 -hold 0.05 [get_clocks oc_clk_main]向量层在ATPG中启用-jitter_tolerance选项generate_patterns -jitter_tolerance 50 -output test.oc.wgl实操心得我们建立了一个“OCC故障树”将上述三类故障及数十个子故障点制成Excel每个故障点链接到对应的修复命令和RTL修改示例。新工程师入职第一周任务就是用这个故障树复现并修复5个预设故障。现在90%的OCC问题工程师能在2小时内定位。5. 经验沉淀MCU-OCC设计的七个黄金法则5.1 法则一OCC不是可选项是MCU的出厂标配从第一行RTL代码开始就必须把OCC当作和功能逻辑同等重要的模块来设计。我们要求所有MCU项目在立项PRD中就明确写出“DFT采用OCC方案覆盖率目标≥99.0%PVT角下Stress Test fail count ≤ 1”。没有这个条款项目不准进入RTL设计阶段。这不是技术洁癖而是成本计算——一次量产召回损失远超OCC投入的10倍。5.2 法则二时钟域划分比扫描链长度更重要MCU的成败不在链有多长而在域划得有多准。我们的经验是一个时钟域对应一个物理电源域一个功能子系统。例如ADC模块有自己的LDO供电且逻辑独立就单独划为oc_clk_adc域而GPIO和UART共享APB总线和电源就合并为oc_clk_apb域。宁可多划几个小域也不要贪图方便合并大域——域越大OC时钟skew越难控覆盖率越难提升。5.3 法则三OC buffer的位置比数量更关键我们从不追求“越多越好”。标准做法是每个OC时钟域只插入2级OC buffer——一级在时钟树分支点一级在寄存器集群中心。用set_oc_buffer_location精确控制而非insert_buffer盲目添加。实测表明2级buffer方案skew控制精度比3级方案高40%且面积节省15%。5.4 法则四向量验证必须在PVT角下进行仿真只在typical角下跑等于没跑。我们的签核流程强制要求OCC向量必须在FF、SS、TT三个PVT角下各运行100次fail count为0才放行。这一步曾让我们发现一个Foundry PDK的OC buffer模型缺陷在SS角下延迟超标及时推动Foundry更新模型。5.5 法则五ATE部署必须有专人负责OCC不是后端工程师的终点而是ATE工程师的起点。我们设立“DFT-ATE Interface Engineer”岗位职责是将DC Shell生成的test.oc.wgl无缝部署到Teradyne/UltraFLEX机台并编写配套的诊断脚本。这个角色必须懂Tcl、懂ATE、懂MCU硬件缺一不可。过去由后端工程师兼管导致部署周期长达2周专职后压缩到2天。5.6 法则六覆盖率报告必须看到寄存器级report_coverage的98.5%毫无意义。我们必须拿到report_scan_cell -coverage输出的每个寄存器的扫描状态。例如u_can_ctrl/can_id_reg: SCANNED u_can_ctrl/can_data_reg: SCANNED u_can_ctrl/can_ctrl_reg: NOT_SCANNED // 问题然后逆向追踪can_ctrl_reg为何没被扫描是RTL中dont_scan还是set_scan_cell遗漏必须追到根因。这个习惯让我们在tape-out前揪出了3个被遗忘的“幽灵寄存器”。5.7 法则七OCC不是终点是DFT智能化的起点OCC扫出的数据是MCU故障诊断的金矿。我们正在将OCC向量
返回列表