当前位置: 首页 > article >正文

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

文章目录

    • Overview
      • 1. 避免影响功能逻辑设计
      • 2. 优化综合结果
      • 3. 自动化工具支持
      • 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. 综合前设计:
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,形成扫描链。
    变更后的逻辑:

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

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

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


http://www.kler.cn/a/464563.html

相关文章:

  • 【视觉SLAM:六、视觉里程计Ⅰ:特征点法】
  • HTML5实现好看的博客网站、通用大作业网页模板源码
  • 数据分析思维(七):分析方法——群组分析方法
  • RK3588+麒麟国产系统+FPGA+AI在电力和轨道交通视觉与采集系统的应用
  • java中类的加载过程及各个阶段与运行时数据区中堆和方法区存储内容
  • 设计模式学习[14]---状态模式
  • 如何通过API接入电竞数据
  • 检测碳化硅外延晶片表面痕量金属的方法
  • 大模型系列17-RAGFlow搭建本地知识库
  • Linux-Redis哨兵搭建
  • 34.键盘1 C#例子 WPF例子
  • strapi中使用Documentation插件
  • [XCTF/网络安全] Python之Django模块+curl 攻防世界 Cat 解题详析
  • 2011-2020年各省粗离婚率数据
  • 谷粒商城项目125-spring整合high-level-client
  • C++简明教程(14)动态库和静态库的内存共享机制
  • 在基于Centos7的服务器上启用【Gateway】的【Clion Nova】(即 ReSharper C++ 引擎)
  • 文件查找工具locate和find
  • 【ShuQiHere】 集成学习:提升模型性能的有效策略
  • [Qt] 常用控件 | QWidget | “表白程序2.0”
  • 按字段拆分多个工作表到独立的工作簿并增加合计-Excel易用宝
  • 2024年社区高光时刻总结!
  • 【git】git stash相关指令
  • Spring 中的 @ExceptionHandler 注解详解与应用
  • Docker- Unable to find image “hello-world“locally
  • 去除el-tabs 下面的灰色横线,并修改每一项的左右间距,和字体颜色