相关阅读TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.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 1b0; 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_cells 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直接映射为未连接/布线的测试就绪单元是建议的行为除此之外可以对已映射为非扫描时序单元的设计进行扫描替换使用带-scan选项的综合命令或insert_dft命令得到未连接/布线的测试就绪单元。未映射的时序单元会有一个值为true的属性scanned_by_test_compiler如下所示。dc_shell get_attribute [get_cells 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-topo compile_ultra -scan # Test-Ready Compile ...应用DFT设置... dc_shell-topo preview_dft dc_shell-topo insert_dft # 连接扫描链 dc_shell-topo compile_ultra -scan -incremental # 后DFT增量综合 // 对于Design Compiler Graphical dc_shell compile_ultra -scan -spg # Test-Ready Compile ...应用DFT设置... dc_shell-topo preview_dft dc_shell-topo insert_dft # 连接扫描链 dc_shell-topo compile_ultra -scan -spg -incremental # 后DFT增量综合 // 对于Design Compiler NXT dcnxt_shell compile_ultra -scan -spg # Test-Ready Compile ...应用DFT设置... dcnxt_shell-topo preview_dft dcnxt_shell-topo insert_dft # 连接扫描链 dcnxt_shell-topo 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)