IEEE std 1149.1 JTAG bscan 原理

目录

Boundary-Scan Principles

        IEEE Std 1149.1 Device Architecture

        指令寄存器

        Test Acess Port ​

                  控制信号

TAP 控制器状态机

BYPASS 寄存器

Device Identification Register

Boundary-Scan Register

IEEE Std 1149.6

TestMAX DFT Boundary Scan

Greating BSD Test Pattern

基于BSDL测试向量生成


Boundary-Scan Principles

        Boundary-scan 测试可以用于测试器件core logic功能或者期间之间的连接结构。测试器件内部逻辑功能称为内部测试(INTEST),测试器件之间连接结构称为外部测试(EXTEST)。

        外部测试提供了一种测试open和short的方法,用于测试器件周边外围制造缺陷。内部测试提供了一种测试器件core logic最低限度功能的方法,例如存在性测试。

IEEE Std 1149.1 Device Architecture

IEEE Std 1149.1 结构包含如下组件:

  1. n-bit(n >= 2) 指令寄存器,保存当前指令
  2. 四个必须和一个可选的测试引脚,称为测试访问端口(TAP),如下所示:
  3. 有限状态机 TAP 控制器
  4. 1-bit 旁路寄存器
  5. 可选32-bit 身份识别寄存器,能够装载一个永久器件识别码
  6. 器件输入端口和输出端口插入的边界扫描单元(称为boundary-scan 寄存器,BSR)

 

 IEEE Std 1149.1 芯片结构

         任何时刻只有一个寄存器组(tdr,bypass,boundary scan,instruction,or identification)会被连接在 TDI 和 TDO 之间,TDI 广播到所有的寄存器组,指令寄存器的译码输出(上图MUX选择信号)确定是哪一个寄存器组有效。

指令寄存器

        指令寄存器具有一个 shift 部件连接在 TDI 和 TDO 之间,和一个保持部件,其可以保持当前指令。Shift IR 过程 从 TDI 移入新的指令到shift 部件(寄存器),Update IR 过程把 shift 部件中指令值传递到 hold 部件。Capture IR 过程可以载入一个确定 hard-wired 值到 shift 部件里面,也可以载入当前指令值(其实是当前指令值的高阶bit位),但是2 bit 最低有效位(靠近 TDO 位置)必须为01,高阶bit位值没有要求。如下图所示:

         典型的指令寄存器 cell 设计

指令

IEEE Std 1149.1描述四个强制性指令:

        EXTEST。EXTEST 指令有效期间,所有输出 BSR 在 Update 操作过程时施加 hold 部件保存的值到输出端口上,在同样的EXTEST指令有效时,所有输入 BSR 在 Capture 操作过程中可以采样输入端口上值到器件里面。因此 EXTEST 指令可以用于测试板级不同器件之间的连接故障。

        BYPASS。BYPASS 指令旁路测试器件。BYPASS指令为全 1 码。默认定义指令寄存器 hold 部件初始化指令为 BYPASS 指令。如果器件中没有 IDCODE 寄存器,test logic reset 期间,BYPASS 指令被载入指令寄存器。如果存在 IDCODE 寄存器,则 IDCODE 指令定义为指令寄存器 hold 部件初始化值。

        SMAPLE。SAMPLE 指令有效期间,来自于on-chip system logic 或者 system pins(input or output)的信号状态值被采样到 BSR cell中(在TCK 上升沿,Cpature-DR 状态时)。

        PRELOAD。PRELOAD 指令有效期间,BSR 相关的 shift-register 中状态值装载到 hold 部件中去(在TCK下降沿,Update-DR 状态时)。

Test Acess Port

 

 控制信号

        ClockIR,ShiftIR,UpdateIR 用于指令寄存器

        ClockDR,ShiftDR,UpdateDR 用于数据寄存器

        Select,Reset,Enable 为额外的通用信号

TAP 控制器状态机

        状态转换发生于 TCK 上升沿,输出值在 TCK 下降沿变化。

        TAP 状态机初始化在 Test_Logic Reset 状态,即睡眠状态。

         如果没有 TRST* 端口,则芯片上电全局复位必须能够复位 TAP 控制器到Test_Logic Reset 状态,如果后续需要初始化控制器,可以通过连续 5 个 TCK cycle 的 TMS 1 将控制器同步复位。

