在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: sages

[求助] DFT中扫描链的插入而引入的测试端口是自己加上去的还是自动加上去的呢?

[复制链接]
 楼主| 发表于 2012-8-7 12:08:14 | 显示全部楼层
回复 11# otogyg


   恩,非常感谢您的耐心回答。那也就是说scanin和scanout端口就只需要在RTL级中添加端口即可,不需要在内部做RTL级的选通了吗?此外,如果我的clock和reset需要在RTL级做选通,那么在测试的时候,是不是ATE可以自动处理信号的切换呢?(比如只需要给ATE相应的类似STIL文件那样的东西)
发表于 2012-8-7 12:22:07 | 显示全部楼层
回复 12# sages

1)scanin和scanout,如果不做端口复用就不用选通。
2)测试时ATE控制所有的端口,根据STIL文件加激励,
     只要STIL是正确的就没什么问题。
 楼主| 发表于 2012-8-7 16:55:42 | 显示全部楼层
回复 13# otogyg


    OK,我大概懂您的意思了。我看了下lab中的程序,发现的确对于clock和reset单独做了两个模块。但是也有个问题想问一下,这两个是高扇出的网络。如果对clock和reset做了选通,比如时钟网络,那么在DC中做时钟约束的时候按理说应当对两个时钟都做处理吧?也就是说一个芯片会存在两个时钟数网络咯?但是如果这两个时钟的频率相差本来就比较大,比如一个100M(clk_a),一个1M(clk_b),假设选通后的为clk,那么对clk_a和clk_b做时钟树网络的时候,其实也就是对clk做时钟树网络,但是,比如在DC中加入transition之类的,对clk加的transition应当以clk_a还是clk_b为标准呢?

问题有点繁琐,非常感谢您的回答
 楼主| 发表于 2012-8-7 17:31:16 | 显示全部楼层
回复 13# otogyg

我这边写了一个简单的加法器,然后将时钟进行选通,选通的方式采用同步化处理,以避免毛刺。但是我发现我进行DFTC之后,没办法把所有链串上。想请问一下这个的原因是我的DC设置命令有问题,还是RTL级代码有问题呢。太麻烦你了,怎么转信元给您呢。
compile -scan
set_dft_signal -view existing_dft -type ScanClock -port clk_test -timing [list 45 55]
set_dft_signal -view existing_dft -type Reset -port reset_n -active_state 0
set_dft_signal -view existing_dft -type ScanDataIn -port test_in
set_dft_signal -view existing_dft -type ScanDataOut -port test_out
set_dft_signal -view existing_dft -type ScanEnable -port test_mode
create_test_protocol
dft_drc
dft_drc
preview_dft
insert_dft
report_scan_path -view existing_dft -chain all

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    module adder(
    clk_df, reset_n,
    a, b,
    c_clk2,
    clk_test,
    //reset_test,
    test_mode,
    test_in,
    test_out
);

input clk_df, reset_n;
input a, b;
output c_clk2;

input clk_test;//, reset_test;
input test_mode;
input test_in;
output test_out;

reg c,c_clk1, c_clk2;
reg a_clk1, b_clk1;

wire en_test, en_func, clk1, clk2, clk;
reg    d_test, d_func;

//===================clock block
assign en_test = (~test_mode) ^ (~d_func);
assign en_func = (test_mode) ^ (~d_test);
assign clk1 = clk_test ^ (~d_func);
assign clk2 = clk_df ^ (d_test);
assign clk = clk1 || clk2;

always @ (negedge clk_test or negedge reset_n)
begin
    if (!reset_n)
        d_test <= 1'b0;
    else
        d_test <= en_test;
end

always @ (negedge clk_df or negedge reset_n)
begin
    if (!reset_n)
        d_func <= 1'b0;
    else
        d_func <= en_func;
end


always @ (posedge clk or negedge reset_n)
begin
    if (!reset_n)
        begin
            c <= 0;
            c_clk1 <= 0;
            c_clk2 <= 0;
            b_clk1 <= 0;
            a_clk1 <= 0;
        end
    else
        begin
            a_clk1 <= a;
            b_clk1 <= b;
            c <= a_clk1+b_clk1;
            c_clk1 <= c;
            c_clk2 <= c_clk1;
        end
end

endmodule
发表于 2012-8-7 18:51:17 | 显示全部楼层
回复 15# sages

insert dft后还需要做compile -incremental -scan
还要做dft_drc
发表于 2012-8-7 18:52:30 | 显示全部楼层
回复 14# sages

按最高时钟来约束,一般测试时钟是10M。
发表于 2012-8-7 21:40:03 | 显示全部楼层
test_en 和 scan_en 是专有端口。
scan_in scan_out scan_clk 可以复用 primary io。
 楼主| 发表于 2012-8-9 15:05:55 | 显示全部楼层
回复 16# otogyg


    我在create了protocol之后做dft_drc就报错,但是我没有找到如何修复这个错误的方法。错误如下
Screenshot-Design Vision - TopLevel.2 (adder)-1.png

如果我不管这个错误继续往下做。在insert_dft之后,我点开schematic,就显示出只有白色显示的一条扫描链,如下图,而且我感觉这个链不太对:
1_1_adder].png

如果之后我再compile -incr -scan,发现schematic跟上面这幅图没有什么区别。如下图所示:
222].png


我不知道这是怎么回事呢
1_adder.png
 楼主| 发表于 2012-8-9 15:07:23 | 显示全部楼层
回复 18# qwpsmile


    恩,好的,谢谢。大概懂这个端口的意思了,我发现scanin和out只需要定义一下,不需要在RTL级指定逻辑也可以。但是就是出现上面我描述的问题。不知道怎么回事。
发表于 2012-8-9 15:51:42 | 显示全部楼层
回复 19# sages

串的不对,filp-flop的si于se端都还接地,就没串上。
这个错误的意思是b_clk1_reg这个filp_flop的时钟在测试下是不可控的。
测试下这个DFF的时钟要直接用外部测试时钟,而不是经过内部逻辑之后的一个时钟。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-20 11:37 , Processed in 0.028750 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表