一文带你秒懂STIL文件(非Scan部分)

1.STIL文件溯源

  STIL(全称Standard Test Interface Language),该文件的产生的本质原因是因为行业发展前期出现各类测试机,不同的测试机采用不同的测试语言/测试向量格式,使得行业内出现群魔乱舞的情况,测试工程师在开发同一个测试向量时就耗费了大部分测试机时,那么移植向量的情况可想而知。
  因此IEEE组织响应行业要求制定并发布了标准《IEEE-Std-1450-1999》,以实现标准化和不同测试机对于测试向量的兼容性,该标准主要是针对数字电路的,数模混合电路与模拟电路部分的正在探讨。目前标准已发展到了《IEEE-Std-1450-2023》。

2.下面以一个完整的例子进行详细说明

//这里指的是STIL文件的版本,《IEEE-Std-1450-1999》内为1.0版本,
//《IEEE-Std-1450-2023》内新增加了一部分功能,具体见标准Page 77,为2.0版本。
STIL 1.0;

//这里是Signals Block,声明执行测试向量(Pattern Block)时需要用到端口,
//执行Pattern所用到的端口必须包含在里面!!!
Signals {
    DIR In;
    OE_ In;
    A0 In; A1 In; A2 In; A3 In;
    A4 In; A5 In; A6 In; A7 In;
    B0 Out; B1 Out; B2 Out; B3 Out;
    B4 Out; B5 Out; B6 Out; B7 Out;
}


//这里是SignalGroups Block,也是声明执行测试向量(Pattern Block)时需要用到端口,
//主要是为了方便引用信号组,详情可见Timing Block和Pattern Block。
//执行Pattern所用到的端口组必须包含在里面!!!
SignalGroups {
	//这意味着ABUS就是指代等号后面的所有端口,从左到右为A7~A0。
    ABUS='A7 + A6 + A5 + A4 + A3 + A2 + A1 + A0';
    BBUS='B7 + B6 + B5 + B4 + B3 + B2 + B1 + B0';
    ALL ='DIR + OE_ + ABUS + BBUS';
}


//这里是Timing Block,简单结构示意为Timing包含WaveformTable,
//WaveformTable包含周期(Period)和波形信息(Waveforms)

//Period为Pattern Block内每一行Vector,即  V { ALL=0000000000LLLLLLLL; }
//执行的周期,为一个并行测试周期,下面所示为500ns。

//Waveforms此处以DIR和BBUS为例,首先要声明一下CHAR这个小家伙,
//Signals Block中定义的端口为输入,则CHAR为01,若为输出,则为LHZX。
//0/1表示测试机输入低/高,动作ForceDown/ForceUp表示测试机输入低/高,
//0/1与ForceDown/ForceUp为映射关系,表示使用0/1指代ForceDown/ForceU动作,在Pattern 
//Block内就能理解了。

//L/H表示测试机比较低/高,X表示不关心,Z表示HighZ。
//动作:CompareHighWindow/CompareHigh/CompareLowWindow/CompareLow/CompareOffWindow/CompareUnknown
//分别表示窗口比较高/单点比较高/窗口比较低/单点比较低/窗口比较HighZ/不关心态,
//窗口表示测试机从当前时刻开始直到本周期结束/下一个比较状态来临时一直进行比较,为连续状态;
//单点表示测试机仅在当前时刻进行比较高和低,不关心其他时刻的状态,为离散状态。
//按下列正则表达式结构对号入座:
//(端口|端口组){CHAR{('时间' (动作(/动作+)?)+}}
//注意:时间<Period !!! 
//DIR端口的操作表示测试机在0ns根据Pattern Block内的Vector中当前DIR写的1还是0进行操作,若为1/0,则在0ns施加高电平/低电平。
//BBUS端口的操作表示测试机在0ns时刻不关心器件的输出,而在[260ns,280ns)处于比较高/低/HighZ态,280ns后处于不关心态,此时既不属于单点/窗口,因为测试机对DUT(被测器件)输出不做任何操作。
//部分低端的测试机会限制drive边沿的数量以及会不支持CompareWindow操作,类似93K或者750的测试机可以支持较多的drive沿。
Timing "hello tester timing" {
    WaveformTable one {
    Period '500ns';
        Waveforms {
            DIR { 01 { '0ns'ForceDown/ForceUp; }}
            OE_ { 01 { '0ns'ForceUp; '200ns'ForceDown/ForceUp;
            '300ns'ForceUp; }}
            ABUS { 01 { '10ns'ForceDown/ForceUp; }}
            BBUS { HLZ { '0ns'CompareUnknown;
            '260ns'CompareHighWindow/CompareLowWindow/CompareOffWindow;
            '280ns'CompareUnknown; }}
        }
    } // end WaveformTable one
} // end Timing "hello tester timing"

//此处为PatternBurst Block,声明要执行的Pattern列表,但是由于向量转换工具并不十分成熟与完善,所以
//建议一个文件仅包含一个Pattern、PatternBurst 和 PatternExec Block。
PatternBurst "hello tester burst" {
    PatList { "hello tester pattern"; }
} // end PatternBurst "hello tester burst"

//此处为PatternExec Block,类似于C++的main函数,用于绑定Timing和Pattern Block,使得Pattern可以
//调用我们已定义完成的时序进行测试。
PatternExec {
    Timing "hello tester timing";
    PatternBurst "hello tester burst";
} //end PatternExec

//这里是Pattern Block,为一个测试向量的核心部分,用于告诉测试机如何提供激励和采集期望响应。
//可以看到,ALL为SignalGroups内定义的信号组,0HL为在Timing内声明的CHAR,
//对于Pattern的Vector内的引用,均需要在其他Block中完成声明。
//每一个Vector表示一个500ns测试周期,因为引用了WaveformTable one。
Pattern "hello tester pattern" {
    W one;//调用所绑定Timing的WaveformTable 
    V { ALL=0000000000LLLLLLLL; }
    V { ALL=0010000000HLLLLLLL; }
    V { ALL=0001000000LHLLLLLL; }
    V { ALL=0000100000LLHLLLLL; }
    V { ALL=0000010000LLLHLLLL; }
    V { ALL=0000001000LLLLHLLL; }
    V { ALL=0000000100LLLLLHLL; }
    V { ALL=0000000010LLLLLLHL; }
    V { ALL=0000000001LLLLLLLH; }
} //end Pattern "hello tester pattern"

3.关于扩展

IEEE-Std-1450-2002》内还标注了如何设置电压信号,对于其他部分此处不做过多赘述,需要靠自己一步一步去探索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝_麻_糊(Allen)

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值