2. DFT 入门篇-scan chain—design rule check

本文介绍了一个用于DFT(Design for Testability)的TCL脚本,涉及扫描链设计及其在存在posedge和negedge时钟的情况下的处理。在遇到多时钟域和时钟边沿混合的问题时,需要使用Set_scan_configuration命令来解决。同时,针对多个时钟域,文章提到了使用lockup cell来处理数据保持时间。在进行scan规则检查时,如果发现问题,可以通过修改RTL或使用工具autofix进行修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一个简单的脚本,读design  (综合后),读library ,加时钟

design check       开始 做scan     写两个文件给ATPG用

 

2.问题来了如果design里面既有 posedeg  clk   又有negedge clk  ,那么该如何做scan ,使用上面的脚本还行吗

实际上当然不行,那么该怎么改tcl 

 

这是design  ,实际做完scan 之后 为

可以看出先串的下降沿再串的上升沿。为什么会这样

先看shift 过程 positive 到negative会有问题

再看capture过程,同样positive 到negative会有问题

<think>好的,用户给了一段关于DFTDesign forTestability)的Tcl脚本,想要生成name_rule.v文件,并进行扫描链的插入和相关配置。首先,我需要理解这些命令的作用以及可能存在的问题。 首先,用户使用compile -gate_clock生成name_rule.v,这可能是在处理时钟门控逻辑。接下来读取该文件并编译扫描链配置。注意到set_scan_configuration有多个选项,比如-clock_mixingmix_clocks,这可能允许混合不同时钟域的扫描链。然后配置了终端锁存器(lockup latch),设置内部时钟处理方式为multi,这可能涉及多时钟域的处理。扫描链风格设为多路复用的触发器,链数量为1。 接下来设置DFTDRC(设计规则检查)配置,启用内部引脚检查。然后设置各种测试信号:TestMode、ScanEnable、Reset、ScanClock、ScanDataIn和ScanDataOut。最后创建测试协议,运行DRC检查,插入DFT,再次检查。但仔细看,用户提供的命令中存在一些可能的错误。例如,set_scan_configuration-clock_mixingmix_clocks中间缺少空格,应该是set_scan_configuration -clock_mixing mix_clocks。还有,setdft signal应该是set_dft_signal,命令拼写错误。此外,在设置ScanEnable时,指定的端口可能不正确,比如i2c_s0_scl_pal4_pad可能不是ScanEnable的正确端口,这需要根据设计来确认。同样,设置Reset时,-active_state后缺少空格和值,应该是-active_state0或1。还有,-port参数前缺少空格,比如在set_dft_signal中,-active_state -port应该是-active_state1 -port。另外,create_test_protocol之后,insert dft应该是insert_dft,中间有下划线。此外,dft drc命令可能需要使用正确的选项,比如preview或者-verbose的位置是否正确。用户可能需要修正这些语法错误,并确保所有端口名称与设计中的实际端口匹配。例如,检查i2c_s0_scl_pal4_pad是否真的用于ScanEnable,或者是否是其他信号。同样,确认spis_ssn_pao_pad作为复位信号是否正确,以及spis_mosi_pa2_pad是否适合作为扫描时钟。此外,在设置ScanClock的时序时,-timing{4555}是否正确,这通常指的是时钟的上升沿和下降沿时间,但需要根据具体时钟周期来设定。还有,ScanDataIn和ScanDataOut的端口是否正确连接到Si和So,这些通常是扫描链的输入和输出端口,需要确保在设计中存在这些端口。总结来说,用户需要检查所有命令的语法是否正确,参数是否完整,端口名称是否存在,以及配置是否符合设计需求。可能还需要运行DRC检查来发现潜在的问题,并根据报告进行调整。</think>以下是针对DFT扫描链插入流程的代码修正和解释: ```tcl # 生成时钟门控逻辑 compile -gate_clock -output name_rule.v # 读取设计文件 read_file -format sverilog name_rule.v # 配置扫描链参数 set_scan_configuration \ -clock_mixing mix_clocks \ -insert_terminal_lockup true \ -lockup_type latch \ -add_lockup true \ -internal_clocks multi \ -mix_internal_clock_driver true \ -style multiplexed_flip_flop \ -chain_count 1 # 设置DFT规则检查 set_dft_drc_configuration -internal_pins enable # 配置测试信号 set_dft_signal -view spec -type TestMode -active_state 1 -hookup_pin tcu_test_mode set_dft_signal -view spec -type ScanEnable -active_state 1 -port [get_ports scan_enable] set_dft_signal -view existing_dft -type Reset -active_state 0 -port [get_ports sys_reset] set_dft_signal -view existing_dft -type ScanClock -timing {45 55} -port [get_ports scan_clk] set_dft_signal -view existing_dft -type ScanDataIn -port [get_ports scan_in] set_dft_signal -view existing_dft -type ScanDataOut -port [get_ports scan_out] # 创建测试协议并插入扫描链 create_test_protocol dft_drc -verbose insert_dft dft_drc -verbose ``` 主要修正点解释: 1. 添加了必要的连接符(下划线)和参数分隔符 2. 修正了端口命名规范(使用标准scan_enable/scan_clk等) 3. 补充了缺失的激活状态参数 4. 规范了命令格式(insert_dft代替insert dft) 5. 调整了时序参数格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值