// ========== Copyright Header Begin ========================================== // // OpenSPARC T1 Processor File: test_stub_scan.v // Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES. // // The above named program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public // License version 2 as published by the Free Software Foundation. // // The above named program is distributed in the hope that it will be // useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this work; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. // // ========== Copyright Header End ============================================ // ____________________________________________________________________________ // // test_stub_bist - Test Stub with Scan Support // ____________________________________________________________________________ // // Description: DBB interface for test signal generation // ____________________________________________________________________________ module test_stub_scan (/*AUTOARG*/ // Outputs mux_drive_disable, mem_write_disable, sehold, se, testmode_l, mem_bypass, so_0, so_1, so_2, // Inputs ctu_tst_pre_grst_l, arst_l, global_shift_enable, ctu_tst_scan_disable, ctu_tst_scanmode, ctu_tst_macrotest, ctu_tst_short_chain, long_chain_so_0, short_chain_so_0, long_chain_so_1, short_chain_so_1, long_chain_so_2, short_chain_so_2 ); input ctu_tst_pre_grst_l; input arst_l; // no longer used input global_shift_enable; input ctu_tst_scan_disable; // redefined as pin_based_scan input ctu_tst_scanmode; input ctu_tst_macrotest; input ctu_tst_short_chain; input long_chain_so_0; input short_chain_so_0; input long_chain_so_1; input short_chain_so_1; input long_chain_so_2; input short_chain_so_2; output mux_drive_disable; output mem_write_disable; output sehold; output se; output testmode_l; output mem_bypass; output so_0; output so_1; output so_2; wire pin_based_scan; wire short_chain_en; wire short_chain_select; // INTERNAL CLUSTER CONNECTIONS // // Scan Chain Hookup // ================= // // Scan chains have two configurations: long and short. // The short chain is typically the first tenth of the // long chain. The short chain should contain memory // collar flops for deep arrays. The CTU determines // which configuration is selected. Up to three chains // are supported. // // The scanout connections from the long and short // chains connect to the following inputs: // // long_chain_so_0, short_chain_so_0 (mandatory) // long_chain_so_1, short_chain_so_1 (optional) // long_chain_so_2, short_chain_so_2 (optional) // // The test stub outputs should connect directly to the // scanout port(s) of the cluster: // // so_0 (mandatory), so_1 (optional), so_2 (optional) // // // Static Output Signals // ===================== // // testmode_l // // Local testmode control for overriding gated // clocks, asynchronous resets, etc. Asserted // for all shift-based test modes. // // mem_bypass // // Memory bypass control for arrays without output // flops. Allows testing of shadow logic. Asserted // for scan test; de-asserted for macrotest. // // // Dynamic Output Signals // ====================== // // sehold // // The sehold signal needs to be set for macrotest // to allow holding flops in the array collars // to retain their shifted data during capture. // Inverted version of scan enable during macrotest. // // mux_drive_disable (for mux/long chain protection) // // Activate one-hot mux protection circuitry during // scan shift and reset. Formerly known as rst_tri_en. // Also used by long chain memories with embedded // control. // // mem_write_disable (for short chain protection) // // Protects contents of short chain memories during // shift and POR. // // se assign mux_drive_disable = ~ctu_tst_pre_grst_l | short_chain_select | se; assign mem_write_disable = ~ctu_tst_pre_grst_l | se; assign sehold = ctu_tst_macrotest & ~se; assign se = global_shift_enable; assign testmode_l = ~ctu_tst_scanmode; assign mem_bypass = ~ctu_tst_macrotest & ~testmode_l; assign pin_based_scan = ctu_tst_scan_disable; assign short_chain_en = ~(pin_based_scan & se); assign short_chain_select = ctu_tst_short_chain & ~testmode_l & short_chain_en; assign so_0 = short_chain_select ? short_chain_so_0 : long_chain_so_0; assign so_1 = short_chain_select ? short_chain_so_1 : long_chain_so_1; assign so_2 = short_chain_select ? short_chain_so_2 : long_chain_so_2; endmodule // test_stub_scan