欢迎光临专业集成电路测试网~~欢迎加入IC测试QQ群:111938408

专业IC测试网

当前位置: 网站主页 > 测试工程 >

8. IJTAG:芯片测试的超级英雄

时间:2024-07-14 22:03来源:功烨 芯爵 作者:ictest8_edit 点击:

 

半导体领域的小伙伴们,今天我们来聊聊一个可能并不广为人知,但绝对是幕后英雄的技术——IJTAG。别担心,虽然这听起来有点技术宅,但我们保证,用轻松幽默的方式让你彻底掌握这门技能。准备好了吗?让我们开始吧!


什么是IJTAG?


好吧,首先我们得从JTAG说起。JTAG,全称是Joint Test Action Group,说白了就是一群人聚在一起想出了一个测试芯片互连线的方法。最初,他们的目标是让芯片之间的互连测试变得简单。然后事情变得越来越复杂,因为我们总是想着“要不再加点功能吧?”。于是,JTAG不仅用来测试互连线,还被用来调试芯片内部的各种IP(Intellectual Property)。通过JTAG指令集,我们可以激活某个IP的TDR(Test Data Register),然后进行操纵和观测。

 

但是,问题来了。随着芯片上IP数量的增加,JTAG的指令集也变得越来越庞大,指令解码器复杂到让工程师们每天都要多喝两杯咖啡才能应付。此外,JTAG的广播架构对芯片设计阶段的P&R(Placement and Routing)不太友好,测试模式一旦在设计阶段确定,就缺乏灵活性。更糟糕的是,JTAG标准并未明确定义TDR如何操纵IP。

于是,英雄IJTAG登场了!IJTAG全称是Internal JTAG,完全兼容JTAG网络,但更加灵活和智能。它描述了从TDR到TAP(Test Access Port)之间的网络结构,通过SIB(Segment-Insertion-Bit)实现灵活配置,并规范了TDR和IP之间的交互语言,真正做到了即插即用。

 


IJTAG的构成


IJTAG标准是IEEE 1687,于2005年起草,2014年颁布,众多IC/EDA公司参与其中。IJTAG主要包含三个部分:

灵活的串行TDR链路:用于测试片上IP。

IJTAG网络连接语言(ICL):描述IJTAG网络的连接关系。

IJTAG程序描述语言(PDL):描述如何配置和操作片上IP。

 
·

SIB的结构


SIB,听起来像是个外星生物?其实它是Segment-Insertion-Bit的缩写,是IJTAG的核心之一。SIB是单比特的TDR,有开和关两种状态。通过插入SIB,我们可以实现任意层次化的结构,利用SIB实现对IJTAG网络的灵活配置。

 

SIB的网络结构

IJTAG网络的SIB结构是多级网络结构(plug-and-play),就像搭积木一样简单又灵活。我们可以通过配置SIB网络,实现任意层次的TDR和IP的连接。举个例子,我们有两个SIB,每个SIB后面挂了一组TDR和instrument。通过一系列步骤,我们可以激活不同的TDR网络,进行数据扫描和操纵。

 


ICL语法


ICL(Instrument Connection Language)描述IJTAG网络的连接关系,是一种可读文件。通过ICL,我们可以描述Instrument、TDR、SIB以及整个芯片的连接关系。看起来像编程?其实就是在编程!

 

描述Instrument


  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Module Instrument {    DataInPort DI[7:0];    DataOutPort DO[7;0];    ClockPort CLK;
    Alias enable = DI[7] {RefEnum YesNo;}    Alias go = DO[0] {RefEnum PassFail;}    Alias done = DO[1] {RefEnum YesNo;}    Alias mode[1:0] = DI[6:5] {RefEnum Modes;}
    Enum YesNo {Yes = 1’b1; No = 1’b0;}    Enum PassFail {Pass = 1’b1; Fail = 1’b0;}    Enum Modes {        default = 2’b11;        debug = 2’b10;    }}

 

通过上面的代码,我们描述了一个Instrument的输入输出端口及其别名和枚举值。

 

 

