【Tessent】【DftSpecification】【1】【IjtagNetwork】(3) Sib&Tdr


Sib


A wrapper that specifies the creation and, optionally, the insertion of a Segment Insertion Bit (SIB) into the IJTAG network. (用于创建并插入 SIBs。)

Usage

在这里插入图片描述

Descriptions

SIB 是 IJTAG 中的一个特殊节点,它包含了一个单 bit 移位寄存器

当该 bit 为 0 的时候,SIB bypass 连接到它的 host port 的 client nodes;当该 bit 为 1 的时候,SIB 会将连接到它的 host port 的 client nodes 包含在内,将其(client nodes)作为 active scan path 的一部分。【所以在访问的时候,是先向 sib 中 shift 数据,然后再向连接到 scan path 的 instruments 中 shift 数据?需要结合具体的实例确认】

SIB 的内部结构如下图所示:

在这里插入图片描述

当 update_en 激活时,移位寄存器的值在 TCK 的下降沿被所锁存到 update stage。

to_select_en 的 transition 会延时一个 TCK 周期,以避免 SIB 和它的 clients 之间 TCK 不完全平衡导致的时序竞争。

reuse_modules_when_possible 被设置为 on (或者 DftSpecification wrapper 中推断出它是 on),SIB 模块名称被硬编码为 design_name_design_idtessent_sib#,其中 # 是一个从1开始不断增大的整数。工具会为 Interface wrapper 中的端口名称和Attributes wrapper 中的 attributes 创建唯一的 module。

reuse_modules_when_possible 被设置为 off 时,SIB 模块名称被硬编码为 design_name_design_id_tessent_sib。

正如 create_dft_specification 命令中的描述,在 scan 中需要保持 active 的 instruments 会被插入到一个 SIB 下,而用于 scan tested(如 memory BIST 控制器)的 instruments 会被插入到另一个 SIB 下面。

(这里还有内容,后面补充)

Arguments

(待补充。。。)

Examples

使用 SIBs 分别访问复杂 network 的多个部分

如下图所示,network 的顶层有三个 SIBs。

第一个 SIB 最靠近 scan-out,它的 id 是 “logictest_hw”,用于访问生成扫描模式使能信号的 TDR。因为这个 TDR 的 id 是 “scan_modes”,所以 keep_active_during_scan_test 默认是 on,这会使得顶层的三个 sibs 的该属性也别设置为 on。

第二个 SIB 的 id 为 “scannable_instruments”,用于访问所有在 scan test 中不需要保持 active 的 instruments。这个 SIB 在 scan test 模式下会保持关闭状态,从而使 network 的其他部分保持稳定状态,并提供一些稳定且不受干扰的 test_setup values。【hook up 是连接的意思】

第三个 SIB 的 id 为 “child_cores”,用于访问一个 SIBs chain。串成链的 SIBs 单独为每个 child core 开启 scan path。这些 SIBs 的存在可以保证访问其他的 cores 的时候绕过有缺陷的 core 或者是断电的 core。

在这里插入图片描述

上述 IjtagNetwork 在 DftSpecification 的描述如下所示:

DftSpecification(top,setup_hw) {
  IjtagNetwork {
    HostScanInterface(ijtag){
      Sib(logictest_hw) {
        Tdr(scan_modes) {
          DecodeSignal(edt) {
            decode_values : 2'b01, 2'b10 ;
          }
          DecodeSignal(edt_config2) {
            decode_values : 2'b10 ;
          }
          DecodeSignal(multi_bypass) {
            decode_values : 2'b01, 2'b10, 2'b11 ;
          }
          DecodeSignal(scan_test_en) {
            decode_values : 2'b01, 2'b10, 2'b11 ;
          }
        }
      }
      // Everything below this Sib is scan tested.
      // This sibs remains off when setting up logictest_hw
      sib(scannable_instruments) {
        sib(mbist1) {
        }
        sib(mbist2){
        }
      }
      sib(child_cores) {
        sib(c1){
          DesignInstance(corea_i1) {
          }
        }
        sib(c2){
          DesignInstance(corea_i2) {
          }
        }
        sib(c3){
          DesignInstance(corea_i3) {
          }
        }
      }
    }
  }
}

