DFTug - Architecture Your Test Design

本文详细介绍了如何设置ScanChainLength,包括使用-max_length、-chain_count和-exact_length的选择,以及如何处理多时钟域和MultibitComponents的scanchain。还探讨了scanchain长度平衡、scanchain stitching和特殊场景下的scan cell replacement。掌握这些技巧有助于优化设计的测试效率和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


如下图所示,分清楚三个概念:

  • scan link
  • scan element
  • scan segment
    注意下面的latch,也是scan link的一部分,而scan segment包含了scan element。

在这里插入图片描述

如何指定Scan Chain Length

set_scan_configuration -max_length 7
假设有29个FF,那么将会被分配为6,6,6,6 和5。工具会尽量的让scan chain符合balance的预期。
tips: -max_length与**-chain_count**可能会产生冲突,此时将会以-max_length优先。尽量不要二者一起使用。

另外我们可以用**-exact_length**指定准确的scan chain的长度。
假如说,你有420个FF,你现在使用-exact_length 80,此时,将会是5条chain 80个FF,一条chain有20个FF。将不考虑chain balance的问题。
值得注意的是,-exact_length的用法只能够用在standard scan中,不能用于scan compression的架构下。
另外注意-exact_length不能与-max_length或者-chain_count一起混合使用。

所以,综上所述,我个人建议,可以直接分为三类进行选择,最好不要混合使用:

  • - max_length(考虑balance,优先级最高)
  • - chain_count(考虑balance)
  • - exact_length(不考虑balance,不可以用于compression架构,不能与前面混合使用)

如何查看配置完毕的chain length信息:
report_scan_configuration

如何考量scan chain count?
1、需要询问测试厂商,能支持多少条scan chain通道。
2、为了防止timing相关的问题,最好是一个clock domain一条chain(DFTC 默认行为),DFTC是以一个时钟边沿作为一个clock domain,只有Multiplexed flip-fop这种scam stye,才会因为clock domain而影响scan chain的数目,如果你选择其他的scan style,只会有一条scan chain的产生。
3、测试时间的考量,因为测试时间取决于你最长的那条chain,因此,你需要增加chain来减少测试时间。

使用set_scan_path来订制scan chain

通常来说scan chain,会由chain count or chain length来设置,但是使用set_scan_path之后,可以针对那一条chain来单独订制更多的个性化需求。
1、单独某一条chain 的exact scan chain length
set_scan_path C1 -exact_length 40
2、指定某一条chain连到专门的scan_in/out 口。

Multiple Clock Domains

假如说,现在有三个clock damain,但是我想实现两条scan chain的balance。
通常我会这样来指定:

dc_shell> set_dft_signal -view existing_dft -type ScanClock -timing [list 45 55] -port {clk1 clk2}
dc_shell>set_scan_configuration -chain_count 2

但是仅仅这样指定是实现不了需求的。如下图所示。
在这里插入图片描述
你需要mix clock edge within a single chain

dc_shell> set_dft_signal -view existing_dft -type ScanClock -timing [list 45 55] -port {clk1 clk2}
dc_shell> set_scan_configuration -chain_count 2
dc_shell> set_scan_configuration -clock_mixing mix_edges

在这里插入图片描述
如上图所示,通常我们会采用第二种方法,第二种方法虽然在balance上面能够做的更好一些了,但是如果一个clk带有的FF很多,一个clk带有的FF很少,即使mix_edges 也会导致balance的问题,虽然还有第三种mix_clocks的方法,但是我司并没有采用。

关于Multibit Components 的scan chain

首先需要知道的是什么是Multibit Compponents?
综合工具会把多个register捆绑成一组,于是称呼这一组寄存器为"multibit components"。后端布局布线的工程师,称为“banks"
采用multibit cell来代替single bit cell有什么好处?
在这里插入图片描述
下图是采用2bit的multibit代替两个单bit的cell
在这里插入图片描述
在RTL级别,用create_multibit的cmd指定

在这里插入图片描述

在后端工程师的flow里面,称之为placement-aware register banking flow,可以将相邻的单bit cell放到一个register bank下面,然后用一个multibit register cell替换这个bank。

如下图所示,对于有QN的cell,map后出来的multibit cell也是有QN的。
在这里插入图片描述
如何将multibit 映射为scan cell
如下图所示,有两种结构:
1、multibit scan cell with parallel scan bit
output not chained with next register bit,separate data input for each scan bit.
2、multibit scan cell with internal serial scan chain
output chained with next register bit, one scan data input for whole multibit register.

在这里插入图片描述
默认情况下,insert_dft的时候,会把multibit component里面的cell作为离散的时序信号,DFTC会进行重新打乱顺序来串,或者是分开,或者用于平衡别的scan chain。
那如果使用下面的cmd后,将会作为scan segment, 如上图左图所示:

dc_shell > set_scan_configuration -preserve_multibit_segment true

使用的该cmd之后,就不会把multibit里面的bit单独来看待处理。
可以使用下面的选项show出,如果要串的multibit后的相关信息:
preview_dft -show { segments }

Few-Pins-to-Many-Pins Scan Cell Replacement Situation

如果你发现,在Scan replacement的过程中,发现有Few-Pin到Many-Pin这种情况,如下图所示,在scan_replacement的过程中,多出了CLR置位和RST复位这两个pin。当然增加的pin是会被tie值为inactive的状态。
当然你在log中也会得到warning相关的信息。
在这里插入图片描述
如果要修正这个warning,你可以手动指定这个nonscancell,到指定的scancell。

set_scan_replacement -nonscan DFF1 -multiplexed_flip_flop SDFF1R

Many-Pins-to-Few-Pins Scan Cell Replacement Scenario

如下图所示,因为我的clear和reset是unconnect的,所以在进行scan replace的时候,可能会砍掉这两个pin,而选用不带有这两个pin的cell,从而有可能导致逻辑错误。因此,也可以手动的指定。
在这里插入图片描述

set_scan_replacement -nonscan DFF1 -multiplexed_flip_flop SDFF1R

Scan Stitching Only Scan-Replaced Cells

默认情况下,inser_dft会针对没有进行scan_replacement的cell,在具备扫描属性,在没有违背DRC的情况下,自动执行scan_replacement。
当我们拿到一个已经scan_replaced的design,如果你不想要insert_dft的时候,执行scan_replacement,你需要

set_scan_configurartion -replace false

如果,你读取的是ddc文件,则不必指定,因为tool能识别到你之前的scan-replacement result。
在我们的脚本中,使用了上述cmd,默认该cmd是true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值