BYPASS 寄存器

 Device Identification Register

 

Boundary-Scan Register

Boundary-Scan Cells

        Basic Boundary-Scan Cell——BC_4

        BC_4 类型的boundary-scan cell 包含 capture 和 shift ,但是不具有 update 功能。IEEE Std 1149.1 协议中对于 input scan cell 不需要 update 功能。这种基本类型的 cell 可以用于器件内对于额外负载敏感的输入信号,比如系统时钟信号。如下所示Data_In (from system pin)到 Data_Out(to system logic)之间为纯function path,没有任何 dft 插入的逻辑。BC_4 cell的好处比较少,它只具有一个flip-flop和一个MUX。它只具有观测能力,但是不具备控制能力。因此,BC_4 BSR cell 不支持 INTEST 指令。

        BC_1 Cell

        BC_1 类型的boundary-scan cell 包含 capture,shift 和 update 功能。这种类型的 cell 可以用于输入端口和输出端口。Boundary-scan cell 具有单独的寄存器分别用于 shift 和 hold 功能。

       如果不想用这些指令把保存在 boundary-scan 寄存器中 preload 的数据用于驱动 output 端口,那么这些指令就没有必要确定mode信号的状态。反而,必须添加 HIGHZ 指令到 output 使能逻辑上,用来强制每个系统输出端口为一个无效驱动状态。

        BC_1 cell 放在输入端口处可以支持 INTEST 指令。

        BC_2 Cell

        BC_2 类型的 boundary-scan cell 与 BC_1 类似,区别是mode信号有效时, BC_1 捕获输入端口值(Data_In),而 BC_2 捕获 Update 寄存器的值。

        IEEE Std 1149.1 不支持 BC_2 用于 output2 上的 INTEST 指令。output2 是一种驱动两种状态输出的单元(对称或者非对称)。

         BC_7 Cell

        BC_7 用于双向端口的boundary-scan cell。BC_7 cell 在同一时间内只能配置一种功能。它非常适合于双向端口测试,在某一时刻作为输入端口或者作为输出端口。

        首先,边界扫描单元必须插入在器件上除了“Power”、“Ground”和其他模拟信号外的所有输入和输出信号引脚上。 引脚和边界扫描单元之间不能插入除了驱动放大器或其他形式的模拟电路之外的组合逻辑。

        输入引脚上插入boundary-scan cell,每个输入端口可以被设置为独立的值,因此这提供了最大的灵活性,能够进行intest测试,并且可以帮助检查输入端口到boundary-scan cell 之间线路上开路和短路故障。

        输出引脚上插入boundary-scan cell,每个输出管脚可以设置独立的值,提供EXTEST测试能力。

        对于三态输出管脚,必须有一个boundary-scan cell 用于输出驱动buffer上控制信号。

        对于双向的I/O管脚,需要三种boundary-scan cell,输入侧放置一个,输出侧放置一个,I/O 状态控制端放置一个。当然,也可以使用一个BC_7类型的boundary-scan cell 并结合一个控制I/O 状态的控制 cell 以实现相同的效果。

什么是linkage ports?

        通常而言,模拟端口、电压参考端口,特殊功能数字端口不希望被插入boundary-scan cell,可以使用 set_bsd_linkage_port 命令设置指定这些端口不插入BSR。对于这些设置的端口,工具不会进行合规检查,也不会报警告或者错误信息在这些端口上,工具不会在这些端口上产生向量,在BSDL中,linkage端口被描述为linkage bits。

TAP 控制器初始化

        IEEE Std 1149.1 支持三种方式初始化 TAP 控制器。

        1. 异步复位。使用端口TRST* 端口来复位TAP 控制器;此后可以使用TMS和TCK同步复位。

        2. 上电复位。可以使用上电复位单元(Power-Up Reset,PUR)取代接管TAP控制器上的TRST* 端口来复位TAP控制器;此后可以使用TMS和TCK同步复位。

        3. 同步复位。使用TMS和TCK进行同步复位,TMS需要保持最少五个TCK周期为1。

