Tdr
- Overview
- Arguments
- Example
- Update Stage Timing
- Interface
- DataInPorts
- Arguments
- Examples
- DataOutPorts
- DecodedSignal
Overview
A wrapper that specifies the creation and, optionally, the insertion of a TDR inside the IJTAG network.
Tdr Wrapper 中包含的内容如下:
Arguments
id
一个只能包含字母、数组和下划线的唯一 id,也就是 Tdr 的名称。 IjtagNetwork wrapper 中的每一个 Tdr Wrapper 的 id 不能相同。
so_retiming : on | off
用来指定 scan_out 信号上是否需要一个 retiming element,默认值是 on。
如果 so_retiming 为 on,Tessent 工具在插入 TDR 的时候会在 scan_out 端口插入一个负沿触发的 reg,用于 scan chain retiming。
parent_instance : instance_name
指定 TDR 插入的位置。
如果没有指定内容,TDR 会被插入到同时包含 DataInPorts、DataOutPorts 和 DecodedSignal 的那个 instances 中。
使用该选项将 TDR 放到不同的位置,如果将 parent_instance 设置为
.,TDR 会被强制放在 root module,不再依赖其端口的连接关系。如果 TDR Wrapper 中没有指定 DataInPorts 和 DataOutPorts 的连接关系,parent_instance 默认为 root module。
如果 parent_instance 是一个 repeated module 的 instance(直接指定或者是工具推断出的某个默认值),Tessent 工具在 Vaildation 阶段会给出一个 wraning,然后自动使用
uniquify_instances命令来对 instance_name 指定的 instance 进行 uniquify。(所谓 uniquify 就是创建一个新的 module,只给当前 instance 使用。)如果想要在 IjtagNetwork Insertion 的时候不对 repeated module 进行 uniquify,可以将 current design 设置为对应的 module,在该 module 中插入 IJTAG Network,然后在 next level 的时候,将其设置为 DesignInstance wrapper。
leaf_instance_name : leaf_instance_name
指定 TDR 的 leaf instance name.
如果没有指定内容,默认值是 design_name_design_spec_id_tessent_tdr_tdr_id_inst,其中 design_spec_id 是 DftSpecification wrapper 中指定的 id,tdr_id 是当前 Tdr 的 id。
Tessent 工具在例化 TDR 的时候会检查是否已经有同名的 tdr 存在,可以使用
set_insertion_option命令来指定 uniquification suffix。Tessent 工具生成的 Tdr 的 module name 为 design_name_design_id_tessent_tdr_id,末尾的 id 指的是当前 Tdr 的 id。
当 DftSpecification 中的 reuse_modules_when_possible 属性的值是 off 的时候,Tessent 工具会为每一个 Tdr Wrapper 创建唯一的 module;当其为 on 的时候,如果 tdr wrapper 中定义的内容相同,工具会复用 TDR module,而不是创建一个新的。
keep_active_during_scan_test : on | off | auto
指定连接到该 TDRs 的所有 nodes 在 Scan Test Mode 都保持 active。
length : integer
指定移位寄存器的长度。
默认情况下,移位寄存器的长度足以满足 DataInPorts/count、DataOutPorts/count 或 DecodedSignal/decode_values 中指定的内容。
extra_bits_capture_value : 0 | 1 | self
TDRs 位宽中超出指定值部分的值。
A property that applies to the upper bits of the TDR when the length is larger than the DataInPorts/count value.
The specified values control what the extra shift register bits capture during the capture cycle.
reset_value : binary
指定 DataOutPorts 和 DecodedSignals 的复位值。
Attributes/attribute_name : attribute_value
A data wrapper that defines arbitrary attributes in the TDR ICL module.
Example
一个 3bit TDR 的内部结构和端口如下图所示:
其对应的 Spec 文件如下:
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;}}}}}如果 Tdr Wrapper 中定义了>Update Stage Timing
IJTAG Network 和 IEEE 1149.1 或 IEEE 1500 Network 的结构是十分相似的,但是在 IJTAG Network 中 TDR 的输出可以用作部分 Network 的的使能信号。
如果 Tdr 的输出数据被用作部分 IJTAG Network 的使能信号(enable 或 disable),为了避免出现竞争,输出端口需要额外增加额外的延时。
如下图所示的电路,update_en 使能之后,S1 在 tck1 的下降沿(有效沿)到来之后发生变化。
如果 Soure Box 中没有 delay stage,S1 处的变化并迅速传递到 S3(S1 & update_en),Destination Box 中的 update stage 的时钟有效沿和使能信号同时跳变,这个时候就出现了 race。
如果 tck1 和 tck2 之间存在很大的 clock skew,那么 Destination Box 就不能完成 Update 操作。
针对这个问题,最直接的解决方法就是 TCK 的 CTS 做的非常细致,确保这里不会出现时序问题。
Tessent 工具的做法是在 Soure Box 中插入 delay stage,让 S3 处的使能信号的持续时间更长。这样一来,即使 TCK 的 Clock Skew 很大,也不对引起竞争冒险问题,确保 Destination Box 能够正确的完成 update 操作。
Interface
A wrapper that provides properties to fully specify the names of the eightclient portsof the TDR.
Interface Wrapper 用于定义 IEEE 1687 规定的标准端口的名称,其包含的内容如下:
一般情况下都是使用默认的端口名称,如果想要使用其他名称,可以做如下定义:
Interface Wrapper 中的 8 个端口是必须要有的,所有 Tdr 都会有这 8 个端口。
如下图所示,在 Dft Spec 中定义名称为 PERIPLL_CFG1 的 Tdr,只指定 32bit 的输入输出端口,Tessent 工具最终生成的 Tdr 中也是包含 8 个控制端口的, 这些端口的名称使用的是默认名称。
定义:
实现:
DataInPorts
A wrapper that specifies the number (count) of />
Arguments
count :integer
指定 TDR 上所需要的>Examples示例1:
定义两个>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>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
指定>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 的输出取决于什么? )