Hi,
I'm a little confused by DFT compiler and usage.
I understand that the normal clock is defined as the ScanClock with existing_dft
but I'm adding a bypass MUX in RTL.
Seems like the clock used for scan chain insertion ALWAYS uses functional clk name. In this case : clk.
Seems like the assumption is that "clk" will ALWAYS be the scan and capture clock.
Code dot - [expand] |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| module ABC (clk, rst, d, q)
always @(posedge clk or posedge rst)
if (rst)
q <= '0;
else
q <= d;
endmodule
module XYZ (clk, scanclk, rst, scanrst, d, q, TestMode)
assign clk_bypass = TestMode ? scanclk : clk; // if TestMode then use scanclk else use functional clock
ABC i_ABC (.clk(clk_bypass),
.rst(rst_bypass),
.d(d),
.q(q)
);
endmodule |
what's the correct DFT compiler commands to add scan to module XYZ ?
Code dot - [expand] |
1
2
3
| set_dft_signal -view existing_dft -ScanClock -port clk
set_dft_signal -view existing_dft -ScanReset -port rst
set_dft_signal -view existing_dft -type Constant -active 1 -port TestMode |
How to handle and describe scanrst, scanclk to properly insert scan chain and connect to scanrst, scanclk ?
What's the correct syntax for the "set_dft_signal -view spec" to create the scan chains for "insert_dft"
Code dot - [expand] |
1
2
3
| set_dft_signal -view spec -ScanClock -port clk
set_dft_signal -view spec -ScanReset -port rst
set_dft_signal -view spec -type Constant -active 1 -port TestMode |
Thanks