2. EDT ‐ Command File - Vinayak-Pragada/Navigation-Chip GitHub Wiki

set WORK_DIR /hdd2/home/vamsy/FEB_2022/level4_projects/Final_lab set_context dft -rtl -design_id cpu_top_edt

Set the location of the TSDB. Default is the current working directory.

set_tsdb_output_directory $WORK_DIR/tsdb_outdir

No need to read in the design using read_verilog. It can be read directly from the TSDB.

read_design cpu_top -design_id cpu_top_mbist -verbose

Reading Mem Libs and Pad libs

read_cell_library ../../DATA/libs/tphn40lpgv2od3_sl.mdt read_cell_library ../../DATA/libs/tcbn40lpbwp.mdt dofile ../../DATA/libs/DATA/memory_atpg.libs

Design sources/ Include Directories ################;

set_design_sources -format tcd_memory -Y ./ -extension tcd_memory

Declare Design top level module name

set_current_design cpu_top

add_black_boxes -auto

Add DFT Signals

DFT Signal used for logic test

add_dft_signals ltest_en

add_dft_signals scan_en edt_update test_clock -source_node { rx_core_u0/u_pin_mux/scan_enable rx_core_u0/u_pin_mux/edt_update EXT_CLK }

report_dft_signals

Create shift_capture_clock and edt_clock as gated versions of test_clock

add_dft_signals shift_capture_clock edt_clock -create_from_other_signals

DFT Signal used by top-level EDT

add_dft_signals edt_mode

DFT Signal used for BoundaryScan to be used with logic test without contacting inputs

add_dft_signals int_ltest_en output_pad_disable

DFT Signal used for Scan Tested Instruments like memorybist/boundary scan

add_dft_signals tck_occ_en

DFT Signal used to bypass memories

add_dft_signals memory_bypass_en

report_dft_signals

add_nonscan_instance rf_0* add_nonscan_instance /rx_core_u0/clk_gen_inst* add_nonscan_instance /rx_core_u0/reset_gen_inst* add_nonscan_instance /cpu_top_cpu_top_mbist_tessent_sib_sti_inst*

Specify pre-DFT DRC rules

set_dft_specification_requirements -logic_test on

check_design_rules

dict set::auxiliary_data_dict <auxiliary input/output=>pin/select-line>

dict set ::auxiliary_data_dict SYS_MODE[1] auxiliary_input_pin rx_core_u0/u_pin_mux/scan_enable dict set ::auxiliary_data_dict SYS_MODE[1] auxiliary_input_enable_pin digital_pads_u0/pc_scan_sel

dict set ::auxiliary_data_dict GPIO[5] auxiliary_input_pin rx_core_u0/u_pin_mux/edt_update dict set ::auxiliary_data_dict GPIO[5] auxiliary_input_enable_pin digital_pads_u0/pc_scan_sel

dict set ::auxiliary_data_dict GPIO[15] auxiliary_input_pin rx_core_u0/u_pin_mux/scan_in[0] dict set ::auxiliary_data_dict GPIO[15] auxiliary_input_enable_pin digital_pads_u0/pc_scan_sel

dict set ::auxiliary_data_dict GPIO[14] auxiliary_input_pin rx_core_u0/u_pin_mux/scan_in[1] dict set ::auxiliary_data_dict GPIO[14] auxiliary_input_enable_pin digital_pads_u0/pc_scan_sel

dict set ::auxiliary_data_dict GPIO[13] auxiliary_output_pin rx_core_u0/u_pin_mux/scan_out[0] dict set ::auxiliary_data_dict GPIO[13] auxiliary_output_enable_pin digital_pads_u0/pc_scan_sel

dict set ::auxiliary_data_dict GPIO[12] auxiliary_output_pin rx_core_u0/u_pin_mux/scan_out[1] dict set ::auxiliary_data_dict GPIO[12] auxiliary_output_enable_pin digital_pads_u0/pc_scan_sel

report_dft_control_points

Create and report a DFT Specification

Empty DFT specification for OCC and EDT are created here and populated later in this dofile

set spec [create_dft_specification -sri_sib_list {occ edt} ] report_config_data $spec

read_config_data -in $spec -from_string { OCC { ijtag_host_interface : Sib(occ); } }

Below is a generic way to populate the OCC. The clock list is design-specific and needs to be updated for the design

The scan_enable and shift_capture_clock signals are automatically connected to OCC instances

Modify the below list for your specific design requirements

set id_clk_list [list
clk1 /rx_core_u0/clk_pll
] foreach {id clk} $id_clk_list { set occ [add_config_element OCC/Controller($id) -in $spec] set_config_value clock_intercept_node -in $occ $clk } report_config_data $spec

The edt_clock and edt_update signals are automatically connected to EDT instances

The EDT controller is built with Bypass

Modify the below specification for your specific design requirements

The propery connect_bscan_segments_to_lsb_chains defaults to auto and connects the divided boundary scan segments from the previous pass to EDT

read_config_data -in $spec -from_string { EDT { ijtag_host_interface : Sib(edt); Controller (c1) { longest_chain_range : 470, 475; scan_chain_count : 107; input_channel_count : 2; output_channel_count : 2; Connections +{ EdtChannelsIn(1) { } EdtChannelsIn(2) { } EdtChannelsOut(1) { } EdtChannelsOut(2) { } } } } }

}

The EDT Channel In/Out pins which are equipped with auxiliary ports from the previous dict declaration need to be specified

set_config_value port_pin_name -in $spec/EDT/Controller(c1)/Connections/EdtChannelsIn(1) [get_single_name [get_auxiliary_pins GPIO[15] -direction input]] set_config_value port_pin_name -in $spec/EDT/Controller(c1)/Connections/EdtChannelsIn(2) [get_single_name [get_auxiliary_pins GPIO[14] -direction input]] set_config_value port_pin_name -in $spec/EDT/Controller(c1)/Connections/EdtChannelsOut(1) [get_single_name [get_auxiliary_pins GPIO[13] -direction output]] set_config_value port_pin_name -in $spec/EDT/Controller(c1)/Connections/EdtChannelsOut(2) [get_single_name [get_auxiliary_pins GPIO[12] -direction output]]

report_config_data $spec

Generate and insert the hardware

process_dft_specification

Extract IJAG network and create ICL file for the design

extract_icl

Creates a Synthesis script of ALL the RTL (orignial and newly-created) to be used in DC Shell in next Step

write_design_import_script -use_relative_path_to . for_dc_synthesis_edt_occ.tcl -replace

Generate patterns to verify the inserted DFT logic

set spec1 [ create_pattern_specification -replace]

process_pattern_specification

Point to the libraries and run the simulation

set_simulation_library_sources -v ../../DATA/libs/tcbn40lpbwp.v -v ../../DATA/libs/tphn40lpgv2od3_sl.v

report_simulation_library_source

run_testbench_simulations -generate_scripts_only