DFT compiler极简示例2(使用autofix)

10 篇文章 0 订阅

DFT compiler极简示例2

电路结构

在这里插入图片描述
电路对于SCAN不友好的地方在于 resetn不可控,两种解决手段
(1) 改代码:或者RTL设计人员修改,或者DFT工具 autofix (本文使用autofix)
(2) 改pattern:利用初始化序列控制住resetn不复位。

RTL

module ssug (in1, in2, clk, cdn, out1, out2);
input in1, in2, clk, cdn;
output out1, out2;
reg ff_a, ff_b, ff_c, ff_d;
wire resetn;
always @(posedge clk) begin
ff_b <= ff_a;
ff_a <= cdn;
end
assign resetn = cdn & ff_b;
always @(posedge clk or negedge resetn) begin
if (!resetn) begin
ff_c <= 1’b0;
ff_d <= 1’b0;
end
else begin
ff_c <= in1;
ff_d <= in2;
end
end
assign out1 = ff_c;
assign out2 = ff_d;
endmodule

脚本

set_app_var search_path “…/ref …/ref/db ./rtl ./”
set_app_var target_library “sc_max.db”
set_app_var link_library “* sc_max.db dw_foundation.sldb”
set synthetic_library {dw_foundation.sldb}
set hdlin_enable_rtldrc_info true;
read_verilog rtl/ssug.v
current_design ssug
link
create_clock -name clk [get_ports clk] -period 100
compile -scan

write -format ddc -hierarchy -output results/ssug.scan.ddc
write -format verilog -hierarchy -output results/ssug.scan.no_protocol.vg

set_dft_signal -view existing_dft -type ScanClock -timing [list 45 55 ] -port clk
set_dft_signal -view existing_dft -type Constant -active_state 1 -port cdn
create_test_protocol
write_test_protocol -output first.spf
write -format verilog -hierarchy -output results/ssug.scan.protocol.vg

结果

(1)如果没有处理resetn
dft_drc

Begin Pre-DFT violations...
Warning: Reset input CDN of DFF ff_c_reg was not controlled. (D3-1)
Information: There is 1 other cell with the same violation. (TEST-173)
Pre-DFT violations completed...

SEQUENTIAL CELLS WITH VIOLATIONS
      *   2 cells have test design rule violations
SEQUENTIAL CELLS WITHOUT VIOLATIONS
      *   2 cells are valid scan cells

(2)没有test协议之前,
scan netlist

module ssug ( in1, in2, clk, cdn, out1, out2 );
  input in1, in2, clk, cdn;
  output out1, out2;
  wire   ff_b, ff_a, n7;

  sdnrq1 ff_a_reg ( .D(cdn), .SD(1'b0), .SC(1'b0), .CP(clk), .Q(ff_a) );
  sdnrq1 ff_b_reg ( .D(ff_a), .SD(1'b0), .SC(1'b0), .CP(clk), .Q(ff_b) );
  sdcrq1 ff_c_reg ( .D(in1), .SD(1'b0), .SC(1'b0), .CP(clk), .CDN(n7), .Q(out1) );
  sdcrq1 ff_d_reg ( .D(in2), .SD(1'b0), .SC(1'b0), .CP(clk), .CDN(n7), .Q(out2) );
  an02d1 U9 ( .A1(ff_b), .A2(cdn), .Z(n7) );
endmodule

(3)建立test协议之后
scan netlist

module ssug ( in1, in2, clk, cdn, out1, out2, test_si, test_so, test_se );
  input in1, in2, clk, cdn, test_si, test_se;
  output out1, out2, test_so;
  wire   ff_b, ff_a, n7;
  assign test_so = ff_b;

  sdnrq1 ff_a_reg ( .D(cdn), .SD(test_si), .SC(test_se), .CP(clk), .Q(ff_a) );
  sdnrq1 ff_b_reg ( .D(ff_a), .SD(ff_a), .SC(test_se), .CP(clk), .Q(ff_b) );
  sdcrq1 ff_c_reg ( .D(in1), .SD(1'b0), .SC(1'b0), .CP(clk), .CDN(n7), .Q(out1) );
  sdcrq1 ff_d_reg ( .D(in2), .SD(1'b0), .SC(1'b0), .CP(clk), .CDN(n7), .Q(out2) );
  an02d1 U9 ( .A1(ff_b), .A2(cdn), .Z(n7) );
endmodule

如果没有修正,虽然可以插入scan,但是DRC问题依然。

(4)set_dft_configuration -fix_reset enable之后
preview_dft

************ Test Point Plan Report ************
Total number of test points  : 1
Number of Autofix test points: 1
Number of Wrapper test points: 0
Number of test modes         : 1
Number of test point enables : 0
Number of data sources       : 1
Number of data sinks         : 0
**************************************************

insert_dft

module ssug ( in1, in2, clk, cdn, out1, out2, test_si, test_so, test_se, 
        data_source, test_mode );
  input in1, in2, clk, cdn, test_si, test_se, data_source, test_mode;
  output out1, out2, test_so;
  wire   ff_b, ff_a, n15, n16;

  sdnrq1 ff_a_reg ( .D(cdn), .SD(test_si), .SC(test_se), .CP(clk), .Q(ff_a) );
  sdnrq1 ff_b_reg ( .D(ff_a), .SD(ff_a), .SC(test_se), .CP(clk), .Q(ff_b) );
  sdcrq1 ff_c_reg ( .D(in1), .SD(ff_b), .SC(test_se), .CP(clk), .CDN(n15), .Q(
        out1) );
  sdcrq1 ff_d_reg ( .D(in2), .SD(out1), .SC(test_se), .CP(clk), .CDN(n15), .Q(
        out2) );
  an02d1 U9 ( .A1(ff_b), .A2(cdn), .Z(n16) );
  mx02d0 U10 ( .I0(ff_b), .I1(out2), .S(test_se), .Z(test_so) );
  mx02d1 U11 ( .I0(n16), .I1(data_source), .S(test_mode), .Z(n15) );
endmodule

全部上链。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值