【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 逻辑能够更高效地管理设计流程,优化功能设计与测试需求之间的权衡,同时借助自动化工具提升设计效率和测试质量。这一方法已成为工业界主流做法。

相关推荐
s090713612 小时前
ZYNQ DMA to UDP 数据传输系统设计文档
网络协议·fpga开发·udp
燎原星火*14 小时前
QSPI IP核 基本参数
fpga开发
XINVRY-FPGA14 小时前
XCVU9P-2FLGC2104I Xilinx AMD Virtex UltraScale+ FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
FPGA_小田老师14 小时前
FPGA Debug:PCIE一直自动重启(link up一直高低切换)
fpga开发·pcie debug·pcie初始化问题
hexiaoyan82714 小时前
视频信号检测板卡:208-Base Camera Link 图像信号模拟器
fpga开发·图像信号模拟器·视频信号检测·视频信号分析·智能图像分析
竹君子14 小时前
新能源知识库(151) RTDS和RT-LAB比较
fpga开发
brave and determined18 小时前
可编程逻辑器件学习(day34):半导体编年史:从法拉第的意外发现到塑造现代文明的硅基浪潮
人工智能·深度学习·fpga开发·verilog·fpga·设计规范·嵌入式设计
FPGA_Linuxer18 小时前
RFSOC PCIE 4.0读写测试
fpga开发
坏孩子的诺亚方舟19 小时前
FPGA系统架构设计实践8_复位参考设计
fpga开发·系统架构·复位
li星野20 小时前
打工人日报#20251124
fpga开发