Boundary-scan 实现类型:异步或同步

        set_bsd_configuration -style synchronous | asynchronous

        异步实现方式。clock_dr和update_dr为tck经过门控之后的信号,clock_dr连接BSR的capture_clk,update_dr连接BSR的update_clk。这种实现方式的优点是节省面积(有限),缺点是时序难以收敛。

         同步实现方式。TCK直接连接到BSR的capture_clk引脚上,以及经过反向后的时钟连接到BSR的update_clk引脚上。因为TCK信号一直在翻转,boundary-scan cell会持续进行采样,因此BSR中的寄存器需要有保持数据机制。因为tck直接连接时序单元,在做时钟树时可以做到较小的偏斜,进而更加有利于时序收敛。缺点是数据保持机制增加了面积。

        工具会在三态输出端口上面插入数据和控制 BSR cell,对于退化的双向端口只用于output时,只有数据 BSR cell会被插入(OE tied 1)。控制BSR 为BC_2类型的cell,数据 BSR 为BC_1类型。每个三态输出端口都提供一个控制 BSR cell,这种实现方式可以地反射问题(ground bounce),可以使得板级测试向量软件在某一时间只激活一个三态输出,减少因为信号转变引起的噪声。可以使得几个三态输出端口共享控制使能信号进行优化,减少三态控制BSR插入的个数,以及Shift-DR的周期个数。

        双向端口插入同步DW BC_7 BSR Cell

        可用于输入端口的BSR cell:BC_1, BC_2, BC_4, BC_7

        可用于输出端口和三态输出端口的BSR cell:BC_1, BC_2

        可用于控制使能信号的BSR cell:BC_1, BC_2

        可用于双向端口的BSR cell:BC_7

指令码分配

        BYPASS指令使用全1指令码;

        SAMPLE 和 PRELOAD 可以共享一个指令码,合并为一个SAMPLE/PRELOAD指令;

        所有未使用的指令码会被映射为BYPASS指令。如果没有给任何指令分配全0指令码,则全0指令不会被用到,默认指令设置为BYPASS指令。

IEEE Std 1149.6

        AC_1是BC_1 cell 改变而来,支持INTEST测试指令,只支持output2和output3 类型端口。

         AC_2是BC_2 cell 改变而来,不支持INTEST测试指令,只支持output2和output3类型端口。

        AC_7是BC_7 cell 改变而来,支持INTEST测试指令。

通常的AC pin 驱动结构如下

        一个支持IEEE Std 1149.1指令和AC的引脚驱动程序的可能实现IEEE Std 1149.6提供的测试功能如下图所示。

TestMAX DFT Boundary Scan

Greating BSD Test Pattern

Generating Test Patterns    

 

        一般而言,需要生成5种独立的测试向量集。如果 TRST* 端口存在,每个向量集开始都会通过assert TRST*端口异步复位boundary-scan逻辑。通过这种方式产生的向量可以独立使用和仿真。5种向量集包括:

        1. boundary-scan逻辑复位机制测试向量

        2. TAP 控制器转变测试向量

        3. 指令和tdr(test data register)向量

        For each of the instructions defined in the boundary-scan logic, the path from TDI to TDO is