Interface

A wrapper that contains a Client and Host wrapper that together fully specify the client and host ports.

Usage

在这里插入图片描述

Description

8 个 client ports 和 8 个 host ports 都在这里指定。

简单来说就是定义端口名称。标准中规定 Sib 有 16 个不同功能的端口,这里就是告诉工具每个功能端口的在实际设计中的端口名称。(实际设计中端口命名可能是工具可以识别的默认端口名称不一样。)


Tdr


A wrapper that specifies the creation and, optionally, the insertion of a TDR inside the IJTAG network.

Usage

在这里插入图片描述

Description

一个 3bit TDR 的内部结构图如下所示,它有几个数据输入端口、数据输出端口以及解码输出端口。

当需要 data-out ports 或者是 decoded signals 时,默认情况下总是使用 shift stage 和 output port 之间的 update stage。(这里的 stage 是电路一级一级的意思。)

在具有的 decoded signals 的情况下,解码逻辑位于 shift stage 和 update stage 之间。

如果 shift 的过程中,数据的跳变(data bits toggle)是无关紧要的,那么 update stage 是可以移除的。

如果输出数据被用作 IJTAG network 的使能信号(enable or disable),为了避免出现竞争,输出时间必须有额外的延时。

TCK 时钟只需要在 TDR 的内部进行平衡。因为 Tdr 的 scan-out 端口和 Sib nodes 之间使用了负边沿触发的 flip-flop,所以可以最多可以容忍 50% 的 TCK 周期。(这个内容应该是和时钟树综合有关。)

TDR module 的名称被硬编码为: design_name_design_id_tessent_tdr_id

在这里插入图片描述

Update Stage Timing

(后面补充,,,)

Argument

  • id
    只能包含字母、数组和下划线的唯一 id。 IjtagNetwork wrapper 中的每一个 Tdr Wrapper 的 id 不能相同。

  • parent_instance : instance_name
    指定实例化 TDR module 的 parent instance。如果没有指定,TDR 会实例化到 DataInPorts、DataOutPorts 和 DecodedSignal 所在的实例中。
    可以使用该选项将 TDR 放到不同的位置。
    可以指定 “.” 作为 parent_instance ,迫使 TDR 被放置在 root module,使其不再依赖端口的连接关系。
    如果 TDR 没有指定 DataInPorts 和 DataOutPorts 的连接关系,parent_instance 默认为 root module。

  • length : integer
    指定移位寄存器的长度。 默认情况下,移位寄存器的长度足以满足 DataInPorts/count、DataOutPorts/count 或 DecodedSignal/decode_values 中指定的内容。

Examples

对图 10-20 中所示电路的描述如下所示。

output_timing用于满足 ijtag_scan_selection 的时序需求,它会使一些输出 unlatcch 或者具有额外的延时。

Dftsepcification(MyCore,rtl){
	IjtagNetwork {
	  HostScanInterface(purple) {
	  }
	    Tdr(blue) {
	  	  length					: 3 ;
	  	  extra_bits_capture_value	: self ;
	  	  DataOutPorts {
	  	    count			 : 3 ;
	  	    port_naming      : Dout[%d];
	  	    output_timing(0) : ijtag_scan_selection ;
	  	    output_timing(1) : normal ;
	  	    output_timing(2) : unlarched ;
	  	  }
	  	  DataInPorts {
	  	    count       : 1 ;
	  	    port_naming : Din%d ;
	  	  }
	  	  DecodedSignal(SigA) {
	  	    decode_values : 3'bx00;
	  	    output_timing : ijtag_scan_selection ;
	  	  }
	  	  DecodedSignal(SigB) {
	  	    decode_values : 3'bx01 ;
	  	    output_timing : normal ;
	  	  }
	  	  DecodedSignal(SigC) {
	  	    decode_values : 3'bx1x ;
	  	    output_timing : unlatched ;
	  	  }
	  	}
	  }
	}
}

