Scan cell 的三种类型

scan cell有两种不同的input:

1)data input:由电路的combinational logic驱动;

2)scan input:由另一个scan cell驱动,从而形成scan chain;

在normal/capture mode下,data input来驱动output;

在shift mode下,scan input来驱动output;

几种scan_cell:muxed-D scan,clockd-scan,level-sensitive scan design(LSSD);

muxed-D Scan cell:多指edge_triggered muxed-D scan cell,由一个D flip-flop和一个multiplexer组成,

scan enable(SE)用来选择data input和scan input的输入。
在这里插入图片描述

一个level-sensitive的muxed-D scan cell,由一个multiplexer,一个D Latch,一个D FF。

来用替代一个普通的latch
在这里插入图片描述

Clocked-scan cell:

也主要用来替代D-FF,不过是通过两个独立的clk来进行选择,

一个data clock DCK;一个shift clock SCK;

主要的优势是不会对data path的timing造成影响,但是要求多一个clock的routing。
在这里插入图片描述

LSSD scan cell:

主要是应用在level_sensitive,latch-based design中。

cell包含两个latch,一个master latch,一个slave latch。

其中A/B/D均为clock,D为data input,I为scan input。

优点是可以保证race-free,但是同样会增加clock的routing。
在这里插入图片描述

scan architecture

1)full-scan design:所有的storage element都转变为scan cell,combinational ATPG来生成test;

主要的优点是将sequential的ATPG转变为简单的combinational ATPG;

almost full-scan design:在某些critical path和insignificant path上不加入scan。

Muxed-D Full-Scan Design:
在这里插入图片描述

Clocked Full-Scan Design:与Muxed-D类似,只是不再使用SE,分别使用两个clock。

LSSD Full-Scan Design:两个时钟C1/C2,A/B来控制shift和capture两种mode。
在这里插入图片描述

在full-scan的logic中,输入由两种:

primary input(PI),电路的external input;

pseudo primary input(PPI),scan cell的output

两种输出:

primary output(PO),电路的external output;

pseudo primary output(PPO),scan cell的input;
在这里插入图片描述

2)partial-scan design:部分的storage element转变为scan cell,combination和sequential ATPG来生成test;

在test的生成过程中,sequential的ATPG必须包含non-scan的FF的control和observe,这会增加test generation的

复杂性,所以一般将逻辑分开,可以根据functional partition,pipeline/feed_forward partial design.

Full-scan,partitial-scan都被定义为serial scan design,优点是routing的成本会比较低,缺点是每一个单独的scan-cell不能

在不影响本scan chain的其他cell的前提下,完成shift mode,造成high switchingde power消耗。

Random-access scan通过类似RAM似的地址寻址的方式来完成一个cell的shift mode。

3)random-access scan design:不用serial scan chain,使用random addressing的机制;

Scan cell的Q端与下一级的Scan cell的SI端直接连接起来。同时另一个load到combinational logic中。

在capture过程中,必须控制clock的个数,保证ATPG生成的reponse是正确的。

每一条scan chain中的激励和响应的reg的位置并不是对应的。根据ATPG生成的为准。

