文章目录
- 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 插入,减少手工干预。
举例:
- 综合前设计:
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
-
综合之后:
综合工具将 RTL 转化为门级网表。 -
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 逻辑能够更高效地管理设计流程,优化功能设计与测试需求之间的权衡,同时借助自动化工具提升设计效率和测试质量。这一方法已成为工业界主流做法。