Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • RTL Foundations36
  • Combinational Design25
  • Sequential Design27
  • FSM & Control27
  • Timing & Clocking39
  • Reset & CDC34
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
    • Low-Power RTL Hub
    • DFT and Scan Hub
      • Why scan exists
      • The scan chain at RTL abstraction
      • Test-mode integration checklist
      • Controllability and observability in practice
      • Fault Coverage by Hand
    • Physical Awareness Hub
    • Waveform Debug Hub
    • STA and ECO Hub
    • RTL-to-Implementation Closure
    • DFT-Ready RTL
    • Capstone: Resilient Streaming Peripheral
    • Principal Design Review
    • Senior RTL Interview Questions & Model Answers
  • Glossary and Notation
Loading lesson

‹DFT and Scan Hub
  1. Topics
  2. RTL Design
  3. Senior & Interview
  4. DFT and Scan Hub
  5. Test-mode integration checklist

Part 9 · Senior · Senior

Test-mode integration checklist

Four integration checks that keep scan working: clocks, resets, enables, and unknown sources.

On this page

    Why this matters

    A gated clock that the tester cannot override stops its chain, and one X source can turn the whole capture response unknown. Low fault coverage after scan insertion usually comes from these, not from the chain.

    After this lesson you can: add a test-mode bypass to a clock enable, handle X sources and resets for test, and order the checks when ATPG coverage is low.

    Clocks stay alive in test mode

    A gated clock that the tester cannot override stops its chain. The enable path needs a test-mode bypass so shifting never depends on functional activity.

    The listing below is the enable half of that contract. It ORs the functional enable with test mode, which keeps the clock path alive while shifting.

    test_clk_override.sv
    1
    2
    3
    4
    5
    6
    7
    8
    `timescale 1ns/1ps
    module test_clk_override (
      input  logic func_en_i,
      input  logic test_mode_i,
      output logic eff_en_o
    );
      assign eff_en_o = func_en_i | test_mode_i;
    endmodule

    Resets and unknown sources

    A chain can start unknown: shifting a complete known vector flushes its old contents after the chain length in edges. Capture must then start from the intended loaded state, with clocks, reset controls and any X sources handled by the test protocol.

    Check

    Rule

    Failure without it

    scan_mode and scan_en reach every scan flop

    Propagate both signals explicitly to the inserted logic

    Unstitched flops hold functional data mid-vector

    No un-overridable gated clocks

    Every gate opens in test mode, as above

    Dead chains wherever the enable is low

    Asynchronous resets reviewed

    Keep resets inactive during ordinary shift and capture; apply reset tests as separate defined operations

    An asserted reset prevents loading; a mid-shift reset destroys the vector

    X sources controlled or masked

    RAM outputs, analog flags, and tied-off modes drive known values

    Unknowns spread and invalidate the whole response

    Common pitfall

    Masking hides the X; it does not remove the source. Record every mask as a coverage hole so the team knows which logic went untested.

    Interview

    Likely question: “ATPG reports low fault coverage after scan insertion, where do you look”. Answer in order: unconstrained inputs, masked X sources, un-overridable clocks, then the chain itself.

    Check yourself The functional enable is low and test mode is high. What is the effective enable, and which line decides it?

    High. The OR in the listing decides it: test mode holds the path open regardless of the functional enable.

    Check yourself A RAM output fans into scanned logic and reads X in test mode. What breaks, and what is the fix?

    Capture becomes unknown wherever the X spreads, so the response mismatches. Control the RAM (bypass or init) or mask the path in test mode.

    Testbench

    The enable override plus an X-source mask, checked over every combination of their inputs.

    test_clk_override.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    `timescale 1ns/1ps
    module test_clk_override (
      input  logic func_en_i,
      input  logic test_mode_i,
      output logic eff_en_o
    );
      assign eff_en_o = func_en_i | test_mode_i;
    endmodule
    
    module test_x_mask (
      input  logic flag_i,
      input  logic test_mode_i,
      output logic flag_o
    );
      assign flag_o = test_mode_i ? 1'b0 : flag_i;
    endmodule
    

    Remember

    • OR the functional enable with test mode so shifting never depends on functional activity.

    • Masking hides an X but does not remove its source; record every mask as a coverage hole.

    • Debug low coverage in order: unconstrained inputs, masked X sources, un-overridable clocks, then the chain.

    Keep going

    • Code lab: DFT scan enable

    • Interview: run a mock interview on this topic

    Related topics

    • Controllability and observability in practice

    • Fault coverage by hand

    Previous

    280 / 350

    Next: Controllability and observability in practice

    Up next

    Up nextControllability and observability in practice

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Why scan exists
    • Fault Coverage by Hand