当前位置: 首页 > news >正文

新手DFT入门:用5个实际例子看懂WGL文件里的Signal、Scanchain和Pattern Block

新手DFT入门:用5个实际例子看懂WGL文件里的Signal、Scanchain和Pattern Block

第一次打开WGL文件时,那些密密麻麻的Signal定义和Scanchain配置是否让你一头雾水?作为芯片测试领域的"乐谱",WGL文件用特定语法描述了测试仪该如何与芯片"对话"。本文将用五个真实案例,带你拆解这份"乐谱"的核心章节。

1. Signal定义:芯片测试的"演员表"

想象你正在编排一场舞台剧,首先需要确定有哪些演员参与演出。在WGL文件中,Signal块就是这个"演员表",它定义了测试过程中需要用到的所有芯片引脚及其初始状态。来看一个典型的Signal定义片段:

Signal { clk : inout; scan_en : input initial=0; data[7:0] : inout initial=1; reset_n : input initial=1; }

这段代码透露了几个关键信息:

  • 端口方向input表示测试仪驱动信号,output表示监测芯片输出,inout则是双向信号
  • 初始状态initial指定上电时的默认电平(未指定时默认为0)
  • 总线表示法:如data[7:0]表示8位数据总线

实际项目中,Signal定义可能包含数百个信号。建议用表格整理关键信号:

信号名称类型初始值说明
clkinout-系统时钟
scan_eninput0扫描使能,低电平有效
data[7]inout1数据总线最高位

注意:初始状态的设置会影响测试序列的生成,特别是对复位信号这类关键控制线需要格外小心。

2. Scanchain配置:芯片内部的"流水线"

现代芯片通常包含数十万甚至上百万个触发器,要逐个测试它们就像检查流水线上的每个产品。Scanchain将这些触发器串联成"流水线",使测试仪能通过少量引脚访问所有内部状态。下面是一个简化的Scanchain定义:

