[! note] 知道是什么就行,能够自己叙述出来。 最好列思维导图,梳理每个部分有哪些内容

1. 设计复杂性

1.1. 设计抽象层级

在进行数字电路设计的时候,我们需要遵循 3Y 原则。

除了抽象和约束外, 设计者还使用另外三条准则来处理系统的复杂性: 层次化模块化规整化 (regularity) 。这些原则对于软硬件的设计都是通用的。

指向原始笔记的链接

再分为 3 个域。行为域、物理域和结构域。

2. 设计流程

我们主要关注于 RTL 这一个层级。

2.1. EDA 工具

4 大类:

  1. 设计入口
  2. 分析与验证
  3. 综合与实施
  4. 测试

2.1.1. 设计输入工具

原理图编辑器

  • 单元库:包含要使用的元件
  • 编辑功能:放置、移动、删除、连接、旋转/翻转、复制/粘贴
  • 分层设计:模块包含较低级别的原理图
  • 网表描述语言: EDIF,电子设计交换格式

3. 分析和验证

3.1. 仿真

3.1.1. 电路仿真

这里说的电路就是晶体管。晶体管模型(紧凑模型)需要描述其非线性电压和电流特性,仿真精度取决于模型的质量和复杂性。其产生的电压和电流信号表示为连续波形,准确但复杂且耗时,对于大型电路来说不切实际

3.1.2. 时序仿真

会使用更简单的晶体管模型,复杂性降低,仿真时间缩短,精度受到影响。

3.1.3. 开关级仿真

晶体管用开关级模型表示,非线性特性用线性电阻来近似。在关闭模式下,电阻为无穷大;在开启模式下,使用平均导通电阻。结果网络是一个由电阻器和电容器组成的时变线性网络,不太复杂但是准确率也不高。

3.1.4. 门级仿真

也称为逻辑仿真,网表是一组逻辑门及其互连。使用逻辑门模型。门模型包括功能、输入引脚电容、输出引脚电容和延迟模型(用于计算延迟)。仿真结果是逻辑值的波形,其中或没有延迟。与电路仿真相比快。

3.1.5. 逻辑强度

在逻辑模拟中,逻辑有电平和强度,逻辑电平为 0 和 1 ,逻辑强度可以强也可以弱。强 0 具有强制强度的逻辑电平 0;弱 0 具有电阻强度的逻辑电平。逻辑没有任何级别具有高阻抗的逻辑强度

3.1.6. IEEE Std 1164-1993

IEEE 标准 Std 1164-1993 定义了 9 值逻辑系统

3.1.7. 信号分辨率表

信号解析表定义了逻辑函数运算。

还有个

3.1.8. 延迟模型

延迟模型描述逻辑单元内部的延迟。

延迟包括:

  • 引脚到引脚延迟:输入引脚和输出引脚之间。它表示没有互连的延迟
  • 引脚延迟:与输入引脚集总的延迟
  • 网络延迟(线路延迟):互连延迟

3.1.9. 静态时序分析

静态时序分析计算:

  • 入口延迟:从输入点开始到时序逻辑单元的数据输入结束的路径(例如 D 触发器的 D 输入)
  • 阶段延迟:从时序逻辑单元的时钟输入开始的路径逻辑单元并结束于另一个顺序逻辑单元的数据输入
  • 退出延迟:开始于顺序逻辑单元输出并结束于输出点的路径

3.1.10. 功能仿真

逻辑仿真的扩展,电路可以包含任意复杂度的元素,例如 AND 门、寄存器、乘法器、RAM。每个元件的功能可以使用 HDL(VHDL 或 Verilog)描述。输出结果是逻辑信号,通常使用零延迟模型来加速仿真

3.1.11. 行为仿真

功能和行为描述之间的差异:

  • 功能:表示预期的硬件结构,即连接在一起的块
  • 行为:仅描述输入输出功能忽略定时并使用时钟周期,例如模拟 P 的指令集。
  • VHDL 和 Verilog 的指令集可用于行为描述和模拟
  • 输出可以是逻辑值或数值

3.2. 设计验证

仿真结果并不能保证设计的正确性和功能性,仿真仅说明设计在给定的一组输入激励下如何反应。设计验证用于检测电路中的设计错误。三种类型的设计验证:

  • 电气验证
  • 时序验证
  • 形式验证

3.2.1. 电气验证

电气验证采用晶体管级原理图并检查一些规则:

  • 两个 门之间的反转数量应该是偶数
  • 在伪 NMOS 门中,PMOS 上拉和 NMOS 下拉器件之间有明确定义的比率
  • 为确保上升和下降时间,应将驱动器晶体管的尺寸设置为扇出函数的最小界限

