blob: dbe0bfda782bce4db695bafecf440cd9d698b58c [file] [log] [blame] [edit]
// ========== 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