Tile level 中crg中scan sitich分享

背景介绍,crg模块中由于时间结构复杂,在DFT scan 时通常只有pll_chain 及 occ_chain,没有core_chain,使在DC test下coverage比较低,只测量了pll硬核的faults。

随着工艺制程的进步,需要对crg中其余逻辑也上chain,进而提高test coverage。

具体代码实现上有多种方法,如下是思路分享:

在DC下所有reg的ck pin 需要来自shift_capture_clk,此时需要对reg ck pin 之前增加mux,I0来自func原始连接,I1来自shift_capture_clk,S端可以来自人为添加的tdr方便控制。在ijtag/scan/atpg_dc时控制时钟来自shift_capture_clk,常见添加mux位置在pll的output,分频电路的output等。

在scan_sitich阶段,将occ单独成chain,pll单独成chain。其余均为core_chain。具体命令可用create_scan_chain_family命令区分,下面贴出了该命令后面可加的options。

create_scan_chain_family family_name
{ -include_elements obj_spec | -ordered_elements obj_spec }
[ -edt_instances obj_spec | 
{-ssh_instance obj_spec [-ssh_chain_groups ssh_chain_group_list]} | 
{-si_connections obj_spec -so_connections obj_spec }] 
[ -si_associated_ports obj_spec -so_associated_ports obj_spec ] 
[ -attribute_set_for_chain_assembly { attribute_list } ]
[ -single_attribute_set_chains { on | off } ] 
[ -single_class_chains { on | off } ] 
[ -single_clock_domain_chains { on | off }] 
[ -single_clock_edge_chains { on | off } ] 
[ -single_power_domain_chains { on | off } ] 
[ -single_cluster_chains { on | off } ] 
[ -single_wrapper_type_chains { On | Off }]
[ -port_index_start_value integer ] 
[ -port_scalar_index_modifier integer ]
[ -chain_length { integer | unlimited }] 
[ -chain_count { integer | unlimited }] 
[ -si_port_format format ] 
[ -so_port_format format ] 
[ -si_timing { leading_edge | trailing_edge | any_edge } ] 
[ -so_timing { leading_edge | trailing_edge | any_edge } ] 
[ -lockup_cell_type { latch | flop }] 
[ -si_lockup_cell_type { latch | flop }]
[ -so_lockup_cell_type { latch | flop }]
[ -unused_edt_pin_handling { auto | insert_pipelining_flop | tie_compactor_input }] 
[ -si_pipelining { wrapper_chains_only | all_chains | off }] 
[ -si_pipelining_type {non_scan_flop | holding_scan_flop}]

至此,crg模块中该上chain的应该都上了。但在AC下的bypass逻辑还没加。AC或者func下,crg中reg不能随意toggle,因为是对clk和rst进行控制的。

bypass逻辑思路:AC下我们只需要occ在chain上,让FF_reg能产生cap pulse。因此此时需要将pllchain、corechain bypass。在pllchain、corechain 的最后一个scancell后加mux,I1和scancell连接,I0连接一个bypass寄存器,S由tdr控制,Z还是原始连接。通过配置tdr的值,选择chain通或者被bypass。注意的是,这个bypass寄存器在AC or func 也连接到EDT或者SSN上,可能路径比较远,因此需要在bypass寄存器后插入一个latch方便timing收敛。

以上只是思路,实现方式需要结合是否有EDT/SSN[有的话是否有scan_signal_bypass]来定。

欢迎大家优化思路,批评指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值