【SOC 芯片设计 DFT 学习专栏 -- DFT 为何需要在综合之后插入】

文章目录

    • Overview
      • [1. 避免影响功能逻辑设计](#1. 避免影响功能逻辑设计)
      • [2. 优化综合结果](#2. 优化综合结果)
      • [3. 自动化工具支持](#3. 自动化工具支持)
      • [4. 更好地支持 DFT 验证与调试](#4. 更好地支持 DFT 验证与调试)

Overview

本文主要介绍在 soc 设计中 DFT 逻辑为何是在 综合之后插入。

在 SoC(System on Chip)设计中,DFT(Design for Testability,设计可测性)逻辑通常是在 综合之后 插入,这种方式的主要原因和优势包括以下几点:

1. 避免影响功能逻辑设计

在综合之前,设计的重点是描述功能行为,而不涉及具体的硬件实现形式。如果过早插入 DFT 逻辑,可能会影响功能描述的简洁性和逻辑清晰性,增加 RTL(Register Transfer Level)代码的复杂度,导致错误或理解困难。

例如:

  • 原始功能设计可能只需关注数据的传输和处理。

  • 插入扫描链、插入测试点等操作会引入额外寄存器和布线逻辑,导致设计和调试更加复杂。

2. 优化综合结果

在综合过程中,EDA 工具会对设计逻辑进行优化(比如门级优化、功耗优化)。如果在综合前插入 DFT 逻辑,功能逻辑与 DFT 逻辑可能被混合优化,影响工具的优化效率以及 DFT 的完整性和可控性。

例如:

  • 综合工具在 DFT 逻辑插入之前,可以专注于优化原有设计。

  • 综合后的门级网表具备稳定性,便于自动插入测试结构如 扫描链(Scan Chain)

3. 自动化工具支持

综合之后的网表更加稳定和精简,基于此可以使用 DFT 工具自动化插入 DFT 结构,例如插入扫描链(Scan Chain)、测试点(Test Point)和内建自测试(BIST)。这样的自动化过程可以高效完成 DFT 插入,减少手工干预。
举例:

  1. 综合前设计:
verilog 复制代码
module functional_design(
    input clk,
    input rst,
    input [3:0] data_in,
    output [3:0] data_out
);
    reg [3:0] data_reg;
    always @(posedge clk or posedge rst) begin
        if (rst)
            data_reg <= 0;
        else
            data_reg <= data_in;
    end
    assign data_out = data_reg;
endmodule
  1. 综合之后:

    综合工具将 RTL 转化为门级网表。

  2. DFT 插入:

    插入扫描链,加入额外的输入和控制信号:

  • 添加 Test Mode 信号 test_mode

  • 替换原寄存器 data_reg 为扫描可控寄存器 scan_reg,形成扫描链。
    变更后的逻辑:

  • 原寄存器被替换为支持测试模式的寄存器。

  • 测试模式激活时,可以通过扫描输入观察或控制寄存器值。

verilog 复制代码
module dft_design(
    input clk,
    input rst,
    input test_mode,
    input scan_in,
    output scan_out,
    input [3:0] data_in,
    output [3:0] data_out
);
    reg [3:0] scan_reg;
    wire [3:0] functional_data;
    
    // Scan chain implementation
    always @(posedge clk) begin
        if (test_mode)
            scan_reg <= {scan_in, scan_reg[3:1]}; // Shift in during test mode
        else
            scan_reg <= data_in; // Normal operation
    end

    assign functional_data = scan_reg;
    assign data_out = functional_data;
    assign scan_out = scan_reg[0]; // Scan chain output
endmodule

4. 更好地支持 DFT 验证与调试

在综合后插入的 DFT 逻辑处于门级网表级别,更加接近真实硬件,实现更方便的验证和调试:

  • 自动验证: 工具可以检查扫描链的连通性。

  • 故障覆盖率分析: 可评估插入的 DFT 是否覆盖了关键故障点。

  • 简化调试流程: 综合后的 DFT 逻辑避免与 RTL 功能逻辑混淆。

总结

在综合后插入 DFT 逻辑能够更高效地管理设计流程,优化功能设计与测试需求之间的权衡,同时借助自动化工具提升设计效率和测试质量。这一方法已成为工业界主流做法。

相关推荐
博览鸿蒙8 小时前
什么样的人适合从事FPGA开发的工作?
fpga开发
whik119420 小时前
Xilinx Vivado环境下载bit后自动触发ILA采集
fpga开发
JoneMaster1 天前
[读书日志]8051软核处理器设计实战(基于FPGA)第五篇:8051软核处理器主体框架搭建(verilog)
嵌入式硬件·fpga开发·硬件架构
楠了个难2 天前
以太网UDP协议栈实现(支持ARP、ICMP、UDP)--FPGA学习笔记26
学习·fpga开发·udp
AomanHao2 天前
【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现
图像处理·笔记·算法·fpga开发·插值·超分
简简单单做算法2 天前
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
fpga开发·verilog·snn·lif神经元
乌恩大侠2 天前
【USRP】教程:在Macos M1(Apple芯片)上安装UHD驱动(最正确的安装方法)
macos·fpga开发·usrp
简简单单做算法2 天前
基于FPGA的SNN脉冲神经网络之IM神经元verilog实现,包含testbench
fpga开发·脉冲神经网络·snn·im神经元
cucoder2 天前
Verilog语法之常用行为级语法
fpga开发
32码奴2 天前
FPGA基本语法与使用
fpga开发·fpga