Is it possible for Tessent MemoryBist to add necessary logic to pass TCK as BIST_CLK for the memory functional clock?
It is possible to use TCK instead of bist_clk for the MemoryBist functional clock with the TCK injection feature. To enable tck injection, specify the following:
set_dft_specification_requirements -memory_test on -tck_injection on
set_attribute_value tck -name function -value tck
set_attribute_value tdi -name function -value tdi
set_attribute_value tms -name function -value tms
set_attribute_value trst -name function -value trst
set_attribute_value tdo -name function -value tdo
You will also need to add the "tck_select" dft signal
add_dft_signals tck_select
This is documented in the Tessent Shel Reference manual on "set_dft_specification_requirements". The default is "off".
-tck_injection on | off | internal_sources_only
An optional switch and literal pair that specifies whether TCK muxing is to be inserted in the current level. When enabled, it identifies clock locations where TCK should be injected to drive child block ports and memories that have use_in_memory_bist_dft_specification set to “on”, or “auto” that resolve to “on” in analysis mode. These locations are added to the MemoryBist wrapper of the DftSpecification when the create_dft_specification command is run. Specifying this option to a value other than off requires the ‑memory_bist option to be set to auto.
When set to off, the pre-DFT DRC rules DFT_C11, DFT_C12 and DFT_C13 are not run. This value is typically used if you intend to insert OCC in a later insertion pass, or if you do not intend to run memory BIST TCK mode.
When set to on, the pre-DFT DRC rules DFT_C11, DFT_C12 and DFT_C13 are run and identify all a
When enabled, it inserts the required muxing to pass TCK to the memory clk, as shown below:
The TCKInjectionPoints wrapper defines the locations where muxes are inserted to inject TCK. You can tell exactly where to place the mux using the DFTSpecification “node” option in TCKInjectionPoints wrapper below:
DftSpecification(module_name,id) {
MemoryBist {
TCKInjectionPoints {
ClockMux (mux_id) {
leaf_instance_name : instance_name ;
node : node_name ;
}
}
}
Script Example:
set_config_value $dftSpec/MemoryBist/TCKInjectionPoints/ClockMux(myclk)/node myinst/DFT_clk_buf/Y
The TCK that is injected is the one used by the specified MemoryBist/ijtag_host_interface.
These muxes are controlled by the DFT signal “tck_select”, which is asserted as needed during patterns steps by setting the Patterns tck_clock_only property to “on”. (It’s off by default)
PatternsSpecification(design_name,design_id,pattern_id) {
Patterns(patterns_name) {
tck_clock_only : on | off ;
tck_off_state : 0 | 1 ;
Script Example:
set_config_value [get_config_elements tck_clock_only -hier -in_wrapper $spec] on
PatternsSpecification Example:
Patterns(MemoryBist_P1) {
tck_clock_only : on;
DftControlSettings {
core_inst2.all_test : 1;
core_inst2.nonscan_test : 1;
all_test : 1;
nonscan_test : 1;
core_inst2.sel_clkb : 1;
}
ClockPeriods {
clkb : 10.0ns;
clka : 3.0ns;
}
Note: The Enhanced Memory Access interface controller does not impose a specific tck to bist_clk ratio. So, when you inject TCK as BIST_CLK , it does not violate the TCK to BIST_CLK ratio of 4X rule required for Asynchronous interface module in Controller logic.
Refer to the KB article below for details on EMA.