tested. For each instruction, one of the test data registers should be selected. The vectors generated depend on the register selected, and every sequence of logic bits should flow transparently from TDI to TDO.

        对于 HIGHZ 指令,检查输出端口的状态,确保其为高阻态。

        对于CLAMP 指令,检查输出端口的状态,确保其值为先前 BSR 被 SMAPLE 和 PRELOAD 命令在 Update 阶段载入的状态值。

        对于SAMPLE 和 PRELOAD 指令, 测试值被施加到并行输入端口,然后值被捕获到shift-register里面并移出比较。

        4. boundary-scan 寄存器测试向量

        使用 SAMPLE, PRELOAD 和 EXTEST 指令,测试BSR确保每个cell能够在它的并行输入端口捕获到值,以及能够施加值在它的并行输出端口。

        5. 漏电失效测试向量

        如果设计中包含三态输出驱动,这些端口通过 SAMPLE 和 PRELOAD 指令设置为highz态,然后测试这些IO的漏电。             

        dc_parametric 向量(包含leakage + bsr向量)可以测试 I/O 电压和电流强度,使用 SAMPLE、PRELOADEXTEXT 指令。Leakage 向量可以测试 I/O 漏电流强度。Bsr 向量可以测试DC特性,比如输入阈值电压 Vil/Vih 或电流 Iil/Iih 和输出阈值电压 Vol/Voh 或电流 Iol/Ioh。

        测试输入阈值电压或电流:施加激励值0到所有的输入端口 -> BSR 从输入端口捕获值 -> 通过移位寄存器移出 -> 比较TDO端口输出流值;施加激励值0到所有的输入端口 -> BSR 从输入端口捕获值 -> 通过移位寄存器移出 -> 比较TDO端口输出流值;

        测试输出阈值电压或电流:TDI端口移入一连串值“0”到所有boundary-scan寄存器中 -> 在BSR update阶段更新被移进的值 -> strobe输出端口,采样值和“0”比较;TDI端口移入一连串值“1”到所有boundary-scan寄存器中 -> 在BSR update阶段更新被移进的值 -> strobe输出端口,采样值和“0”比较;

        使用 bsd_max_in_switching_limit 和 bsd_max_out_switching_limit 变量控制多少输入和输出端口可以同时切换。默认情况下所有的输入/输出端口同时切换,但是这可能引起地反射。

        By default, the DC parametric patterns test all static values for the design ports for leakage
characterization, but they do not test all possible value transitions for switching characterization.         By default, the following values and transitions are tested:
        • Input ports
                X -> 0
                0 -> 1
        • Bidirectional ports as inputs
                X -> 0
                0 -> 1
        • Two-state output ports
                X -> 0
                0 -> 1
        • Three-state output ports and bidirectional ports as outputs
                Z -> 0
                0 -> 1
        To also test all value transitions, set the following variables:
        dc_shell> set_app_var test_bsd_input_ac_parametrics true
        dc_shell> set_app_var test_bsd_new_output_parametrics true

        In this case, the following values and transitions are tested (with the new transitions
highlighted):
        • Input ports
                X -> 0
                0 -> 1
                1 -> 0
        • Bidirectional ports as inputs
                X -> 0
                0 -> 1
                1 -> 0
        • Two-state output ports
                X -> 0
                0 -> 1
                1 -> 0
                X -> 1
        • Three-state output ports and bidirectional ports as outputs
                Z -> 0
                0 -> 1
                1 -> 0
                Z -> 1

Writing STIL and other pattern file

        write_test
        -format stil | wgl_serial | verilog
        [-output output_vector_file_name]       

      • stil – Generates a STIL file (.stil) that contains test patterns. You can use the stil2verilog utility to create a Verilog testbench for the patterns. This testbench format allows you to simulate the exact patterns used on the tester. 
        • wgl_serial – Generates a WGL file (.wgl) that contains test patterns in serial WGL format.
       • verilog – Generates a single Verilog testbench file (.v) that applies and simulates the test patterns; the patterns are contained in the Verilog file. This testbench file contains comments that are useful for debugging.

