本文主要是介绍ATPG之STIL格式说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ATPG之STIL格式说明
ATPG之STIL
STIL test protocol file(.SPF)
转自: http://www.blogbus.com/bb2hh-logs/60233278.html
Author:pythonlong
stil文件是atpg的基础,用好atpg工具当然要熟悉stil格式。
下面是基本说明:)
STIL 1.0 {
Extension DesignP2000.5;
}
Header {
Title " TetraMAX(TM) 2000.05-i000622_173054 STIL output";
Date "Wed Dec 3117:21:05 1999";
History { }
}
Signals {
CLK In; RSTB In; SDI2In; SDI1 In; INC In; SCAN In; HACKIN In; si4 In;
six In; D0 InOut; D1InOut; D2 InOut; D3 InOut; SDO2 Out; COUT Out;
HACKOUT Out; so4 Out;sox Out;
}
SignalGroups {
_pi = 'D0 + D1 + D2 + D3+ CLK + RSTB + SDI2 + SDI1 + INC +
SCAN + HACKIN + si4 +six';
_default_Clk1_Timing_ ='RSTB';
_io = 'D0 + D1 + D2 +D3' { WFCMap 0X->0; WFCMap 1X->1; WFCMap
ZX->Z; WFCMapNX->N; }
_po = 'SDO2 + COUT + D0+ D1 + D2 + D3 + HACKOUT + so4 + sox';
_default_In_Timing_ ='D0 + D1 + D2 + D3 + CLK + RSTB + SDI2 +
SDI1 + INC + SCAN +HACKIN + si4 + six';
_default_Out_Timing_ ='SDO2 + COUT + D0 + D1 + D2 + D3 + HACKOUT
+ so4 + sox';
_default_Clk0_Timing_ ='CLK';
}
ScanStructures {
// Uncomment and modifythe following to suit your design
// ScanChain chain_name{ ScanIn chain_input_name; ScanOut chain_output_name; }
}
Timing {
WaveformTable_default_WFT_ {
Period '100ns';
Waveforms {
_default_In_Timing_ { 0{ '0ns' D; } }
_default_In_Timing_ { 1{ '0ns' U; } }
_default_In_Timing_ { Z{ '0ns' Z; } }
_default_In_Timing_ { N{ '0ns' N; } }
_default_Clk0_Timing_ {P { '0ns' D; '50ns' U; '80ns' D; } }
_default_Clk1_Timing_ {P { '0ns' U; '50ns' D; '80ns' U; } }
_default_Out_Timing_ { X{ '0ns' X; } }
_default_Out_Timing_ { H{ '0ns' X; '40ns' H; } }
_default_Out_Timing_ { T{ '0ns' X; '40ns' T; } }
_default_Out_Timing_ { L{ '0ns' X; '40ns' L; } }
}
}
}
PatternBurst _burst_ {PatList {
_pattern_ {
}
}}
PatternExec {
PatternBurst_burst_;
}
Procedures {
capture_CLK {
W _default_WFT_;
forcePI: V { _pi=\r13 #; _po=\j \r9 X ; }
measurePO: V { _po=\r9 #; }
pulse: V { CLK=P; _po=\j\r9 X ; }
}
capture_RSTB {
W _default_WFT_;
forcePI: V { _pi=\r13 #; _po=\j \r9 X ; }
measurePO: V { _po=\r9 #; }
pulse: V { RSTB=P;_po=\j \r9 X ; }
}
capture {
W _default_WFT_;
forcePI: V { _pi=\r13 #; _po=\j \r9 X ; }
measurePO: V { _po=\r9 #; }
}
// Uncomment and modifythe following to suit your design
// PRE_CLOCK_MEASUREProcedures {
// load_unload {
// W_default_WFT_;
// C { test_so=X;test_si=0; test_si2=0; test_so2=X; clk=0; tclk=0; reset=1; test_se=1; }
// Shift { W_default_WFT_;
// V { _si=#; _so=#; CLK= P; }
// }
// }
// TMAX GENERATEDPOST_CLOCK_MEASURE (Closer to DFTCompiler Procedures {
// load_unload {
// W_default_WFT_;
// C { test_si=0;test_si2=0; clk=0; tclk=0; reset=1; test_se=1; }
// V { _so=##; }
// Shift { W_default_WFT_;
// V { _si=##; _so=##;clk=P; }
// }
}
MacroDefs {
test_setup {
W _default_WFT_;
V { CLK=0; RSTB=1;}
}
}
开始版本和头不用说。
1.定义设计的信号,即哪些是输入信号,哪些是输出信号,哪些信号是输入输出。
eg.
Signals {
CLK In; RSTB In; SDI2In; SDI1 In; INC In; SCAN In; HACKIN In; si4 In;
six In; D0 InOut; D1InOut; D2 InOut; D3 InOut; SDO2 Out; COUT Out;
HACKOUT Out; so4 Out;sox Out;
}
2.定义信号组:
_in = input pins
_out = output pins
_io = bidirectional pins
_pi = inputs +bidirectional pins
_po = outputs +bidirectional pins
_si = scan chain inputs
_so = scan chain outputs
设置时钟的信号组
eg.
SignalGroups {
_pi = 'D0 + D1 + D2 + D3+ CLK + RSTB + SDI2 + SDI1 + INC' ;
_io = 'D0 + D1 + D2 +D3' ;
_po = 'SDO2 + COUT + D0+ D1 + D2 + D3 + HACKOUT + so4 + sox';
_default_Clk0_Timing_ ='CLK';
}
3.定义扫描链结构
eg.
ScanStructures {
ScanChain "c1"{ ScanIn SDI2; ScanOut SDO2; }
ScanChain "c2"{ ScanIn SDI1; ScanOut D1; }
ScanChain "c3"{ ScanIn DIN; ScanOut YABX; }
ScanChain "c4"{ ScanIn "IRQ[4]"; ScanOut XYZ; }
}
对于双向io还有额外参数WFCMap设置多状态情况下的值
4.定义信号组各种状态的时序
如时钟周期,输入0,1,Z,N。输出H,L,T,X。
其中0,表示输入0;1,表示输入1;Z,表示输入关闭,N,表示输入未知。
H,表示输出为高;L,表示输出为低;T,表示输出关闭;X,表示输出无操作
P表示脉冲,D表示强制为低,U表示强制为高
eg.如下,定义了输入的0,1,N,Z的时序以及Clock,reset的脉冲波形,输出的H,L,T,X波形。
Timing {
WaveformTable_default_WFT_ {
Period '100ns';
Waveforms {
_default_In_Timing_ { 0{ '0ns' D; } }
_default_In_Timing_ { 1{ '0ns' U; } }
_default_In_Timing_ { Z{ '0ns' Z; } }
_default_In_Timing_ { N{ '0ns' N; } }
_default_Clk0_Timing_ {P { '0ns' D; '50ns' U; '80ns' D; } }
_default_Clk1_Timing_ {P { '0ns' U; '50ns' D; '80ns' U; } }
_default_Out_Timing_ { X{ '0ns' X; } }
_default_Out_Timing_ { H{ '0ns' X; '40ns' H; } }
_default_Out_Timing_ { T{ '0ns' X; '40ns' T; } }
_default_Out_Timing_ { L{ '0ns' X; '40ns' L; } }
}
}
}
5.定义各种操作的时序,如:
capture_RSTB {
W _default_WFT_;
forcePI: V { _pi=\r13 #; _po=\j \r9 X ; }
measurePO: V { _po=\r9 #; }
pulse: V { RSTB=P;_po=\j \r9 X ; }
}
由于atpg是基于周期的,所以一个向量V即可表示一个周期,另外F表示force,force信号为固定值;C表示condition,满足某一条件,向下进行。
定义了一个capture_RSTB的操作,这个操作使用_default_WFT_定义的x信号组的状态时序,包含3个周期:
第一个周期forcePI操作,#表示输入,\r表示重复,\j表示连接。所以第一周期表示信号组_pi输入13个数据,信号组_po的每个信号在原来的值基础上连接上一个x
第二个周期measurePo操作,_po得到9个输出.
第三个周期pulse操作,产生RSTB脉冲,信号组_po重新连接上9个x
WFT :waveform table, 在timing procedure 定义
调用WFT时,用W来引用
F:表示force signal
V:表示一个cycle,例如,"rst"=1,"clk"=P
C:表示一个条件的判断conditional
这篇关于ATPG之STIL格式说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!