相关阅读
TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm=1001.2014.3001.5482
时序单元的状态
未映射的时序单元(Unmapped Sequential Cell)
在Design Compiler读取了一个RTL设计后,Design Compiler内置的HDL Compiler工具会将其转化为GTECH格式(或者说Generic Technology格式)的网表,其中的时序单元(例如触发器和锁存器)会使用SEQGEN(或者说Generic/Unmapped Sequential Cell)表示,SEQGEN的框图如图1所示。
图1 SEQGEN及其引脚表示
例1展示了一个异步复位D触发器的RTL描述和其对应的SEQGEN实现,如图2所示。
// 例1
module D_FF (
input wire clk, // 时钟信号
input wire reset, // 异步复位信号
input wire d, // 数据输入
output reg q // 数据输出
);
// 异步复位逻辑
always @(posedge clk or posedge reset) begin
if (reset) // 如果复位信号为高,输出q清零
q <= 1'b0;
else // 否则,在时钟的上升沿将输入d传递到q
q <= d;
end
endmodule
图2 DFF的SEQGEN实现
实际上,一旦设计中存在未映射的单元(此处单元可以指时序单元也可以指其他叶单元,还可以指包含未映射叶单元的层次单元),使用preview_dft或insert_dft命令时就会报错,无法进行扫描替换或者扫描连接。有关叶单元的相关介绍,可以见静态时序分析:Leaf Cell(叶单元)一文。
未映射的时序单元会有一个值为true的属性is_a_generic_seq,如下所示。
dc_shell> get_attribute [get_cell q_reg] is_a_generic_seq
true
非扫描时序单元(Nonscan Cell)
在Design Compiler中使用综合命令(不使用-scan选项)后,SEQGEN将被映射为具体的库单元,此时的时序单元被称为非扫描时序单元。
图3展示了映射到库单元的异步复位D触发器,库单元的参考名为DFFRQX2。
图3 DFF的映射后实现
未连接/布线的测试就绪单元(Unstitched/Unrouted Test-ready Cell)
在Design Compiler中使用综合命令(使用-scan选项,这被称为Test-Ready Compile)后,非SEQGEN将被映射为未连接/布线的测试就绪单元,此时扫描链尚未将这些测试就绪单元连接起来,扫描输入(SI)和扫描使能(SE)等扫测试引脚会被连接到适当的状态以启用功能模式(这些连接临时的)。
图4展示了映射到库单元的扫描异步复位D触发器,库单元的参考名为SDFFRQX2,这是图3所示DFF的扫描等价。
图4 DFF的扫描单元实现
使用Test-Ready Compile将SEQGEN直接映射为未连接/布线的测试就绪单元是建议的行为,除此之外可以对已映射为非扫描时序单元的设计进行扫描替换(使用compiler -scan或insert_dft命令)得到未连接/布线的测试就绪单元。
未映射的时序单元会有一个值为true的属性scanned_by_test_compiler,如下所示。
dc_shell> get_attribute [get_cell q_reg] scanned_by_test_compiler
true
需要注意的是,在某些情况下,不使用-scan选项的综合命令也会将SEQGEN直接映射为扫描触发器(比如使用只有扫描触发器的库进行综合),但此时它不是一个未连接/布线的测试就绪单元,因此没有scanned_by_test_compiler属性。
已连接/布线的扫描单元(Stitched/Routed Scan Cell)
当使用insert_dft命令后,符合条件(比如满足设计规则约束)的未连接/布线的测试就绪单元将被连接为扫描链,成为已连接/布线的扫描单元,如图5所示。
图5 一个全扫描设计的扫描链路径
时序单元的连接顺序
在Design Compiler的线负载模式下,扫描单元按完整层次路径名称中的字母和数字顺序分配并排序到扫描链中。
在Design Compiler的拓扑模式下,扫描元件根据虚拟布局信息分配和排序到扫描链,这样可以减少扫描路由的开销。在这种情况下,preview_dft和insert_dft命令会发出以下消息,表示使用了拓扑信息:
Running DFT insertion in topographical mode.
后DFT优化
在扫描链连接后,还可以进行后DFT优化,根据模式的不同,后DFT优化的命令也不同。下面所有的例子,假设从RTL描述开始编译。
线负载模式
// 例2
// 对于DC Expert
dc_shell> compile -scan # Test-Ready Compile
...应用DFT设置...
dc_shell> preview_dft
dc_shell> insert_dft # 连接扫描链
// 对于DC Ultra
dc_shell> compile_ultra -scan # Test-Ready Compile
...应用DFT设置...
dc_shell> preview_dft
dc_shell> insert_dft # 连接扫描链
在Design Compiler线负载模式下,insert_dft命令默认自动执行基本的门级后DFT优化。如果需要,可以通过以下命令禁用它:
dc_shell> set_dft_insertion_configuration -synthesis_optimization none
注意:在这种情况下,如果禁用了insert_dft命令的自动后DFT优化,仍然可以手动执行后DFT增量编译来进行后DFT优化。
// 对于DC Expert
dc_shell> compile -scan -incremental # 后DFT增量编译
// 对于DC Ultra
dc_shell> compile_ultra -scan -incremental # 后DFT增量编译
拓扑模式
// 例3
// 对于DC Ultra
dc_shell> compile_ultra -scan # Test-Ready Compile
...应用DFT设置...
dc_shell> preview_dft
dc_shell> insert_dft # 连接扫描链
dc_shell> compile_ultra -scan -incremental # 后DFT增量编译
// 对于Design Compiler Graphical
dc_shell> compile_ultra -scan -spg # Test-Ready Compile
...应用DFT设置...
dc_shell> preview_dft
dc_shell> insert_dft # 连接扫描链
dc_shell> compile_ultra -scan -spg -incremental # 后DFT增量编译
// 对于Design Compiler NXT
dcnxt_shell> compile_ultra -scan -spg # Test-Ready Compile
...应用DFT设置...
dcnxt_shell> preview_dft
dcnxt_shell> insert_dft # 连接扫描链
dcnxt_shell> compile_ultra -scan -spg -incremental # 后DFT增量编译
在Design Compiler拓扑模式下,insert_dft命令不会执行后DFT优化,需要在insert_dft命令完成,手动执行后DFT增量编译来进行后DFT优化,下面的命令在拓扑模式是无效的。
dc_shell-topo> set_dft_insertion_configuration -synthesis_optimization all
当增量优化设计时,工具会根据需要对扫描链中的扫描单元进行重新排序和重分区,以进一步减少拥塞。在这种情况下,compile_ultra命令会显示以下消息:
Information: Performing scan chain reordering in the SPG flow. (SPG-126)