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

相关推荐
仲南音16 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd