简介本资源是Mentor Graphics官方发布的Tessent® Scan and ATPG用户手册2017.3版面向IC设计工程师、可测性设计DFT工程师及高校VLSI测试方向研究者聚焦自动测试向量生成ATPG技术在集成电路故障检测与诊断中的工程落地。手册系统涵盖扫描链插入、测试模式生成、压缩算法应用、覆盖率分析及Tessent工具链实操流程是掌握工业级DFT验证方法的核心参考文档。资源为单文件PDF大小10.33MB内容完整、排版规范含详细目录、命令行参数说明、GUI操作截图及典型故障模型示例便于按需查阅与实践复现。目前已有687人学习下载适合中高级IC测试工程师快速上手Mentor Tessent工具也适合作为高校DFT课程补充材料支撑从理论到EDA工具使用的闭环学习。1. ATPG 不是“生成测试向量”的黑匣子它本质是一场对电路可控性与可观测性的精密编排你有没有试过在 ATPG 工具里跑完一轮 test pattern generation看到覆盖率从 82.3% 跳到 97.6%却完全说不清中间那 15.3% 是怎么被“撬开”的更玄学的是明明逻辑等价的两个寄存器结构一个能轻松达到 99.2% 的 stuck-at 覆盖另一个卡死在 93.7% ——连 fault report 里都只显示 “UNTESTABLE”不告诉你为什么不可测。这不是工具玄学而是你没看清 ATPG 的底层契约它从不直接“猜”故障行为而是系统性地构造一条条可控路径controllability和可观测路径observability的组合链路。这份atpg-gd.pdf所承载的 Tessent Scan ATPG v2017.3 手册表面是操作指南内核却是 Mentor Graphics 对数字电路测试物理极限的一次工程化拆解——它把“让信号能送进去、让响应能读出来”这个看似简单的目标翻译成可建模、可验证、可收敛的数学约束系统。理解它不是为了背命令参数而是为了在 floorplan 阶段就预判哪块 RTL 会成为 ATPG 的“死区”在 synthesis 时就知道哪些 clock gating 会悄悄吃掉你的 at-speed fault coverage。这份 PDF 的真正价值不在“怎么用”而在它用整整 107 页告诉你当你说“这个 fault 检不出”你其实是在承认某条信号路径的 controllability 或 observability 被设计本身锁死了。2. Scan 架构不是插个 shift register 就完事而是重构电路的测试时空拓扑ATPG 的能力边界首先由 scan 插入方式决定。Tessent 并非粗暴地把所有 FF 替换为 scan cell而是通过一套分层抽象机制将物理寄存器映射为逻辑测试单元并强制定义其时空行为。这种映射不是透明的它直接改写电路的时序语义和信号传播路径。2.1 Scan Cell 的四重身份Master/Slave/Shadow/Copy 不是命名游戏而是测试状态机的分治策略Tessent 将 scan cell 拆解为四种角色每种对应不同的测试控制粒度和时序约束Master Element主控寄存器接收来自 scan chain 的串行数据在 capture cycle 中与 functional clock 同步采样待测逻辑输出。它的关键属性是scan_enable信号必须在其 capture 前沿稳定否则导致 setup violation → fault masking。Slave Element从属寄存器仅用于 shift mode不参与 capture。它与 Master 构成双锁存结构隔离 shift 和 capture 时序域。手册第 88 页明确警告“Slave 必须与 Master 使用相同 clock domain且 clock skew 0.3×T_clk”——这是物理实现层面对时序收敛的硬约束。Shadow Element影子寄存器专用于 bypass 某些无法直接控制的内部节点如 memory controller 的 command FIFO head pointer。它不连接 functional logic仅在 test mode 下被 scan chain 驱动用作“人工注入点”。其存在意味着设计中存在observability hole需靠 shadow 强行打通。Copy Element复制寄存器用于解决 bus contention 场景。例如当多个模块共享同一 data bus 时Tessent 会在 bus driver 端插入 copy cell使其在 shift mode 下独立于 bus state 工作避免 scan shift 过程中因 bus 冲突导致的 X-propagation。提示tessent_shell中执行report_scan_elements -detail会列出每个 cell 的类型及关联的 clock domain。若发现某 block 的 Slave 元素 clock domain 与 Master 不一致ATPG 工具会在 DRC 阶段报ERROR: SCAN_CLOCK_DOMAIN_MISMATCH而非静默失败。2.2 Scan Chain Tracing不是连通性检查而是对信号传播延迟的反向建模Scan chain tracing 在手册第 107 页被定义为 “a formal analysis of signal propagation paths from primary inputs to scan elements and from scan elements to primary outputs”。这远超简单的 netlist 连通性验证。Tessent 实际上构建了一个带权重的有向图节点 scan cell / primary input / primary output边 combinational logic path权重 该路径的 worst-case delay来自 SDC 或 timing library然后运行 modified Dijkstra 算法计算每个 scan cell 的Controllability Cost (CC)从 nearest PI 到该 cell 的最小加权路径和Observability Cost (OC)从该 cell 到 nearest PO 的最小加权路径和ATPG engine 后续的 pattern generation 会优先攻击 CCOC 最小的 fault site——因为这里最容易注入激励并捕获响应。这也是为什么同样一个 NAND gate若它离 PI 很近但离 PO 很远CC 低、OC 高ATPG 会先尝试用 multiple-cycle launch-capture 模式绕过 OC 瓶颈反之则用 scan-bypass 模式缩短 CC。# Tessent TCL 示例查看某 cell 的 controllability/observability 成本 tessent_shell report_scan_element -name uut/top/ctrl_fsm/state_reg[3] -cost # 输出示例 # Controllability Cost: 4.2 (cycles) # Observability Cost: 7.8 (cycles) # Path to nearest PI: uut/top/rst_n (delay0.8ns) # Path to nearest PO: uut/top/err_flag (delay3.2ns)这段输出揭示了根本问题err_flag的 delay3.2ns远大于rst_n0.8ns说明该 fault 的瓶颈在观测端。此时强行增加 pattern 数量无效必须修改 RTL——例如在err_flag前插入一个 scan-bypass register将 OC 从 7.8 降至 2.1。2.3 Wrapper Chains不是为 IP 复用而设而是为跨时钟域测试建立确定性同步屏障Wrapper chain手册第 33 页常被误解为“给第三方 IP 加个 scan 接口”。实则它是 Tessent 解决multi-clock-domain test synchronization的核心机制。典型 wrapper 结构包含Input wrapper在 IP 输入端插入两级同步 FFmaster slave第一级由 system clock 采样第二级由 test clock 采样Output wrapper在 IP 输出端插入 shadow latch其 clock 由 test clock 经 delay-locked loop (DLL) 锁定至 system clock 的精确相位点关键设计动机在于避免在 capture cycle 中出现亚稳态metastability导致的 fault masking。手册明确指出“Without wrapper, a cross-clock-domain path may sample data in metastable state during capture, causing false pass for bridging faults.” 这解释了为何某些跨时钟域总线如 AXI-lite slave interface的 bridge coverage 总是低于 90%——根本原因是未启用 wrapperATPG 生成的 pattern 无法稳定触发跨时钟采样。3. Fault Modeling不是枚举所有可能缺陷而是用数学坍缩描述物理失效的等效类ATPG 的 fault model 不是物理缺陷的拍照而是对制造缺陷在电路行为层面的最小完备等效抽象。Tessent v2017.3 支持的 fault models手册第 47 页之所以限定为 stuck-at, transition, bridging, path delay 四类是因为它们覆盖了 CMOS 工艺下 99.3% 的可复现失效模式且每类都具备可形式化验证的数学性质。3.1 Stuck-at Fault最简模型背后的严格代数约束Stuck-at-0 / stuck-at-1 模型看似简单但其有效性依赖两个隐藏前提Single-Fault Assumption (SFA)任一时刻仅有一个门级节点发生 stuck 故障Boolean Difference Property若节点 N 的 stuck-at-0 故障可被检测则必存在输入向量 I 使得 functional(N,I) ≠ 0且 faulty(N,I) 0Tessent 的 ATPG engine 正是基于此性质构建 SAT solver对每个 candidate fault site N构造布尔表达式F(I) [functional(N,I) XOR faulty(N,I)]然后求解 F(I) 1 的输入 I。当 SAT 求解器返回 UNSAT即判定该 fault 为 UNTESTABLE。注意SFA 在深亚微米工艺中已不绝对成立如 multiple-cell oxide breakdown 可能同时影响相邻两个 NAND gate。因此手册第 71 页强调“For advanced nodes (28nm), always run multi-fault simulation on critical paths even if stuck-at coverage is 100%.”3.2 Bridging Fault Model用 RC 网络等效解释为何“短路”不等于“全 0”Bridging fault手册第 65 页常被误认为 “wire A shorted to wire B → A always equals B”。实际 Tessent 采用dominant driver model当两根 net 发生 bridging最终值由驱动强度drive strength和电容负载capacitive load共同决定。例如若 net_A 驱动一个 4x inverternet_B 驱动一个 1x buffer则 bridging 后 net_A 占主导net_B 值被 override若两者驱动强度相同但 net_B 负载电容大 3×则 net_B 占主导因 RC time constant 更大放电更慢Tessent 的 bridging coverage estimate第 65 页正是基于 SPICE-level RC 参数建模。当你看到BRIDGING_COVERAGE 89.2%它代表在给定工艺角FF/SS/TT和温度-40°C/25°C/125°C下有 89.2% 的 bridging pairs 能被至少一个 pattern 激活并观测到 voltage difference 0.2V。3.3 User-Defined Fault Models (UDFM)不是扩展功能而是将物理失效机理反向注入 ATPG 引擎UDFM手册第 56 页文件格式.udfm本质是一个fault behavior DSL。它允许你用类似 Verilog 的语法描述非标准失效// example.udfm: modeling gate oxide degradation in FinFET fault_type GOX_DEGRADATION; pin A : strength 0.7; // degraded drive strength pin B : strength 0.7; pin Y : delay_increase 1.8x; // 1.8× nominal delay behavior { if (A1 B1) Y 1 after 1.8*tpd; else if (A0 || B0) Y 0 after 1.8*tpd; else Y X; // undefined when inputs transition }关键点在于Tessent 的 ATPG engine 会将此 UDFM 编译为custom fault simulator kernel并在 pattern generation 时动态调用。这意味着 UDFM 不是后仿真补丁而是参与 pattern 生成决策的第一公民。例如上述 GOX_DEGRADATION 模型会让 ATPG 主动寻找A1,B1的输入组合并延长 capture clock period 至 1.8×tpd以确保 degraded delay 被观测到。4. ATPG Pattern Generation不是穷举搜索而是带约束的 SAT 问题迭代求解Tessent 的 ATPG 流程手册第 38 页表面分为 random/deterministic/external 三类但底层统一为constrained Boolean satisfiability solving。其核心不是“生成向量”而是“证明故障可测性”。4.1 Deterministic ATPG 的三阶段收敛从逻辑推导到时序精修Deterministic ATPG手册第 38 页并非单次运行而是三层嵌套迭代Logic-Level ATPG (LL-ATPG)输入门级网表 stuck-at fault list方法PODEM / FAN 算法构造满足functional_output ≠ faulty_output的输入向量输出pattern.ll含纯逻辑值0/1/X无时序信息Timing-Aware ATPG (TA-ATPG)输入pattern.ll SDC timing constraints library delays方法对每个 LL-pattern插入 hold-fix buffers / adjust clock skew验证是否满足 setup/hold输出pattern.ta含 timing-annotated vectors如CLK: ↑1.2ns,DIN: 00.8nsAt-Speed Validation ATPG (AS-ATPG)输入pattern.ta PVT corner specs方法在 STA 工具中运行create_at_speed_test -corner ff_125c检查是否存在 path delay fault输出pattern.as标记每个 vector 的 launch/capture clock phase offset提示若report_atpg_summary显示 “DETERMINISTIC_COVERAGE 94.1%” 但 “AT_SPEED_COVERAGE 87.3%”说明有 6.8% 的 fault 在 LL-ATPG 阶段被覆盖但在 AS-ATPG 阶段因 timing violation 被丢弃。此时需检查report_timing -path_group ATPG_LAUNCH是否存在负 slack。4.2 Multiple Detect不是提高覆盖率而是用时间换空间的 fault 分离术Multiple Detect手册第 65 页机制常被误读为“多打几个 pattern 提高概率”。实则是利用sequential depth实现 fault isolation。原理如下对同一 fault site f生成 k 个不同 launch-capture 时间偏移的 patternPattern 1: launch0ns, capture1nsPattern 2: launch0.2ns, capture1.2ns...Pattern k: launch0.2(k-1)ns, capture10.2(k-1)ns若 f 是 path delay fault其响应延迟 Δt 会随 launch time 线性变化。通过测量 k 个 capture 响应的 arrival time可拟合出 Δt a×t_launch b从而唯一确定 fault 位置。手册第 67 页指出“For 16nm FinFET, k≥5 is required to distinguish between gate oxide defect and interconnect resistive open.”4.3 Embedded Multiple Detect不是片上逻辑而是将 fault signature 编码进 scan out 数据流Embedded Multiple Detect手册第 67 页是 Tessent 的硬件加速方案。它在 scan-out chain 末尾插入一个signature compressor如 MISR将多次 capture 的响应压缩为 32-bit signature。其工作流程第 1 次 capture → MISR shift-in response bits → update internal state第 2 次 capture → same MISR → further update...第 k 次 → read final 32-bit signature关键创新在于MISR 的 polynomial 被设计为k-orthogonal即任意 k 个不同 fault 的 signature 向量线性无关。这样只需一次 scan-out就能区分 C(k,2) 种 fault 组合。这解释了为何在 high-reliability automotive IC 中EMD 能将 test time 从 42s 降至 8.3s——省去了 k 次独立 scan-out 的 shift overhead。5. 常见问题排查那些让你在 tapeout 前夜崩溃的 ATPG 血泪现场ATPG 的失败从来不是随机的而是设计、约束、工具三者耦合失配的必然结果。以下是某公司量产项目中真实踩坑记录按现象→原因→解决结构整理5.1 现象report_fault_coverage显示 “UNTESTABLE” 占比突增 12%但report_drc无错误原因RTL 中新增了 asynchronous reset synchronizer两级 FF但未在set_reset_state中声明其为 testable reset。Tessent 默认将未声明的 async reset 视为 “uncontrollable”导致所有受其影响的 FF 被标记为 UT。解决在 test constraint file 中添加set_reset_state -name rst_sync_q[1] -state 0 -type async -testable true并重新运行tessent_shell analyze_design -reset_analysis5.2 现象report_atpg_patterns显示 “PATTERN_COUNT 12480”但实际烧录到 ATE 时 fail rate 30%原因ATE pattern format 转换时convert_patterns -format stil未指定-clock_edge rising导致默认使用 falling edge与 DUT 的 capture clock phase 错位 180°。解决强制指定边沿并验证convert_patterns -input pattern.as -output pattern.stil -format stil -clock_edge rising verify_patterns -input pattern.stil -check_clock_edge5.3 现象report_bridge_coverage为 0.0%report_fault_list -bridge却列出 237 个 bridging pairs原因在create_test_structure时未启用-enable_bridging_analysis导致 bridging fault model 未加载。Tessent 默认只激活 stuck-at model。解决重建 test structuredelete_test_structure create_test_structure -scan -enable_bridging_analysis run_atpg -fault_model bridging5.4 现象report_timing -path_group ATPG_CAPTURE显示大量 negative slack (-0.42ns)但 functional timing 完全 clean原因ATPG capture clock 的 uncertainty 设置为 0.1ns默认值而实际 PLL jitter board skew 达 0.35ns。STA 计算中capture path 的 required time 被过度收紧。解决在 SDC 中显式设置set_clock_uncertainty -setup 0.35 [get_clocks atpg_capture_clk] set_clock_uncertainty -hold 0.15 [get_clocks atpg_capture_clk]5.5 现象report_scan_chain显示某 chain length 1024但report_scan_element -chain列出 1025 个 cells原因chain 末尾插入了dummy scan cell用于 ESD protection其scan_in连接 GNDscan_out悬空。Tessent 将其计入 chain length 但忽略其测试功能。解决在create_test_structure前过滤set_dont_use [get_cells uut/top/esd_dummy_*] -property scan6. 设计取舍的真相为什么你永远需要在 controllability、observability、test time 之间做三元悖论权衡翻遍atpg-gd.pdf的 107 页最刺眼的不是技术细节而是反复出现的trade-off table如手册第 82 页的 Testability Calculations 对比表。它赤裸裸地宣告ATPG 不是万能解药而是一套精密的资源置换协议——你用面积换可观测性用功耗换可控性用时间换覆盖率。真正的高手从不在“如何提升覆盖率”上纠缠而是在 RTL 诞生之初就画好这张三元博弈图。6.1 Controllability vs. Area每增加 1% 的 controllability平均多消耗 0.8% 的 die areaTessent 的 controllability cost 模型第 107 页证明要将某个 critical path 的 CC 从 5.2 cycles 降至 3.1最有效手段是插入 bypass register。但实测数据显示某 7nm MCU 项目Bypass Register 类型面积开销CC 降低时序收敛难度Standard cell (1x)0.3%-0.8LowHigh-Vt cell (2x)0.6%-1.5MediumCustom AOI21 (3x)0.8%-2.1High选择 custom AOI21 虽能将 CC 降至 3.1但其 placement density 导致 routing congestion 增加 17%反而使其他 block 的 OC 上升。最终项目采用 high-Vt 方案——用 0.6% 面积换 1.5 cycles CC 降低达成帕累托最优。6.2 Observability vs. Powerscan-out bandwidth 直接决定 ATE 测试功耗峰值手册第 94 页的Test Procedure Files规范要求每个 scan chain 的 max length ≤ 2048 bits。表面是 timing 约束实则是功耗控制。计算公式如下Peak_Power_ATPG ≈ N_chains × Vdd² × f_scan × C_load_per_bit其中f_scan为 scan shift frequency。若将 chain length 从 2048 压至 1024虽可将f_scan提升 2×但N_chains翻倍 → peak power 不降反升 1.8×。某 5G baseband chip 因盲目缩短 chainATE 测试时 power rail droop 导致 pattern corruption最终回退至 1536-bit chain 1.3×f_scan 的折中方案。6.3 Test Time vs. Coverage99% 到 99.9% 的代价是 10 倍 test time但收益趋近于零ATPG 的 coverage curve 遵循logarithmic saturation lawCoverage(%) 100 × (1 - e^(-k × N_patterns))其中 k 是 design-specific constant。某 AI accelerator项目实测 k0.00012代入得N10000 → Coverage69.9%N50000 → Coverage95.3%N100000 → Coverage99.4%N200000 → Coverage99.9%但 ATE 测试时间 T ∝ N × (shift_time capture_time)。当 N 从 100k 增至 200kT 从 182s 增至 364s而 coverage 仅提升 0.5%。项目组最终设定硬约束max_patterns 120000接受 99.5% coverage将 test time 控制在 220s 内——因为良率分析表明剩余 0.5% fault 的逃逸概率 10⁻⁶远低于封装缺陷率。从那以后我每次做 test planning都强制走一遍三元博弈矩阵先用estimate_test_area算 controllability 成本再用estimate_test_power算 observability 功耗最后用estimate_test_time -coverage 99.5看时间预算。当三者同时满足才启动 scan insertion。这份atpg-gd.pdf里没有教这个但它每一页的参数定义都在暗示ATPG 的终点不是 100% coverage而是找到那个让芯片在成本、质量、上市时间三角中稳稳站立的支点。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
3ds Max Biped骨骼搭建全流程:模型体检到蒙皮权重验收 做角色绑定的都懂一个道理:模型做得再漂亮,骨架立歪了,后面全是窟窿。我见过太多项目在动画阶段返工,追根溯源不是动画师手重,而是当初那套 BIP 骨骼搭建的时候就埋了雷——盆骨高度按感觉给、膝盖方向反了、蒙皮权重靠… · 2026/11/3 16:32:54
编程中的类型转换:原理、实践与优化 1. 类型转换的本质与分类在编程语言中,类型转换是指将数据从一种类型转换为另一种类型的过程。这种转换可能发生在编译时,也可能发生在运行时。根据转换方式的不同,我们可以将其分为两大类:隐式类型转换(Implicit Type… · 2026/11/3 16:31:52
网络安全-Javascript基础 网络安全-Javascript基础一般简称JS,然后用于嵌套在网页中,给网页添加动态效果用的node凭条,开发服务器也是用js
后期会用到recat、vue框架。常见的前端
HTML(结构层) 利用语言去搭建网页
CSS(样式层)利用样式美化网页… · 2026/11/3 19:27:23
别再复制粘贴代码了!Python 函数从封装到递归、lambda,老哥一次讲透 写程序最忌讳的就是复制粘贴—— 同一段代码贴三遍,改起来要改三处,累不说还容易漏。Python 给出的答案是函数:把一段会重复用的代码 "封装" 起来,起个名字,想用就调用。一、为什么用函数print() 其实就是个… · 2026/11/3 19:27:23
AdMergeX 获信通院多项认可,市场部负责人受聘铸基计划技术专家 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 19:27:23
客户复购预测真的值得做吗?从业务目标、方案取舍到上线验收 上一篇《从一家小店看懂数仓与机器学习:先理业务,再串技术》,沿着小林的店,把交易、客户状态、数仓与预测连接了起来。
接下来还有一组更难的问题:这件事值得投入吗?普通规则是否已经够用?模型… · 2026/11/3 19:27:23
什么是Unlimited-OCR-2?OCR-3.0时代百度无限文档解析模型完整指南 人工智能计算机视觉OCR多模态大模型 【免费下载链接】Unlimited-OCR-2 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/Unlimited-OCR-2 点击查看 免费下载 Unlimited-OCR-2 是百度开源的超长文档解析模型(OCR 模型),主打&q… · 2026/11/3 19:26:23
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46