set_dft_signal -view的参数existing_dft和spec有什么区别

本文详细解释了在DFT设计中set_dft_signal-view参数existing_dft与spec的区别。existing_dft用于已连接的信号,如时钟复位等;spec则用于定义未连接信号,如scan_enable, si, so等。

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

set_dft_signal -view的参数existing_dft和spec有什么区别

set_dft_signal的
-view有两种类型,一种是existing_dft,一种是spec。
之前一直没太注意这两者之间的差异,今天查了dc command guide之后还是有点懵。然后到eetop去搜,得到下面两个觉得还算靠谱的解释:

解释1:
existing_dft,用于定义插链前已经连接好的信号。比如时钟复位,跟一些constant的控制信号一般在插链前已经连接好了,只需要告诉工具这是一个什么信号,控制为什么值就行了。
spec:用于定义未链接好的信号,再插链时需要工具连接。比如scan_enabl,si,so。
另外,如果进行插链的电路里面已经有插好的链,那么其scan_enable也定义为existing_dft。比如,有一部分IP已经插好链了SE连到了端口dft_se,还有一部分寄存器在这次插链的时候希望把SE也连接到dft_se上去,这样就可以把dft_se在existing_dft和spec里面都定义一下。

解释2:
set_dft_signal 后面还有个-type属性,clk与rst_n是rtl设计中已经存在并且定义的属性与-type属性一致,所以用existing_dft;se是使用 compile -scan 脚本把一般寄存器换成扫描寄存器的时候添加的新的接口,rtl中没有定义它是ScanEnable属性,新赋予它-type ScanEnable,所以用spec。


上面的内容完全抄袭自:
http://bbs.eetop.cn/thread-319408-1-1.html

http://bbs.eetop.cn/viewthread.php?tid=297625

<think>好的,我现在需要解决用户的问题:在Design Compiler中启用第二条命令(set_dft_signal -view spec -port $scan_rxt_port -hookup_pin $scan_rstn_pin -type TestData)后,执行insert_dft会导致已声明的扫描链上没有scan_cell,DC会自动新建一组scan_inscan_out。而禁用该命令后则不会出现此现象。用户想知道可能的原因。 首先,我需要回顾之前用户的问题我的回答。用户之前询问了三条DFT相关命令的作用,我解释了每条命令的功能。现在的问题是第二条命令启用后导致扫描链异常,而禁用后正常。这可能涉及到DFT信号配置与扫描链插入的交互。 接下来,我需要理解第二条命令的作用。根据之前的回答,第二条命令是在spec视图下定义测试数据信号,标记为TestData类型,并绑定到指定端口引脚。这可能告诉DC该端口是测试数据信号(如扫描输入/输出),从而影响扫描链的插入逻辑。 用户提到启用这条命令后,insert_dft导致已存在的扫描链没有scan_cell,反而自动创建新的scan_in/out。可能的原因是,当启用TestData类型的信号配置后,DC可能认为用户需要重新定义扫描链结构,覆盖了现有的声明。例如,如果原本已经定义了扫描链,但通过-set_dft_signal指定了TestData类型的端口,DC可能忽略已有的扫描链设置,按照新的信号类型重新构建,导致新建而非复用已有的扫描链。 另外,可能存在的冲突是,TestData类型通常用于扫描输入输出(SI/SO),而如果现有的扫描链已经绑定了其他端口,这时候重新定义可能导致DC无法正确关联现有的scan_cell,从而创建新的端口链。 需要进一步考虑DFT流程中的步骤。通常在插入扫描链前,需要使用set_dft_signal来指定哪些端口用于扫描。如果用户已经在已有的扫描链中声明了某些端口作为扫描链的一部分,但在spec视图中重新配置了TestData类型,可能导致DC认为需要重新配置扫描链,从而忽略原有的设置,导致新建。 另外,可能的问题点在于view的不同。第一条命令使用existing_dft视图,而第二条使用spec视图。spec视图用于规划阶段的配置,可能覆盖或影响现有的结构。当启用第二条命令时,spec视图中的TestData类型信号可能强制DC按照新的规范重新生成扫描链,而不是使用现有的。 还有可能,用户在已有的扫描链中没有正确关联TestData信号,或者端口被重新定义后,原有的扫描链找不到对应的scan_cell,因此DC自动生成新的来满足TestData信号的连接需求。 总结可能的原因:启用第二条命令后,DC根据TestData类型的信号重新配置扫描链,覆盖或忽略了已有的扫描链声明,导致需要新建scan_in/out端口链结构。而禁用该命令时,DC沿用现有的配置,不会触发重新生成。</think>在Design Compiler中,启用第二条命令(`set_dft_signal -view spec -type TestData`)后出现扫描链异常,而禁用后正常,可能原因如下: --- ### **关键原因分析** #### **1. `-type TestData`的语义冲突** - **TestData类型的作用**: `-type TestData`通常用于定义扫描链的输入(SI)输出(SO)信号。若在`-view spec`(规范视图)中声明某个端口为`TestData`,Design Compiler (DC) 会认为该端口需要**直接绑定到扫描触发器**的SI/SO引脚。 - **冲突现象**: 如果**已有扫描链的声明未明确关联到该端口**,DC可能认为现有扫描链与`TestData`定义不匹配,从而**自动创建新的扫描链**,导致原有扫描链上的`scan_cell`被跳过。 #### **2. 视图(View)的优先级问题** - **`-view spec`的强制性**: `spec`视图用于**规划DFT架构**。若在`spec`视图中定义`TestData`信号,DC会优先遵循此配置,**覆盖已有扫描链的隐式定义**(如通过`create_test_protocol`生成的默认扫描链)。 - **结果**: DC会尝试基于新的`TestData`信号重建扫描链,若原有扫描链未显式绑定到该信号,则触发新建逻辑。 #### **3. 扫描链绑定的缺失** - **隐式新建条件**: 当DC检测到以下情况时,会自动生成扫描链: - 存在`TestData`类型的信号(如SI/SO),但未通过`set_scan_path`绑定到现有扫描链。 - 现有扫描链未明确声明其输入/输出端口。 - **示例**: 若用户已通过`create_scan_chain`声明了扫描链,但未通过`set_scan_path`将其与`TestData`端口关联,DC会认为两者无关,从而新建一组SI/SO。 #### **4. 命令执行顺序的影响** - **典型流程**: 1. 先通过`set_dft_signal`定义信号类型(如`TestData`)。 2. 再通过`set_scan_path`绑定扫描链路径。 - **问题场景**: 若**先执行`insert_dft`再配置`TestData`**,DC可能因信号类型未提前声明而无法关联到已有扫描链。 --- ### **解决方案** 1. **显式绑定扫描链**: 使用`set_scan_path`命令将已有扫描链与`TestData`端口关联。 ```tcl set_scan_path chain1 -view spec -scan_data_in $scan_rxt_port -scan_data_out $scan_out_port ``` 2. **调整命令顺序**: 在`insert_dft`前,确保完成所有DFT信号定义扫描链绑定。 ```tcl set_dft_signal -view spec -type TestData ... set_scan_path ... insert_dft ``` 3. **检查现有扫描链定义**: 通过`report_scan_path`验证已有扫描链是否包含`scan_cell`,并确认其输入/输出端口是否与`TestData`信号匹配。 --- ### **总结** 根本原因是**TestData信号定义与已有扫描链的绑定关系缺失**,导致DC误判需新建扫描链。通过显式绑定或调整命令顺序可避免此问题。若需进一步调试,建议提供`report_scan_configuration``report_dft_signal`的输出以定位具体冲突。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值