Tessent ICL语法精要:从模块定义到高效测试网络构建实战
如果你正在为复杂的芯片测试结构描述而头疼,看着那些交织的SIB、TDR和TAP模块连接关系感到无从下手,那么你很可能需要重新审视一下Tessent ICL这门“硬件描述语言”。和Verilog、VHDL这类我们熟知的电路描述语言不同,ICL(Instrument Connective Language)的视角非常独特——它不关心晶体管的开关,也不描述寄存器的逻辑功能,它的核心使命是清晰地定义测试仪器(Instrument)之间的拓扑连接关系。你可以把它想象成芯片测试架构的“接线图”或“网络拓扑说明书”。对于负责DFT(可测试性设计)或芯片验证的工程师而言,精通ICL意味着你能高效、准确地将设计意图传达给Tessent工具链,从而自动化地生成测试访问端口(TAP)、插入测试逻辑,并最终实现高效的生产测试。本文将抛开那些枯燥的语法手册,从实际项目出发,深入剖析如何用ICL高效、清晰地定义SIB、TDR和TAP,并分享一些能让你少走弯路的实战技巧。
1. 理解ICL的核心哲学:从“是什么”到“为什么”
在跳进具体的语法细节之前,花点时间理解ICL的设计哲学至关重要。这能帮你避免写出看似正确、实则违背工具逻辑的代码。
ICL的本质是一种声明式连接语言。它不像过程式编程语言那样一步步告诉计算机“怎么做”,而是声明“什么东西连接到哪里”。工具(如Tessent Shell)读取ICL文件后,会根据这些声明来理解整个测试网络的层次结构、信号流向和控制关系。因此,编写ICL时,你的思维模式应该从“如何实现一个功能”切换到“如何描述一个已经存在的连接关系”。
一个常见的误解是把ICL模块(Module)等同于Verilog的模块。虽然语法上有相似之处(都有端口和实例化),但它们的语义天差地别。Verilog模块描述的是电路行为或结构,而ICL模块描述的是一个测试仪器(Instrument)的接口和内部扫描寄存器。这个Instrument可以是TAP控制器、扫描链选择块(SIB)、测试数据寄存器(TDR),甚至是嵌入式确定性测试(EDT)压缩器。
为什么这种区分如此重要? 因为在ICL的世界里,ScanInterface的定义决定了仪器扮演的角色。client接口意味着这个仪器“被上级控制”,而host接口意味着它“可以控制下级”。这种主-从(host-client)关系是构建分层测试网络的基础。理解这一点,你就能明白为什么一个SIB模块里会同时存在client和host两个ScanInterface——它既是TAP的“客户”(被TAP控制),又是下游TDR的“主机”(控制TDR)。
2. 模块定义深度解析:SIB、TDR与TAP的语法实战
让我们暂时忘掉那些抽象的术语,通过构建一个具体的、两级的测试网络来拆解每个模块的定义。假设我们有一个简单的场景:一个TAP控制器通过两个SIB(SIB1, SIB2)分别访问两个独立的TDR(TDR1, TDR2)。我们将一步步构建这个网络的ICL描述。
2.1 SIB模块:测试网络的交通枢纽
扫描链插入块(Scan Insertion Block, SIB)是IJTAG(IEEE 1687)网络中的关键组件,它像一个可编程的交换机,决定测试数据流是穿过它访问下游仪器,还是绕过它。在ICL中定义SIB,核心在于清晰地描述其多路选择逻辑和双重接口角色。
一个典型的SIB模块声明始于其所有必要的控制与数据端口:
Module sib_example {
// 控制与时钟端口
ResetPort rst { ActivePolarity 0; } // 复位端口,低电平有效
SelectPort en; // 选择使能端口
ScanInPort si; // 主扫描输入
CaptureEnPort ce; // 捕获使能
ShiftEnPort se; // 移位使能
UpdateEnPort ue; // 更新使能
TCKPort tck; // 测试时钟
// 输出与级联端口
ScanOutPort so { Source sib_reg; } // 扫描输出,源是内部的SIB寄存器
ToSelectPort en_out; // 输出给下游仪器的选择信号
ScanInPort fsi; // 来自下游仪器的反馈扫描输入(FeedBack Scan-In)
// 接口定义:明确角色
ScanInterface client {
Port si;



被折叠的 条评论
为什么被折叠?