3.2.2. 时序验证

识别复杂电路中的关键延迟路径很困难。时序验证遍历电气网络并计算各种路径的延迟,智能验证器可以检测错误路径。

3.2.3. 形式验证

形式验证器试图在数学意义上证明电路的两种表示形式是等效的。在形式验证中,组件在行为上被描述为其输入和内部状态的函数。形式验证器将派生电路与其初始规格进行比较这两个电路不需要相同但等效,它报告任何差异。

4. 实施方法

4.1. 门阵列

掩模可编程门阵列 (MPGA) 原始单元或晶体管由供应商制造逻辑门可以通过一层或多层连接层(掩模)从单元或晶体管配置设计时间与标准单元相同,因为使用了 EDA 工具制造时间比标准电池方法更短

4.2. 可编程逻辑器件

PLD 由“与”门和“或”门组成具有可编程连接。三种主要类型:

  • PROM - 可编程只读存储器
  • PLA - 可编程逻辑阵列
  • PAL - 可编程阵列逻辑 类型取决于 AND 阵列和 OR 阵列是否为可编程

4.2.1. PROM

PROM 具有固定 AND 阵列和可编程 OR 阵列。 AND 平面提供所有最小项。

4.2.2. PAL

可编程 AND 阵列,固定 OR 阵列。可以生成任何乘积项,乘积项的数量由 OR 数组固定。

4.3. PLA

可编程 AND 数组可编程 OR 数组可以生成任何乘积项乘积项的数量不由 OR 数组固定。

4.4. 现场可编程门阵列

无需定制掩模,混合可编程或基于 RAM 的逻辑单元。互连核心由逻辑单元组成,逻辑单元包含组合逻辑和时序逻辑(触发器) 可编程互连围绕单元可编程 I/O 单元围绕核心

4.5. 实施方法比较

特性FPGA / CPLDGate Arrays标准单元定制单元
设计时间
制造时间-
芯片面积非常大中等
成本非常低中等
通用性非常低中等
设计周期非常短中等

4.6. 设计灵活性

5. 设计综合

设计综合(design sysnthesis)可以定义为两个不同设计视图(抽象层级)之间的转换。一般来说是从行为级规范(RTL)到结构描述(netlist)。

有三种综合:

  • 线路综合
  • 逻辑综合
  • 结构综合(高层级综合)

5.1. 设计综合概述

这个图就概述了三种综合是从什么转换到什么。结构综合是从 HDL 代码到网表;逻辑综合是从状态机到逻辑门;电路综合是从逻辑门到晶体管电路。

5.2. 电路综合

将门级的逻辑描述转换为晶体管网络,在过程中需要满足时序约束。

过程中的两个阶段:

  • 从逻辑方程导出晶体管网表;
  • 调整晶体管尺寸以满足性能约束。

5.2.1. 晶体管网表的推导

  • 选择电路类型
    • 互补静态电路
    • 传输晶体管
    • 动态电路
    • DCVSL(差分级联电压开关逻辑)
  • 构建逻辑网络
  • 设计人员选择电路类型
  • 已开发出计算机算法来生成逻辑电路

5.2.2. CMOS 逻辑单元网表

使用德摩根定理将气泡推入输入,从晶体管的串联和并联组合构建 NMOS 和 PMOS 网络。

5.2.3. 晶体管尺寸