测试程序初始化配置

        在boundary-scan测试向量执行前,需要芯片初始化配置来控制芯片正常工作,比如 pad cell 或者 power domain 操作。这些初始化操作信息可以统一到 boundary-scan 测试程序中。

        两种方式实现初始化配置。

        如果配置寄存器是user-defined test data registers(UTDRs):

                1. 使用 set_dft_signal 和 set_scan_path 命令定义每个配置 UTDR

         set_dft_signal -view spec -type tdi -hookup_pin UPAD_UTDR/tdi
         set_dft_signal -view spec -type tdo -hookup_pin UPAD_UTDR/tdo
         set_dft_signal -view spec -type bsd_shift_en -hookup_pin UPAD_UTDR/bsd_shift_en
         set_dft_signal -view spec -type capture_clk -hookup_pin UPAD_UTDR/capture_clk
         set_dft_signal -view spec -type update_clk -hookup_pin UPAD_UTDR/update_clk
         set_dft_signal -view spec -type bsd_update_en -hookup_pin UPAD_UTDR/bsd_update_en
         set_scan_path -class bsd PAD_CONFIG_REG \
                                  -view spec -exact_length 5 -bsd_style synchronous \
                                  -hookup { \
                                           UPAD_UTDR/tdi \
                                           UPAD_UTDR/tdo \
                                           UPAD_UTDR/bsd_shift_en \
                                           UPAD_UTDR/bsd_update_en \
                                           UPAD_UTDR/update_clk \
                                           UPAD_UTDR/capture_clk}

                2. 使用 set_bsd_instruction 命令-bsd_init_data 选项指定选择配置 UTDR 的初始化值

                set_bsd_instruction -view spec CONFIG_PADS \
                        -register PAD_CONFIG_REG -bsd_init_data 10001

                set_bsd_instruction -view spec CONFIG_POWER \
                        -register POWER_CONFIG_REG -bsd_init_data 0110

                3. 使用 create_bsd_patterns 命令-setup_instructions 选项列出配置指令

                        create_bsd_patterns -setup_instructions {CONFIG_PADS CONFIG_POWER}

                4. 使用 write_test 命令写出向量文件

        如果使用自定义的test_setup初始化程序:

                1. 创建一个STIL 协议的文件,其内容包括 test setup 程序用于初始化配置寄存器。这个         初始化程序必须返回到 TAP 控制器 Run-Test-Idle 状态。

                2. 读入 test setup 程序

                        read_test_protocol -section test_setup bsd_test_setup.spf

                3. 使用 create_bsd_patterns 命令-bsd_test_setup 选项合并test setup程序到测试程序

                        create_bsd_patterns -bsd_test_setup enable

                4. 使用 write_test 命令写出向量文件

        默认情况下,boundary-scan 测试在执行测试程序时可能会执行多次boundary-scan 复位操作,初始化配置寄存器的复位端可能连接到boundary-scan reset信号,多次复位操作可能引起配置寄存器丢失初始化值。因此,在使用create_bsd_patterns命令产生向量时,使用-jtag_reset选项来抑制在测试程序执行时boundary-scan 复位。

        set_bsd_instruction -view spec CONFIG_PADS \
                                        -register PAD_CONFIG_REG -bsd_init_data 10001
        create_bsd_patterns \
                                        -setup_instructions {CONFIG_PADS} \
                                        -jtag_reset disable

        在这种情况下,工具创建一个test_setup程序,该程序在载入指定的配置寄存器前assert boundary-scan 复位信号,但是会抑制测试程序所有随后的boundary-scan复位信号

        或者

        read_test_protocol -section test_setup bsd_test_setup.spf
        create_bsd_patterns \
                                        -bsd_test_setup enable \
                                        -jtag_reset disable

        在这种情况下,提供的test_setup程序中负责assert boundary-scan复位,并且初始化配置寄存器,工具会抑制测试程序所有随后的boundary-scan复位信号

        如果生成的是 tap_controller 或 reset 类型的向量,则-jtag_reset disable选项失效,因为这两个类型的向量必须assert boundary-scan 复位信号。如果指定了向量类型为 all ,则 tap_controller和 reset 向量就会从测试程序中删掉。

        只有STIL和WGL向量格式支持 bsd 测试向量初始化程序,Verilog格式不支持定制初始化程序

基于BSDL测试向量生成

        BSDL-based测试向量生成流程允许直接从BSDL文件产生向量,而不需要读入设计。如下图所示(红色圈为可选,如果读入design,则只有design中的 linkage ports 在 testbench 中被当作design ports)。

        如下是一个产生测试向量的脚本实例(灰色部分为可选)

        set search_path [list "." ./lib $search_path]
        set synthetic_library [list standard.sldb dw_foundation.sldb]
        set target_library [list class.db]
        set link_library [concat "*" $target_library $synthetic_library]

        read_file -format verilog f_bsd.v
        current_design test
        link

        read_bsdl f_bsd.bsdl
        create_bsd_patterns
        write_test -format stil -output f_stil
        write_test -format verilog -output f_verilog_tb
        write_test -format wgl_serial -output f_wgl_serial   
    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值