In Post-silicon testing, we have a functional validation testing where C tests are developed to verify the functionality of the SoC, through a JTAG interface connected to the PCB TAP and controlled through some software like Code Composer Studio.
Also, there is structural testing where different types of fault models are tested like stuck-at, bridging, gate delay, path delay etc through Built in Self Test logic and some through ATE.
My question is, why two levels of testing are required? If a module deep inside the core has some fault, isn't functional validation sufficient to detect the error?