PDL语法

PDL(Procedural Description Language)描述如何配置和操作片上IP/instrument。通过PDL,我们可以定义一系列操作命令,用于配置和操纵TDR和IP。

 


常用的PDL命令

· iWrite:向对象中写入数据

· iRead:从对象中读取数据

· iApply:执行PDL命令

· iNote:添加注释

· iProc:定义PDL的procedure
 
· iCall:调用定义好的procedure

· iMerge:并行执行多个Proc

· iRunLoop:执行指定数目的时钟周期

实例讲解:温度传感器的ICL和PDL描述


让我们通过一个温度传感器的实例,来看看ICL和PDL的实际应用。

ICL描述


我们首先描述温度传感器及其TDR、SIB和chip的连接关系


  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Module Sensor {    DataInPort En;    DataOutPort Temp[3:0];}
Module TDR {    ScanInPort si;    ScanOutPort so {Source EN_reg};    ShiftEn se;    UpdateEn ue;    DataInPort Temp[3:0];    DataOutPort En {Source EN_Reg};
    ScanRegister SR[3:0] {        ScanInSource si;        CaptureSource Temp;    }
    ScanRegister EN_reg {        ScanInSource SR[0];    }}
Module SIB {    ScanInPort si;    ScanInPort fso;    ScanOutPort so {Source sib;}    ScanOutPort tsi {Source si;}    ShiftEn se;    UpdateEn ue;
    ScanRegister sib {        ScanInSource mux;        CaptureSource 1’b0;        ResetValue 1’b0;    }
    ScanMux mux SelectedBy sib {        1’b0 : si;        1’b1: fso;    }}
Module chip {    TCKPort TCK;    TMSPort TMS;    ScanInPort TDI;    ScanOutPort TDO;    Instance TAP_inst of TAP {        InputPort tck = TCK;        InputPort tms = TMS;        InputPort tdi = TDI;        InputPort sib_tdo = SIB_2.so;    }
    Instance SIB_1 of SIB {        InputPort si = TAP_inst.to_si;        InputPort fso = TDR_1.so;    }
    Instance SIB_2 of SIB {        InputPort si = SIB_1.so;        InputPort fso = TDR_2.so;    }
    Instance TDR_1 of TDR {        InputPort si = SIB_1.tsi;        InputPort Temp = Sensor_1.Temp;    }
    Instance TDR_2 of TDR {        InputPort si = SIB_2.tsi;        InputPort Temp = Sensor_2.Temp;    }
    Instance Sensor_1 of Sensor {        InputPort En = TDR_1.En;    }
    Instance Sensor_2 of Sensor {        InputPort En = TDR_2.En;    }}
Module TAP {    TCKPort tck;    TMSPort tms;    ScanInport tdi;    ScanOutPort tdo;    ToShiftEnPort shift_en;    ToUpdateEnPort update_en;    ToCaptureEnPort capture_en;}

 

PDL描述


接下来,我们通过PDL来描述如何配置和操作温度传感器。


  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
iPDLLevel 0;
iProcForModule Sensor;
iProc Read_Temperature {{cycles 100}} {    iNote “Start the temperature monitor:”;    iWrite En 1;    iApply;
    iNote “Executing:”    iRunLoop $cycles –sclk system_clock;    iApply;
    iNote “Reading temperature value:”    iRead Temp[3:0];    iApply;
    iNote “Turn off the temperature monitor:”    iWrite en;    iApply;}
iPDLLevel 0;
iProcForModule chip;
iMerge –begin    iCall chip.sensor_1.Read_Temperature 200;    iCall chip.sensor_2.Read_Temperature 200;iMerge -end

 

总结

通过这篇文章,我们不仅了解了IJTAG的基本概念、组成部分和工作原理,还通过实例掌握了ICL和PDL的实际应用。希望大家能通过轻松幽默的方式,彻底掌握IJTAG这门技术,让你的芯片测试工作变得更加高效和灵活。
 
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名: 验证码: 点击我更换图片