Core Wrapper cell以及wrapper chain 知识总结

本文详细介绍了Core Wrapper Cell及其在capture过程中的作用,包括Dedicated Wrapper Cell、Dedicated Safe-State Wrapper Cell和Shared-Register Wrapper Cells。Wrapper Chain在hierarchy scan中的操作与传统scan不同,不包含force PI和measure PO,而是通过load input wrapper chain和unload output wrapper chain来替代。文章还探讨了wrapper cell的特殊结构,如如何在capture阶段保持shift/hold状态,以及如何通过Maximized reuse流程选择插入Dedicated或Shared Wrapper Cell。此外,文章提到了在设计和测试过程中可能遇到的问题,如timing violation,并提供了解决方案。

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

   背景: 对于traditional scan的capture过程来说,实际上分为三个步骤,分别是force PI,measure PO和pulse clock。在pattern shift in之后,电路中的所有寄存器都已经有了初值,但如果此时直接pulse clock去进行capture操作,由于primary input上没有force值,与primary input直接相连的那些寄存器将会capture进来一个x,同时primary input和寄存器之间的组合逻辑不可测,这不是我们所期望的。因此,在pulse clock之前要先进行force PI的操作,给primary input上force一个初值,pulse clock的时候就不会将x态引入电路。同理,对于primary output来说,在shift in之后所有的寄存器都有了初值,此时就可以去观测output port了。在force PI后紧跟着measure PO的操作。假如没有measure PO,就无法观测到寄存器与Primary output port之间的组合逻辑是否有fault。最后是pulse clock,将每个scan cell前组合逻辑输出的值capture进来,以备接下来的shift out去观测。总的来说,对于tradition scan,force PI、measure PO和pulse clock这三个操作一起才是一个完整的capture过程,然后再shift out,就完成了一次完整的scan测试。对于hierarchy scan的capture过程来说,是没有force PI和measure PO的。因为在intest_mode下,我们测试的是wrapper chain内包裹起来的逻辑,此时wrapper chain上的寄存器,就充当了traditional scan时input port/output port的角色。load input wrapper chain代替了force PI的操作,而unload output wrapper chain代替了measure PO的操作。而对于真正的core的input port和output port,我们反而可以不去控制和观测,因为那已经不是wrapper内包裹起来的部分了。而wrapper chain的外部,会交给extest_mode来测试。从这一差异也可以看出wrapper chain的隔离作用。

wrapper chain之所以如此特殊,在capture phase还能保持shift/hold状态,主要取决于wrapper cell的特殊结构。接下来我们将详细介绍wrapper cell。

Wrapper cell —— 构成wrapper chain的寄存器,主要介绍simple core wrapper cells和simple core wrapper chains。

  • simple core wrapper cells

    简单的core wrapping flow所用到的wrapper cell有三种:Dedicated Wrapper Cell、Dedicated Safe-State Wrapper Cell和Shared-Register Wrapper Cells。

  1. Dedicated Wrapper Cell

    Dedicated Wrapper Cell用自己内部的专用触发器来提供可控制性、可观测性和移位功能,如下图所示。

图片

    该wrapper cell包含如下接口:

    cti - core test input,wrapper cell的测试输入,该信号可以来自主要输入(如果该wrapper cell处于wrapper chain的首位)或者wrapper chain上前一个wrapper cell的cto信号。

    cto - core test output,wrapper cell的测试输出,该信号可以驱动主要输出(如果该wrapper cell处于wrapper chain的末位)或者wrapper chain上后一个wrapper cell的cti信号。

    cfi - core functional input,对于输入的wrapper cell,该信号来自core周围的逻辑;对于输出的wrapper cell,该信号来自core。

    cfo - core functional output,对于输入的wrapper cell,该信号驱动core;对于输出的wrapper cell,该信号驱动core周围的逻辑。

    shift_clk - wrapper clock,通常由core的wrp_clock驱动,为wrapper cell中的触发器提供时钟。

    shift_en - shift enable,类似于wrapper cell的scan-enable信号,该信号为高时,通过cti和cto进行数据移位;该信号为低时,根据capture_en决定是捕获功能输入还是保持当前状态。输入和输出wrapper cell的shift_en可以分别进行控制。

    capture_en - capture enable,该信号决定wrapper cell不进行移位时所捕获的内容,为高时保持当前值,为低时捕获功能输入。

2.Dedicated Safe-State Wrapper Cell

    wrapper cell可以在它的输入提供可观测性,在它的输出提供可控制性,但是,wrapper cell的受控输出也会在通过wrapper chain进行数据移位(shift)时发生变化。在一些情况下,如果wrapper cell的扇出存在边沿触发或者电平敏感的逻辑,就会发生意外的电路操作。

    为了避免此种情况,可以为wrapper cell指定一个安全值。如下图所示,在cfo输出增加了一个mux来驱动一个静态安全值(safe_value),由safe_control进行控制。

图片

3.Shared-Register Wrapper Cell

    如果在design中存在边界I/O寄存器,那么wrapper cell可以共享这些function寄存器,以减少wrapper cell的面积开销。share wrapper cell会取代原有的function寄存器,并且在function mode下可以提供原有的功能。下图是上述提到的两种wrapper cell所对应的share wrapper cell,接口均保持不变。

### WrapperCHAIN 使用概述 在编程中,特别是面向对象的语言如Java里,`Wrapper` 类用于将基本数据类型封装成对象。这使得可以对这些原始类型应用方法调用和其他操作[^1]。 对于 `CHAIN` 或者更常见的是 **Method Chaining** 方法链的概念,在设计模式下指的是连续执行多个方法调用的一种方式。每一个方法返回的对象都支持下一个方法调用,从而形成一条流畅的操作链条。 #### Wrapper 类的应用实例 当处理集合框架时,由于泛型不允许使用原生类型作为参数,因此需要利用 `Integer`, `Double` 这样的包装类来代替 int, double 等基础类型: ```java List<Integer> numbers = new ArrayList<>(); numbers.add(Integer.valueOf(10)); // 将int转换为Integer对象并加入列表 ``` #### Method Chaining 示例 通过构建器模式实现的方法链接可以让代码更加简洁易读。下面是一个简单的例子展示如何创建具有默认属性的对象,并通过链式调用来修改某些特定设置: ```java public class BuilderExample { private String name; private int age; public static class Builder { private final String name; private int age = 0; public Builder(String name){ this.name = name; } public Builder setAge(int a){ this.age=a; return this; // 返回当前Builder实例以便继续调用其他setter方法 } public BuilderExample build(){ return new BuilderExample(this); } } private BuilderExample(Builder builder){ this.name=builder.name; this.age=builder.age; } @Override public String toString() { return "Name: "+name+", Age:"+age; } } // 使用案例 BuilderExample person = new BuilderExample.Builder("John").setAge(30).build(); System.out.println(person.toString()); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值