Scanchain grp1chain1 { SI -> cell1 -> cell2 -> ... -> cellN -> SO; Scanstate { Input = 'b0101...'; // 待载入的测试数据 Output = 'bxxxx...'; // 预期输出的掩码 } }

理解这段代码需要掌握三个概念:

  1. 物理连接SI -> cell -> SO描述了扫描链的硬件连接顺序
  2. 逻辑分组grp1chain1这样的命名通常反映芯片的层次结构
  3. 状态定义Scanstate块指定了测试时的输入输出预期

当扫描链很长时,可以用Python脚本快速计算关键参数:

chain_length = len(scan_chain_cells) shift_cycles = chain_length # 装载完整数据需要的时钟周期数 print(f"扫描链长度:{chain_length},需要{shift_cycles}个移位周期")

3. Timeplate:测试仪的动作时序图

如果把测试比作舞蹈,那么Timeplate就是规定每个动作节奏的编舞表。它定义了信号变化的精确时间点:

Timeplate gen_tp1 { Period = 40ns; Events { 0ns : D; // 驱动固定值 20ns : S; // 采样信号值 40ns : D; // 回到驱动状态 } }

这个Timeplate解读为:

  • 测试周期为40纳秒
  • 在0ns时刻,测试仪驱动(D)信号到指定电平
  • 20ns时,测试仪采样(S)芯片输出
  • 40ns时周期结束,开始下一个循环

常见的时间参数组合

应用场景周期驱动时刻采样时刻
低速功能测试100ns0ns50ns
高速扫描测试20ns0ns10ns
异步接口测试不定上升沿下降沿

4. Pattern Block:测试用例的"剧本"

Pattern Block是WGL文件中最具实操性的部分,它像剧本一样详细描述了每个测试步骤。典型的模式包括:

Pattern example { // 初始化阶段 Vector (0) { scan_en=1; clk=0; } // 进入扫描模式 Vector (+, gen_tp1) { ... } // 应用timeplate // 装载测试数据 Repeat (chain_length) { Vector (+, gen_tp1) { ... } // 每个周期移入1位 } // 捕获响应 Vector (0) { scan_en=0; } // 退出扫描模式 Vector (+, gen_tp1) { ... } // 功能时钟脉冲 }

关键操作符解析:

  • Vector (0):绝对向量编号
  • Vector (+, tp):相对上一个向量自增编号,应用指定timeplate
  • Repeat (N):循环执行N次

实际项目中,Pattern可能包含数千个向量。调试时可以关注这些关键点:

  1. 扫描使能(scan_en)的切换时机
  2. 时钟信号的边沿与扫描移位的同步关系
  3. 输入输出向量的对应关系

5. WGL与STIL的差异:测试语言的"方言"比较

虽然WGL和STIL都是描述测试模式的语言,但它们在扫描链处理上有本质区别:

WGL工作流程

  1. 定义目标Scanstate
  2. 工具自动计算需要的移位序列
  3. 通过多个循环达到目标状态

STIL工作流程

  1. 直接指定每个扫描单元的输入值
  2. 单次移位即可载入完整状态
  3. 更接近ATE机器的原生操作

选择建议

  • 芯片设计阶段常用WGL,因其更抽象且与设计工具集成更好
  • 量产测试时倾向STIL,因其执行效率更高且直接对应ATE操作

理解这些差异有助于在不同阶段选择合适的工具链。比如在原型验证时,可以先用WGL快速生成测试模式,量产前再转换为STIL优化测试时间。

http://www.jsqmd.com/news/714546/

相关文章:

  • 2026年乌鲁木齐、喀什一体化污水处理设备选购完全指南:本地工厂直供vs内地品牌的真实对比 - 年度推荐企业名录
  • 终极Switch游戏文件管理解决方案:NSC_BUILDER 5个技巧让你告别繁琐操作
  • 别再死记硬背了!华为防火墙NAT配置实战:从NO-PAT到三元组NAT,一次搞懂5种源NAT的区别与适用场景
  • TFT Overlay:云顶之弈玩家的实时战术分析工具完全指南
  • 避开这些坑!STM32/GD32裸机移植Libcanard实现UAVCAN的完整指南
  • 空话艺术2-我觉得工作实习都很忙-没空去学习和积累
  • Fish Speech 1.5镜像使用指南:WebUI交互与API调用完整教程
  • 今天看到一个人工智能专业的说找不到工作的事儿
  • 告别噪音困扰:用STM32CubeMX和INMP441搭建你的第一个高保真双声道录音系统
  • 图像处理中的‘数据侦探’:用Python/NumPy实战3σ异常检测,告别肉眼找缺陷
  • 银行核心系统迁移微服务后事务失败率飙升27倍——基于JDBC连接池+LCN的熔断式补偿方案(含压测数据包)
  • 如何快速掌握League Akari:英雄联盟玩家的终极自动化工具箱指南
  • Testing Weekly | 测试行业每周资讯-第 02 期 | 2026-04-27
  • 2026最新自动清粪鸽笼/自动喂料鸽笼/镀锌防锈鸽笼定制厂家推荐!国内优质权威榜单发布,高适配性广东广州等地厂家精选 - 博客万
  • 跨年演讲要不要去做
  • Cadence CIS配置实战:把Excel表格变成你的私人智能元件库(支持直接打开Datasheet)
  • 用Python和RealSense D435i玩点新花样:从实时点云里‘抠’出任意物体的三维坐标(附完整代码)
  • 保姆级图解:PCIe流控(Flow Control)到底是怎么防止数据“堵车”的?
  • 保姆级教程:在RK3588开发板上搞定GC2145 DVP摄像头(附完整DTS配置)
  • 今天来和大家说说国内协会这个组织吧
  • AI在软件测试中可以做哪些事
  • Cat-Catch资源嗅探工具终极指南:5步快速掌握网页资源抓取
  • 防晒黑防晒伤防晒霜推荐在这里,Leeyo防晒霜高倍防护,双重阻隔晒黑晒伤 - 全网最美
  • 跨专业去做产品经理-行不行
  • 终极Windows与Office激活指南:KMS_VL_ALL_AIO完整解决方案
  • 告别单线瓶颈:实测Mikrotik ROS PCC负载均衡,双宽带叠加后下载/游戏/直播体验全解析
  • 请问 Navicat 有对数据库脚本执行做记录吗?记录里的关键信息包括哪些信息?记录会保留多久?
  • 快速积累本金的前提条件
  • 3步轻松搞定黑苹果:OpCore Simplify让OpenCore配置像安装软件一样简单
  • 如何快速搭建个人漫画收藏库?哔咔漫画批量下载终极指南 [特殊字符]