使 NMOS 和 PMOS 晶体管的尺寸比具有相同的驱动强度(相同的增益系数

尺寸规则:

  • 连接在电源和具有 驱动的输出之间的任何晶体管串(从输出到源或者地的串联晶体管)都应具有 反相器尺寸
  • 两个具有 的并联晶体管相当于一个具有 的晶体管
  • 两个具有 的串联晶体管相当于一个具有 的晶体管。

5.3. 逻辑综合

逻辑综合生成逻辑函数(逻辑级视图)的门级实现(结构视图)。逻辑函数可以用状态转换图、原理图、布尔方程、真值表或 HDL 描述来指定。综合结果取决于实现架构:多级逻辑、PLA、FPGA/CPLD。

5.3.1. 逻辑综合目标

逻辑综合的目标是优化面积、速度、功耗或其组合。

该任务有两个主要阶段:

  1. 逻辑最小化:一个独立于技术的阶段,其中使用多种布尔代数操作技术来优化逻辑;
  2. 技术映射:一个阶段考虑实现架构,例如标准单元、PLA、FPGA/CPLD 等。

5.3.2. 组合逻辑综合

综合的时候,用的不是单个元件,而是一些提前定制好的组合逻辑块。

5.3.3. 时序逻辑综合

时序逻辑综合包括:

  • 状态最小化:最小化状态数量。如果任何输入的输出序列相同,则两个状态是等效的;
  • 状态编码:状态的不同编码可能导致不同的逻辑实现
  • 状态机分解:将大型状态机分成 2 个或更小的。逻辑会更简单,更容易被最小化。速度也可以提高。
  • 重定时:时钟速度取决于时序电路任意两级之间的延迟。通过重新排列顺序逻辑元件(触发器),可以减少延迟。

5.3.3.1. 重定时

就是在不改变功能的情况下,通过调整模块的位置来实现对时序的优化。

5.4. 架构综合

架构也称为行为综合或高级综合,其根据要执行的任务的行为描述生成架构设计的结构视图。这个过程会优化一个或多个性能因素,例如面积、速度和功率。

两个主要任务:

  • 操作调度
  • 数据路径分配

5.4.1. 行为表征

在架构综合过程中,设计的行为视图通常由数据流图(DFG)表示。数据流图由操作节点和指示操作顺序的有向弧组成,例如: y = a + b + c

5.4.2. 操作规划

任务是在一定的约束条件下将 数据流图 的操作节点分配给控制步骤(或时钟周期),并遵守优先级约束。约束可以是:

  • 硬件资源
  • 操作速度(时钟周期数) 高层次综合可以:
  • 在速度限制下优化硬件资源
  • 在硬件限制下优化速度

5.4.2.1. 操作调度算法

操作调度有多种算法:

  • 尽快 (ASAP)
  • 尽可能晚 (ALAP)
  • 列表调度
  • 强制导向调度
  • 整数线性规划调度 参考:“Synthesis And Optimization of Digital Circuits” Giovanni De Micheli, McGraw-Hill International

5.4.3. 数据路径分配

任务是将操作数(值)分配给存储元件,并将预定操作分配给物理功能模块。目标是最小化存储元​​件的数量和互连的数量。子任务是: 寄存器分配、模块分配、互连分配。

寄存器分配算法

必须存储中间值以供下一步操作。寄存器分配的任务是将值分配给寄存器,旨在最大限度地减少寄存器和互连的数量。不同时期存在的值可以共享单个寄存器。众所周知寄存器分配算法包括左边缘算法和派分区技术。

指向原始笔记的链接

5.4.4. 模块分配

模块分配阶段将操作绑定到物理功能模块。调度状态中已确定模块数量,不同的绑定会导致不同的互连(包括 MUX、总线、线路) 寄存器分配和模块分配是相互依赖的,它们影响互连分配结果

6. 测试

为什么要测试?

  • 正确的设计并不能保证制造出来的电路能够正常工作
  • 制造过程中可能会出现制造缺陷
    • 硅晶体中的杂质
    • 未对准
    • 蚀刻精度
  • 在压力测试过程中可能会引入故障
  • 检测到故障越晚,成本更高
  • 在组件中查找故障总是比在系统中查找故障更便宜

6.1. 缺陷等级

产品质量通过缺陷等级(defect level)来衡量。缺陷等级是指一百万个零件中的缺陷零件数 (ppm)。例如生产 100,000 个元件时有 10 个有缺陷的元件,则缺陷水平为 0.01% 或 100ppm。

6.2. 可测试性设计

可测试性设计

在设计阶段就考虑产品的测试过程,以便在生产过程中能够快速、高效地测试出高质量的产品。

指向原始笔记的链接

6.3. 测试类别

  • 诊断测试:识别和定位有问题的故障
  • 功能测试(也称为通过/不通过测试):确定制造的组件是否功能正常。这比诊断测试更简单,因为预期的唯一答案是“是”或“否”
  • 参数测试:在各种条件(例如温度、电源)下检查许多非离散参数,例如噪声容限、传播延迟、最大时钟频率电压)

6.4. 测试会出现的问题

减少测试时间 增加测试仪的吞吐量 降低测试成本 在设计阶段尽早考虑测试将简化测试过程 不可能进行详尽的测试

6.5. 测试方法场所

详尽的测试包含大量的冗余,即单个故障由多个测试模式覆盖。可以通过放宽必须检测到所有故障的条件来减少测试模式的数量。例如检测最后 1% 的可能故障可能需要更多的模式,因此成本很高。更换成本可能会更低。典型测试仅尝试 95-99% 的覆盖率

6.6. 可控性

可控性衡量的是仅使用输入引脚使电路节点达到给定条件的难易程度。如果一个节点可以仅通过单个输入向量达到任何条件,那么该节点就很容易控制。可控性低的节点需要很长的向量序列才能达到所需的状态。高可控性是理想的。