<think>好的,我现在需要解决用户的问题:在Design Compiler中启用第二条命令(set_dft_signal -view spec -port $scan_rxt_port -hookup_pin $scan_rstn_pin -type TestData)后,执行insert_dft会导致已声明的扫描链上没有scan_cell,DC会自动新建一组scan_in和scan_out。而禁用该命令后则不会出现此现象。用户想知道可能的原因。 首先,我需要回顾之前用户的问题和我的回答。用户之前询问了三条DFT相关命令的作用,我解释了每条命令的功能。现在的问题是第二条命令启用后导致扫描链异常,而禁用后正常。这可能涉及到DFT信号配置与扫描链插入的交互。 接下来,我需要理解第二条命令的作用。根据之前的回答,第二条命令是在spec视图下定义测试数据信号,标记为TestData类型,并绑定到指定端口和引脚。这可能告诉DC该端口是测试数据信号(如扫描输入/输出),从而影响扫描链的插入逻辑。 用户提到启用这条命令后,insert_dft导致已存在的扫描链没有scan_cell,反而自动创建新的scan_in/out。可能的原因是,当启用TestData类型的信号配置后,DC可能认为用户需要重新定义扫描链结构,覆盖了现有的声明。例如,如果原本已经定义了扫描链,但通过-set_dft_signal指定了TestData类型的端口,DC可能忽略已有的扫描链设置,按照新的信号类型重新构建,导致新建而非复用已有的扫描链。 另外,可能存在的冲突是,TestData类型通常用于扫描输入输出(SI/SO),而如果现有的扫描链已经绑定了其他端口,这时候重新定义可能导致DC无法正确关联现有的scan_cell,从而创建新的端口和链。 需要进一步考虑DFT流程中的步骤。通常在插入扫描链前,需要使用set_dft_signal来指定哪些端口用于扫描。如果用户已经在已有的扫描链中声明了某些端口作为扫描链的一部分,但在spec视图中重新配置了TestData类型,可能导致DC认为需要重新配置扫描链,从而忽略原有的设置,导致新建。 另外,可能的问题点在于view的不同。第一条命令使用existing_dft视图,而第二条使用spec视图。spec视图用于规划阶段的配置,可能覆盖或影响现有的结构。当启用第二条命令时,spec视图中的TestData类型信号可能强制DC按照新的规范重新生成扫描链,而不是使用现有的。 还有可能,用户在已有的扫描链中没有正确关联TestData信号,或者端口被重新定义后,原有的扫描链找不到对应的scan_cell,因此DC自动生成新的来满足TestData信号的连接需求。 总结可能的原因:启用第二条命令后,DC根据TestData类型的信号重新配置扫描链,覆盖或忽略了已有的扫描链声明,导致需要新建scan_in/out端口和链结构。而禁用该命令时,DC沿用现有的配置,不会触发重新生成。</think>在Design Compiler中,启用第二条命令(`set_dft_signal -view spec -type TestData`)后出现扫描链异常,而禁用后正常,可能原因如下: --- ### **关键原因分析** #### **1. `-type TestData`的语义冲突** - **TestData类型的作用**: `-type TestData`通常用于定义扫描链的输入(SI)和输出(SO)信号。若在`-view spec`(规范视图)中声明某个端口为`TestData`,Design Compiler (DC) 会认为该端口需要**直接绑定到扫描触发器**的SI/SO引脚。 - **冲突现象**: 如果**已有扫描链的声明未明确关联到该端口**,DC可能认为现有扫描链与`TestData`定义不匹配,从而**自动创建新的扫描链**,导致原有扫描链上的`scan_cell`被跳过。 #### **2. 视图(View)的优先级问题** - **`-view spec`的强制性**: `spec`视图用于**规划DFT架构**。若在`spec`视图中定义`TestData`信号,DC会优先遵循此配置,**覆盖已有扫描链的隐式定义**(如通过`create_test_protocol`生成的默认扫描链)。 - **结果**: DC会尝试基于新的`TestData`信号重建扫描链,若原有扫描链未显式绑定到该信号,则触发新建逻辑。 #### **3. 扫描链绑定的缺失** - **隐式新建条件**: 当DC检测到以下情况时,会自动生成扫描链: - 存在`TestData`类型的信号(如SI/SO),但未通过`set_scan_path`绑定到现有扫描链。 - 现有扫描链未明确声明其输入/输出端口。 - **示例**: 若用户已通过`create_scan_chain`声明了扫描链,但未通过`set_scan_path`将其与`TestData`端口关联,DC会认为两者无关,从而新建一组SI/SO。 #### **4. 命令执行顺序的影响** - **典型流程**: 1. 先通过`set_dft_signal`定义信号类型(如`TestData`)。 2. 再通过`set_scan_path`绑定扫描链路径。 - **问题场景**: 若**先执行`insert_dft`再配置`TestData`**,DC可能因信号类型未提前声明而无法关联到已有扫描链。 --- ### **解决方案** 1. **显式绑定扫描链**: 使用`set_scan_path`命令将已有扫描链与`TestData`端口关联。 ```tcl set_scan_path chain1 -view spec -scan_data_in $scan_rxt_port -scan_data_out $scan_out_port ``` 2. **调整命令顺序**: 在`insert_dft`前,确保完成所有DFT信号定义和扫描链绑定。 ```tcl set_dft_signal -view spec -type TestData ... set_scan_path ... insert_dft ``` 3. **检查现有扫描链定义**: 通过`report_scan_path`验证已有扫描链是否包含`scan_cell`,并确认其输入/输出端口是否与`TestData`信号匹配。 --- ### **总结** 根本原因是**TestData信号定义与已有扫描链的绑定关系缺失**,导致DC误判需新建扫描链。通过显式绑定或调整命令顺序可避免此问题。若需进一步调试,建议提供`report_scan_configuration`和`report_dft_signal`的输出以定位具体冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值