引言
本篇将从DFTug的第六章Getting Started进行介绍从而熟悉DFT的基本流程。本篇博客是对DFTug的一个总结概括,所以总结出来的命令是希望背下来的。
Setting Up Your Design Environment
首先,下面的几个SNPS的系统参数变量需要你在环境中定义。
link_library: 用于resolve 你的cell。
target_library:一般来说与link_library是相同的,除非你想translatng a design between technologies。
symbol_library: cell的图形
search_path:搜索的路径列表
hdlin_enable_rtldrc_info: Reports file names and line numbers associated with each violation during test design ruled checking. This makes it easier fr you to later edit the source code and fix violations.
For example:
# configuration logic libraries
set_app_var target_library {my_library.db}
set_app_var link_library {* my_library.db}
set_app_var hdlin_enable_rtldrc_info true
上面例子中,其实应该不熟悉的只有hdlin_enable_rtldrc_info了,查看syn3手册,解释如下:
官方的意思,我个人理解的应该是:开启了这个后,当我们使用dft_drc的时候,如果有violation,会定位到HDL code的行号,该选项默认是关闭的,所以官方的建议是打开。
Read In Your Design
接下来就是读入你的设计,
读取设计有三个命令:read_ddc, read_verilog, read_vhdl(verilog是我在项目中见过最多的)
dc_shell> read_verilog {my_design.v my_block.v}
dc_shell> current_design my_design
dc_shell> link
dc_shell> read_sdc top_constraints.sdc
Setting Scan Style
SNPS提供了下面四种style,其中第一种mux FF是最常用的一种,后面三种,待有机会,我会再来理解。
如下cmd是默认mux style。
dc_shell > set_scan_configuration -style multiplexed_flip_flop
Configuring te Test Cycle Timing
设置下面的测试时间变量需要询问半导体厂商,默认为下面的设置值:
dc_shell> set_app_var test_default_delay 0
dc_shell> set_app_var test_default_bidir_delay 0
dc_shell> set_app_var test_default_strobe 40
dc_shell> set_app_var test_default_period 100
Define the DFT Signals
设置DFT signals 的view有两种,一种是-view existing_dft .。另外一种是,-view spec。二者的区别,初学者可能并不能真正理解,existing_dft是不会在dft_insert阶段做make connection的动作(比如时钟信号、复位信号),而-view spec是会做make connection的动作(比如 scan_enbale信号),这是二者的本质区别。
dc_shell> set_dft_signal -view existing_dft -type ScanClock
dc_shell> set_dft_signal -view existing_dft -type Reset -active_state 0
dc_shell> set_dft_signal -view spec -type ScanEnable -port scan_enbale_port -active_state 1
即使,你是用已经存在的ports作为Scan_in和Scan_out仍然要使用-view spec的认知,因为在chain上内部是还没有连接的。这里我把-view翻译为“认知”。
dc_shell> set_dft_sgnal -view spec -type ScanDataIn -port DAT_IN[7]
dc_shell> set_dft_signal -view spec -type ScanDataOut -port DAT_OUT[7]
dc_shell> set_dft_signal -view spec -type ScanDataIn -port TEST_SI
dc_shell> set_dft_signal -view spec -type ScanDataOut -port TEST_SO
dc_shell> set_dft_signal -view spec -type ScanEnable -port TEST_SE
Configuring Scan Insertion
为了配置scan insertion,你可以指定test ports,define test modes, adn identify and mark any cells taht you do not want to have scaned.
dc_shell> set_scan_configuration -chain_count 4
接下来,你需要创建测试协议,即使你是读入了一个test_protocol,你也需要再create一下。
dc_shell> create_test_protocol
然后run pre-DFT test DRC
dc_shell> dft_drc
Preview Scan Insertion
dc_shell> preview_dft
Performing Post-DFT Optimization
默认情况下,在wire load mode中,insert_dft会自动的执行基本的门级优化,但建议是关掉他,某视频里面说他做优化做的并不好。
dc_shell> set_dft_insertion_configuration -synthesis_optimization none
但是在topographical mode下,inser_dft是不会执行post-DFT optimization的。
Inserting the DFT Logic
dc_shell> insert_dft
Analyzing Your Post-DFT Design
dc_shell> dft_drc
该过程称之为post_DFT DRC ,DFTC会检查设计测试的潜在问题。这个检查机制会比pre-DFT更加复杂。they check for the correct operation of the scan chain.
dc_shell> write -formate ddc -hierarchy -output my_design.ddc
dc_shell> write_test_protocol -output my_design_final.spf
但是有一些错误是不支持DRC的,因此只能在TMAX中来报错出来。
Reporting
接下来就是查看report,查看report是一向非常重要的技能。
dc_shell> report_scan_path -view existing_dft -chain all
dc_shell> report_scan_path -view existing_dft -cell all
#DFT Configuration Report
dc_shell> report_dft_configuration
#Scan Configuration Report
dc_shell> report_scan_configuration
#DFT Signal Report
dc_shell> report_dft_signal -view existing_dft
dc_shell>report_dft_signal -view spec
#Report on a user-specified scan path
dc_shell> report_scan_path -view spec -chain all
#autofix configuration report
dc_shell> report_autofix_configuration
本节脚本汇总,加强记忆
set_app_var target_library { xx.db}
set_app_var link_library {xx.db}
set_app_var hdlin_enable_rtldrc_info true
set_app_var test_default_delay 0
set_app_var test_default_bidir_delay 0
set_app_var test_default_strobe 40
set_app_var test_default_period 100
set_dft_signal -view existing_dft -type ScanClock
set_dft_signal -view existing_dft -type Reset -active_state 0
set_dft_signal -view spec -type ScanDataIn -port DAT_IN[7]
set_dft_signal -view spec -type ScanDataOut -port DAT_OUT[7]
set_scan_configuration -style multiplexed_flip_flop
set_scan_configuration -chain_count 4
set_dft_insertion_configuration -synthesis_optimization none
set_dft_configuration -clock_mix mix_clocks
set_dft_configuration -clock_mix mix_edges
create_test_protocol
dft_drc
preview_dft
insert_dft
dft_drc
write -formate ddc -hierarchy -output my_design.ddc
write -formate verilog -hierarchy -output my_design.v
write_test_protocol -output my_design_final.spf
report_scan_path -view existing_dft -chain all
report_scan_path -view exisiting_dft -cell all
report_dft_configuration
report_scan_configuration
report_dft_signal -view existing_dft
report_dft_signal -view spec
report_scan_path -view spec -chain all
report_autofix_configuration
如何查看报告
preview_dft -show后面有几个比较好用的选项,需要背下来。
preview_dft -show scan_clocks
参考
DFTug 第六章 p103-p121
可以结合axr的第一个lab记录进行对比巩固。
https://blog.csdn.net/ciscomonkey/article/details/110942075
https://blog.csdn.net/ciscomonkey/article/details/112221279