6.7. 可观测性

可观测性衡量观察输出引脚处节点值的难易程度。具有高可观测性的节点可以直接在输出引脚上进行监控。可观测性较低的节点需要经过多个周期才能将其状态显示在输出上。可测试电路应该具有高可观测性。

6.8. 基于扫描的测试

基于扫描的测试将电路中的寄存器(通常是触发器)连接成一个长的移位寄存器(称为扫描链),使得这些寄存器在测试模式下可以像一个串行移位寄存器一样工作。这样,测试向量可以被加载到寄存器中,然后通过电路的组合逻辑部分传播,最终将结果捕获到寄存器中并移出到外部进行分析。

6.8.1. 基于扫描的测试流程

具体来说,基于扫描的测试包含以下几个步骤:

  1. 扫描链的构建:将电路中的所有寄存器(如D触发器)连接成一个长的移位寄存器,形成一个或多个扫描链。在正常工作模式下,这些寄存器按功能工作;在测试模式下,它们可以像一个长的移位寄存器一样工作。
  2. 加载测试向量:将测试向量(一组预定的输入值)通过扫描链加载到寄存器中。这些测试向量通常由测试生成工具生成,用于检测特定类型的故障。
  3. 应用测试向量:将测试向量加载到寄存器后,电路切换到正常工作模式,测试向量通过组合逻辑部分传播,产生测试响应。
  4. 捕获测试响应:测试响应(即组合逻辑部分的输出)被捕获到寄存器中。
  5. 读取测试响应:将捕获到的测试响应通过扫描链移出到外部,进行分析和验证。

通过这种方式,可以有效地检测电路中的各种故障,如短路、开路、粘连等。基于扫描的测试大大提高了测试覆盖率,减少了测试时间,是现代集成电路测试的重要手段之一。

6.9. 边界扫描测试 (BST)

Boundary Scan Chain(边界扫描链)是 JTAG(Joint Test Action Group)标准中的一种测试技术,用于测试和诊断数字电路板上的互连问题。它通过在芯片的输入和输出引脚之间插入边界扫描寄存器(Boundary Scan Register),形成一个扫描链,从而允许外部测试设备对芯片的引脚状态进行控制和观察。

具体来说,Boundary Scan Chain 的工作原理包括以下几个方面:

  1. 边界扫描寄存器:每个支持 JTAG 的芯片在其输入和输出引脚之间插入了一组边界扫描寄存器(上图蓝色)。这些寄存器可以存储和传递数据,每个寄存器对应一个引脚。

  2. 扫描链:边界扫描寄存器被串联成一个长的移位寄存器,形成一个扫描链。这个扫描链可以通过 JTAG 接口进行访问。

  3. JTAG 接口:JTAG 接口通常包括以下信号线:

    • TDI(Test Data In):测试数据输入
    • TDO(Test Data Out):测试数据输出
    • TCK(Test Clock):测试时钟
    • TMS(Test Mode Select):测试模式选择
    • TRST(Test Reset):测试复位(可选)
  4. 测试模式:通过 JTAG 接口,可以将芯片切换到边界扫描模式。在这个模式下,可以通过 TDI 将测试数据加载到边界扫描寄存器中,然后通过 TCK 时钟将数据移位到各个寄存器。

  5. 控制和观察:加载到边界扫描寄存器中的数据可以控制芯片引脚的状态,也可以读取引脚的状态。例如,可以设置某些引脚为高电平或低电平,然后观察其他引脚的响应。

  6. 测试向量:通过加载和读取测试向量,可以检测电路板上的互连问题,如开路、短路、焊接不良等。

  7. 诊断和调试:边界扫描技术不仅用于测试,还可以用于调试和诊断。例如,可以在运行时读取芯片引脚的状态,以帮助定位故障。

Boundary Scan Chain 的主要优点包括:

  • 高测试覆盖率:可以检测到电路板上大部分的互连问题。
  • 非侵入性:测试过程中不需要物理接触电路板,减少了对电路的干扰。
  • 可编程性:可以通过软件生成和加载测试向量,提高了测试的灵活性和效率。

总之,Boundary Scan Chain 是一种强大的测试和诊断工具,广泛应用于数字电路板的生产和维修过程中。

6.9.1. BST 单元

6.10. 内置自检 BIST

BIST(Built-In Self-Test)是一种内建自测试技术,广泛应用于数字集成电路(IC)和系统中,用于检测和诊断电路的故障。BIST 技术通过在芯片内部集成测试逻辑,使芯片能够在上电后或运行过程中自动进行自我测试,而不需要外部测试设备的干预。这不仅提高了测试的效率,还降低了测试成本和复杂性。

