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

相关推荐
ThreeYear_s2 小时前
基于FPGA控制ADC0832双通道采样+电压电流采样+LCD屏幕显示
fpga开发
ktd00712 小时前
`timescale 1ns/1ps的意义
fpga开发
我是苹果,不是香蕉13 小时前
双端口ram与真双端口ram的区别
fpga开发
尤老师FPGA13 小时前
LVDS系列11:Xilinx Ultrascale系可编程输入延迟(一)
fpga开发
Terasic友晶科技16 小时前
第20篇:Linux设备驱动程序入门<七>
fpga开发·定时器·de1-soc开发板·linux设备驱动程序
怪小庄吖19 小时前
7系列 之 OSERDESE2
笔记·fpga开发·硬件架构·硬件工程·xilinx·7系列fpga·i/o资源
怪小庄吖19 小时前
UG471 之 SelectIO 逻辑资源
笔记·fpga开发·硬件架构·硬件工程·xilinx·7系列fpga·i/o资源
MVP-curry-萌神1 天前
FPGA图像处理(5)------ 图片水平镜像
图像处理·fpga开发
9527华安1 天前
Altera系列FPGA纯verilog视频图像去雾,基于暗通道先验算法实现,提供4套Quartus工程源码和技术支持
fpga开发·图像去雾·quartus·altera·基于暗通道先验
碎碎思1 天前
不用官方EDA怎么开发FPGA?
fpga开发