====== IST(in-system test) ======
是用于车规级等安全性要求比较高的芯片场景。
主要是IST可以支持产生JTAG信号,用于在线控制logic bist & memory bist等。
其中如果为了加速memory bist, 可以使用BAP的DirectAccess 来控制(这块与IST产生的JTAG接口没有关系)。
Figure 1. Initial Design for Automotive Test Case
{{:edastudy:tessent:pasted:20240516-155724.png?nolink}}
Figure 2. DFT Integration at the Core Level for Automotive
{{:edastudy:tessent:pasted:20240516-155807.png?nolink}}
Figure 3. DFT Integration at the Top Level for Automotive
{{:edastudy:tessent:pasted:20240516-155826.png?nolink}}
===== - dft spec =====
注:目前IST只能通过把TRSTB拉低来实现JTAG复位,其无法发出连续把TMS拉高5个tck cycle,这个是硬件代码限制。
IST数据接口有两种:\\
* cpu interface -- 数据直接由FW控制,方便直接写入到FW程序中
* dma interface -- 速度快,数据直接从memory内存中搬移
而且可以两种接口的IST都可以一起加进来,这个超级方便,不用二选一,两者都要。
InSystemTest {
Controller(cpu) {
# 指定为current design, 添加一个CPU接口的IST
DesignInstance (.){}
//host_interface: HostScanInterface(sri);
data_width : 32 ;
protocol : cpu_interface;
ControllerChain {
present : on ;
clock: tck;
segment_per_instrument: on ;
}
Connections {
reset : ist_if/reset;
CpuInterface {
Generic {
clock : ist_if/clock ;
data_in : ist_if/data_in ;
data_out: ist_if/data_out ;
write_en: ist_if/write_en ;
enable : ist_if/enable ;
}
}
}
}
# 指定instance的 host scan interface, 添加一个DMA接口的IST
Controller(dma) {
DesignInstance(chip_top_rtl1_tessent_tap_main_inst) {
client_interface : tap_client;
}
//host_interface: HostScanInterface(sri);
data_width : 32 ;
protocol : cpu_interface;
ControllerChain {
present : on ;
clock: tck;
segment_per_instrument: on ;
}
Connections {
reset : ist_if/reset;
CpuInterface {
Generic {
clock : ist_if/clock ;
data_in : ist_if/data_in ;
data_out: ist_if/data_out ;
write_en: ist_if/write_en ;
enable : ist_if/enable ;
}
}
}
}
}
===== - pattern spec =====
read_config_data -in $spec -last -from_string {
InSystemTest {
# 这个可以指定具体的IST,当多个IST存在时,不会有pattern冲突
Controller(icl_instance_name) {
TestProgram(0) {
pattern : pattern_wrapper_name ;
finish_with_ireset : on | off ;
}
// 可以写多个测试program, cpu接口时,工具只跑最后一个tesetprogram的仿真。
TestProgram(1) {
pattern : pattern_wrapper_name ;
finish_with_ireset : on | off ;
}
}
}
}