TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化

相关阅读

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/UnmappedSequential 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)
相关推荐
云空5 小时前
《新凯来:半导体设备制造领域的“国家队”》
硬件工程·制造·材料工程·精益工程
小麦嵌入式17 小时前
Linux驱动开发实战(九):Linux内核pinctrl_map详解与优势分析
linux·c语言·汇编·驱动开发·stm32·嵌入式硬件·硬件工程
Moonnnn.2 天前
运算放大器(三)运算放大器的典型应用
笔记·学习·硬件工程
硬件进化论3 天前
从基础到实践(二十三):MCU选型设计指南
单片机·嵌入式硬件·数码相机·电脑·硬件工程·智能手表·智能电视
Yesheldon4 天前
高速电路中的存储器应用与设计三
单片机·嵌入式硬件·fpga开发·硬件架构·硬件工程·智能硬件
陌夏微秋6 天前
开源项目-数控直流电子负载2 120w数控直流电子负载-硬件分析
stm32·单片机·嵌入式硬件·硬件架构·硬件工程·智能硬件
Hug Freedom.6 天前
CHI协议——retry
开发语言·前端·硬件工程·risc-v
Yesheldon7 天前
高度电路中时序设计之二
嵌入式硬件·fpga开发·硬件架构·硬件工程·智能硬件
lindaakk12 天前
从设计到量产:MHO5000如何实现电源EMIEMC测试全流程自动化?
人工智能·驱动开发·fpga开发·硬件工程·dsp开发·射频工程
XYN6113 天前
【嵌入式学习】嘉立创画pcb门电路
笔记·嵌入式硬件·学习·硬件工程