回复 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 |