Interface


A wrapper that provides properties to fully specify the names of the eight client ports of the TDR.

在这里也可以定义 reset 端口的有效电平。

Uasge

在这里插入图片描述

这里的意思就是定义端口的功能。

【Tdr模块一般是自己在 Dft Specification 中定义,然后工具自动插入到设计中。在定义 Tdr wrapper 的时候,可以不在 interface 中指定端口名称,这样工具在插入 Tdr 的时候会使用默认的端口名称。如果在 interface 中定义了端口名称,工具就使用给定的名称。】

Examples

在这里插入图片描述

【这 8 个端口只固定死的,所有插入的 Tdr 至少都会有这 8 个端口。】

【如下图所示,即 Dft Spec 中定义名称为 PERIPLL_CFG1 的 Tdr,只指定了输入端口,然后最终生成的 Tdr 中也是包含 8 个控制端口的, 这些端口的名称使用的是默认名称。】

定义:
在这里插入图片描述
实现:
在这里插入图片描述


DataInPorts

A wrapper that specifies the number (count) of data-in ports to create on the TDR, the naming of the ports, and the connections to make to them.

(指定所创建的 TDR 上数据输入端口的数量、名称和链接关系)

Uasge

在这里插入图片描述

Arguments

  • count : integer
    指定 TDR 上所需要的 data-in bits 的数量。
  • port_naming : port_naming, ...
    指定 data-in ports 的名称
    port_naming 的值有两种不同的格式:① 使用符号的单一字符串;② 带有 explicit sizes 的端口列表。
  • connection(range) : pin_name
    指定 data-in ports 和设计中存在的引脚之间的连接关系。可以重复多次。range 就是 TDR 的 data-in 端口具体的 bit 位。
    因为 data-in ports 是接收端口,相同的 bit 不能被连接到多个 source,所以多个 connection 的 range 索引不能重叠。
    如果 pin_name 是总线,并且使用process_dft_specification -no_insertion命令,必须指定目标引脚的完整范围(因为无法从设计中提取)。

Examples

示例1

定义两个 data-in ports ,并将其连接到设计示例的 instance 上。

DftSpecitication(MyCore,rtl){
  IjtagNetwork {
    HostScanInterface(purple) {
      Sib(orange) {
        Tdr(orange) {
          DataInPorts {
            connection(0) : u2/top_green/go   ;
            connection(1) : u2/top_green/done ;
          }
        }
      }
    }
  }
}

DataOutPorts

A wrapper that specifies the number (count) of data-out ports to create on the TDR, the naming of the ports, the output_timing of the ports, and the connections to make to them.

(输出端口的数量、名称和连接关系)

Uasge

在这里插入图片描述

Arguments

  • multiplexing : on | off | auto
    指定在连接到 pin_name 的时候是否需要添加 mux 。默认值是 auto。
    当设置为 auto 时,如果 pin 没有连接或者连接到一个固定值,或者连接到没有扇入 net,工具都会插入一个 mux。一旦连接关系中需要插入 mux,工具还会自动添加一个额外的 date-out port 来控制 mux 。
    mux 会被插入到 pin_name 所在的 parent_instance 。

Examples

指定 data-in 和 data-out 端口的名字。
data-in 端口是单 bit 的,名字为 “locked”;data-out 端口有 7 个。输出端口的最低位 connection(0) 连接到了 div[0],connection(5) 连接到了 mult[2] 。

