​​​​DFT学习笔记-Mbist_insertion_flow

DFT学习:Mbist插入流程详解
本文详细描述了在设计中插入Mbist电路的过程,涉及DC(DesignCompiler)和Tessent工具的使用,包括预处理、Mbist电路插入、时钟管理、安全值设置、DFT规范指定、综合与后期清理等步骤。

目录

Mbist flow-prepare

EDA_Setting

dc.mbist.pre

design loading

generate instances list

create dft port

create tdr bits buffer

mem clk connection

memory safevalue

pre DFT

netlist write out

ts.mbist

design loading

specify and verify DFT requirement

create DFTSpecification

process DFTSpecification

etract ICL

systhesis

dc.mbist.eco

ts.mbist_sdc_extract


在为设计插入Mbist电路时,用到的工具主要是dc(design compiler)以及tsessent,dc用来做插入Mbist之前及之后的处理,tessent用来插Mbist电路。这个图里是mbist insertion的完整flow,红框里是插mbist电路的主要流程。具体来说,开始插Mbist之前,为了避免之后可能会出现的一些DRC violation,我们会在dc.mbist.pre里将memory原本的function clock打断,连接上我们做Mbist的clock,相当于提前clean一下DRC;接着,我们在tessent里插具体的mbist电路;最后,在插完Mbist之后,还要把clock连接还原,这一部分就是dc.mbist_eco。

  • 在submit job之前,我们要prepare一些文件。
  • 并且还要记得在脚本里source好工具的运行环境。
  • 然后就是红框里的job。
  • 最后,把所有的mbist的所有job完成之后,我们将新的sdc文件提取出来,方便后面的仿真,Mbist_insertion_flow就算是完成了。

下面介绍下我学习过程中认为可能比较重要的脚本以及里头一些可能比较关键的步骤。

Mbist flow-prepare

需要准备的文件包括:

1.设计的库文件

2. design database文件

3. 或许用到的一些自定义连接文件

这三类文件一般放在三个不同的脚本里,为相应的路径定义好关键字,用的时候直接在脚本里source一下,就根据关键字可以提取他们的路径了。

EDA_Setting

这块没啥好说的,就是把不同工具软件的环境及路径在脚本里定义好,source这个脚本是开始工作的第一步,不然工具是起不来的。

dc.mbist.pre

<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. 调整了时序参数格式
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值