附加电路包括序列发生器和响应分析器。

6.10.1. BIST 的主要特点和优势

  1. 自动化测试

    • BIST 能够在芯片上电后自动启动测试过程,无需外部测试设备的参与。
    • 测试结果通常通过简单的外部接口(如状态寄存器或引脚)输出,方便读取和分析。
  2. 高测试覆盖率

    • BIST 可以针对特定类型的故障(如短路、开路、粘连等)生成测试向量,提高测试覆盖率。
    • 通过内部生成测试向量和捕获测试结果,可以更全面地测试电路的功能和性能。
  3. 减少测试时间

    • 由于测试逻辑和测试向量生成器集成在芯片内部,测试过程可以快速完成。
    • 减少了对外部测试设备的依赖,缩短了测试周期。
  4. 降低测试成本

    • 通过内建测试逻辑,减少了对外部测试设备的需求,降低了测试成本。
    • 适用于大批量生产的芯片,可以显著降低测试成本和测试复杂性。
  5. 增强可靠性

    • BIST 可以在芯片上电后立即进行测试,确保芯片在启动时没有故障。
    • 可以在运行过程中定期进行测试,及时发现和报告潜在的故障,提高系统的可靠性。

6.10.2. BIST 的工作原理

  1. 测试向量生成

    • BIST 内部包含一个测试向量生成器(如伪随机序列生成器,PRPG),用于生成测试向量。
    • 测试向量被加载到电路的输入端,用于激励电路。
  2. 测试向量应用

    • 生成的测试向量通过内部逻辑路径(如扫描链)应用到被测电路的输入端。
    • 测试向量通过电路的组合逻辑部分传播,产生测试响应。
  3. 测试结果捕获

    • 测试响应被捕获到内部的响应捕获寄存器(如多输入签名寄存器,MISR)中。
    • 捕获的测试结果反映了电路在当前测试向量下的响应。
  4. 测试结果分析

    • 捕获的测试结果通过简单的外部接口输出,供外部设备读取和分析。
    • 通过比较捕获的测试结果与预期结果,可以判断电路是否正常工作。

6.10.3. BIST 的应用场景

  1. 集成电路测试

    • 在芯片设计阶段,可以集成 BIST 逻辑,用于测试芯片内部的逻辑功能。
    • 在芯片生产过程中,BIST 可以用于快速测试芯片的良品率。
  2. 系统级测试

    • 在系统设计中,可以集成 BIST 逻辑,用于测试系统中的各个模块和子系统。
    • 在系统运行过程中,BIST 可以定期进行测试,确保系统的可靠性和稳定性。
  3. 在线诊断

    • 在嵌入式系统和实时系统中,BIST 可以用于在线诊断,及时发现和报告故障。
    • 适用于航空航天、汽车电子、医疗设备等高可靠性要求的领域。

总之,BIST 技术通过内建的测试逻辑,实现了高效、自动化的测试,提高了电路和系统的可靠性和测试覆盖率,降低了测试成本和复杂性。

6.11. 故障模型

制造故障可以有多种类型:信号之间的短路,电源轨短路,浮动节点。故障模型将故障与电路模型联系起来,最流行的故障模型是固定型故障(stuck-at fault)。在固定型模型中,仅考虑电源短路,这些被称为“滞于零”(SA0) 和“滞于一”(SA1) 故障

6.12. IDDQ 测试

电源电流的测量提供了一种快速发现坏芯片的方法。好的芯片在 VDD 和 GND 之间不应有任何短路,电源电流超过几毫安则表明坏芯片。 IDDQ 测试基于电源电流的测量找出坏芯片。

6.13. 故障模拟

故障模拟器测量测试程序的质量。它确定故障覆盖率。在模拟中插入故障,如果模拟显示故障电路的输出与正确电路的输出不同,则检测到故障。否则,无法检测到故障。

6.14. 测试样例

测试样例或测试向量是输入处的一个值,用于检测电路中的一个或多个故障。为了覆盖更多故障,需要更多测试模式穷举测试,即应用所有输入组合,成本高昂、不切实际且不可行没有必要。

6.15. 测试概念

要测试输出 y 是否存在故障 SA0,请在输入处应用测试模式 ab = 11。如果输出为 1,则 y 没有陷入 0。如果输出为 0,则 y 处存在故障,Stuck-at-0。请注意,ab = 11 剂量不是测试 y Stuck-at-1。

6.16. 自动生成测试样例

ATPG 程序确定覆盖故障足够部分的最小激励向量集考虑 U 处的 SA0 要检测此情况,AB 必须为 11,X 也必须为 1,E 必须为 0。