DftSpecitication(clk_gen,bottom_up) {
  IjtagNetwork {
    HostScanInterface(ijtag) {
      Tdr(1) {
        DataOutPorts {
          connection(5:3) : pll/mult[2:0] ;
          connection(2:0) : pll/div[2:0] ;
          port_naming     : mux_sel,mult[2:0],div[2:0] ;
        }
        DataInPorts {
          connection(0) : pll/locked ;
          port_naming   : locked ;
        }
      }
    }
  }
}

Multiplexing 没有指定值,所以应该是默认是 auto。因为 pll/mult[2:0] 和 pll/div[2:0] 这两个 pins 还有 functional source,所以会插入 mux,data-out 端口的第 7 个 bit 命名为 mux_sel ,用以控制 mux。

在这里插入图片描述


DecodedSignal

A wrapper that specifies the creation of a decoded signal.

Uasge

在这里插入图片描述

decode_values 用于指定 TDR 的哪些值可以激活解码信号。

Arguments

  • decode_values : binary_code, ...
    指定一个二进制编码列表,用于定义 decoded signal 的激活条件。二进制编码的宽度必须和 TDR 一样,编码中可以包含 X 值,但是保证至少有一个 0 或者 1。

(遗留问题:decoded signal 的输出取决于什么? )

<think>我们正在讨论Tessent工具的系统模式(SystemMode)使用和配置。Tessent是西门子EDA(原MentorGraphics)的一款用于芯片测试和可测试性设计(DFT)的工具。系统模式通常指的是在芯片正常功能模式下执行测试,而不是在专用的测试模式下。这种模式允许在系统环境下进行测试,比如在板上或系统内测试。根据用户的问题,我们需要介绍Tessent系统模式的使用和配置方法。由于Tessent是一个复杂的工具,这里我们将概述关键步骤和概念。###Tessent系统模式概述系统模式测试允许在芯片正常工作的时钟和电源条件下执行测试,这通常通过芯片的功能接口(如JTAG、I2C、SPI等)来访问测试结构。在系统模式下,测试控制器(如TessentTestKompress)可以被配置为通过功能接口接收测试指令和数据,并控制芯片内部的测试结构(如扫描链、内建自测试BIST等)[^1]。###配置步骤1.**定义测试访问机制(TAM)**:在系统模式下,需要确定如何通过功能接口访问测试控制器。通常使用JTAG作为TAM,但也可以使用其他功能接口。配置TAM包括设置TAP控制器(TestAccessPort)和指令寄存器。2.**配置测试控制器**:在TessentShell中,使用`create_test_controller`命令创建测试控制器,并指定其与TAM的连接。例如:```tclcreate_test_controller-clockclock-resetreset-tamjtag```3.**设置测试协议**:定义测试控制器如何与内部测试结构通信。例如,对于扫描测试,需要定义扫描输入/输出、扫描使能信号等。在系统模式下,这些信号通常通过功能接口进行复用。4.**插入测试逻辑**:使用Tessent工具插入必要的测试逻辑(如扫描链、BIST控制器等),并确保这些逻辑在系统模式下可访问。这通常涉及在顶层集成测试控制器和测试结构。5.**生成测试向量**:在系统模式下生成测试向量时,需要考虑如何通过TAM将测试数据传送到内部扫描链。TessentTestKompress可以生成适合系统模式传输的压缩测试向量。6.**验证测试协议**:在RTL或门级网表上验证测试访问机制和测试协议的正确性。可以使用Tessent的协议验证功能。###系统模式下的测试执行在系统模式下执行测试时,测试向量通过功能接口(如JTAG)被送入芯片。测试控制器解析这些向量并控制内部测试结构执行测试。测试结果同样通过功能接口读出。###注意事项-**时钟和复位**:在系统模式下,测试使用功能时钟和复位,因此需要确保测试逻辑在这些条件下正常工作。-**电源管理**:如果芯片有电源管理功能,需要确保测试过程中不会触发不必要的电源状态转换。-**接口复用**:功能接口在测试模式下被复用为测试访问接口,需要确保在测试过程中不影响其他功能。###示例配置脚本以下是一个简化的TessentShell脚本,用于配置系统模式测试:```tcl#设置设计read_verilogtop.vset_toptop#创建JTAGTAP控制器create_clock-nametck-period100create_port-nametms-inputcreate_port-nametdi-inputcreate_port-nametdo-outputcreate_port-nametrst_n-inputcreate_tap-namejtag-clocktck-resettrst_n-enabletms-tditdi-tdotdo-irlen4#创建测试控制器并连接到JTAGcreate_test_controller-nametest_controller-clockclk-resetrst_n-tamjtag#添加扫描链add_scan_chains-namescan_chain1-inscan_in-outscan_out-shift_enscan_en#生成测试向量create_atpg_patterns-formatserial-system_mode#写入测试向量write_patternssystem_test_patterns.stil-formatstil-system_mode```###相关问题1.系统模式测试与传统的测试模式有什么区别?2.在系统模式下如何调试测试访问问题?3.Tessent系统模式支持哪些测试类型(如扫描测试、MBIST、LBIST等)?[^1]:Tessent工具文档中关于系统模式配置的部分。[^2]:测试向量生成和传输的说明。</think>### Tessent系统模式使用与配置方法 Tessent的系统模式(System Mode)是用于芯片在正常工作环境下执行测试的关键功能,通过复用功能接口实现测试访问,无需额外测试引脚。以下是核心配置步骤和使用方法: #### **1. 系统模式架构** - **访问机制**:通过JTAG TAP控制器或功能接口(如I2C/SPI)访问嵌入式测试控制器(如Tessent TestKompress)。 - **测试协议**:使用IEEE 1687(IJTAG)标准管理测试结构层次[^1]。 - **数据流**:测试向量通过功能接口加载,由内部测试控制器分发至扫描链、MBIST等结构。 #### **2. 配置流程** ```tcl # 示例:Tessent Shell配置脚本 create_test_controller -name sys_test_ctrl -clock functional_clk -reset sys_reset_n set_system_mode -enable -access_port jtag_tap # 绑定JTAG为系统模式访问接口 insert_test_structures -scan -mbist -system_access # 插入测试结构并启用系统访问 generate_atpg_patterns -system_mode -format SERIAL # 生成系统模式专用测试向量 ``` **关键参数**: - `-access_port`:指定功能接口(JTAG/I2C等) - `-system_clock`:设置功能时钟域 - `-serialize_patterns`:控制向量串行化以适应带宽限制 #### **3. 系统模式测试执行** - **向量传输**: 测试向量通过功能接口分帧传输,由测试控制器解码后注入扫描链。 *例如:单个ATE周期传输的向量在系统模式下需拆分为多个功能时钟周期*[^2]。 - **结果回读**: 测试响应通过相同接口压缩回传,使用MISR(多输入特征寄存器)压缩数据。 #### **4. 调试与验证** - **协议检查**: `check_system_access_protocol` 验证接口时序是否符合IJTAG标准。 - **故障注入**: 使用`fault_injection_simulation -system_mode`模拟系统环境下的故障响应。 - **带宽优化**: 通过测试调度(Test Scheduling)减少接口带宽需求: $$ \text{最小带宽} = \frac{\text{扫描数据量}}{\text{测试时间窗口}} $$ #### **5. 应用场景** - **板级测试**:在PCB上直接执行芯片测试,无需ATE。 - **系统内自检**:上电时通过固件触发自测试(如汽车电子功能安全ISO 26262)。 - **多芯片互连测试**:通过系统总线测试3D IC堆叠中的相邻芯片。 #### **注意事项** 1. 时钟同步:确保测试控制器时钟与功能时钟域同步。 2. 电源管理:测试期间需屏蔽休眠模式,避免电压域关闭。 3. 接口冲突:功能接口复用需硬件仲裁逻辑,防止测试与正常操作冲突。 --- ###
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值