/******************************************************************************/ 
/*                                                                            */ 
/* Copyright (c) 1999 Sun Microsystems, Inc. All rights reserved.             */ 
/*                                                                            */ 
/* The contents of this file are subject to the current version of the Sun    */ 
/* Community Source License, microSPARCII ("the License"). You may not use    */ 
/* this file except in compliance with the License.  You may obtain a copy    */ 
/* of the License by searching for "Sun Community Source License" on the      */ 
/* World Wide Web at http://www.sun.com. See the License for the rights,      */ 
/* obligations, and limitations governing use of the contents of this file.   */ 
/*                                                                            */ 
/* Sun Microsystems, Inc. has intellectual property rights relating to the    */ 
/* technology embodied in these files. In particular, and without limitation, */ 
/* these intellectual property rights may include one or more U.S. patents,   */ 
/* foreign patents, or pending applications.                                  */ 
/*                                                                            */ 
/* Sun, Sun Microsystems, the Sun logo, all Sun-based trademarks and logos,   */ 
/* Solaris, Java and all Java-based trademarks and logos are trademarks or    */ 
/* registered trademarks of Sun Microsystems, Inc. in the United States and   */ 
/* other countries. microSPARC is a trademark or registered trademark of      */ 
/* SPARC International, Inc. All SPARC trademarks are used under license and  */ 
/* are trademarks or registered trademarks of SPARC International, Inc. in    */ 
/* the United States and other countries. Products bearing SPARC trademarks   */ 
/* are based upon an architecture developed by Sun Microsystems, Inc.         */ 
/*                                                                            */ 
/******************************************************************************/ 
// *************************************************************************
// @(#)rl_dpc.v	1.23 10/15/93
// rl_dpc.v
//
//	Description:
//		The Data Path Controller block of memory subsystem in SingleSPARC.
//		Refer to SingleSPARC Hardware Spec, section 2.7.4 for block diagram
//		and more information.
//
//
//	Dependencies:
//		mem_cells.vpp defines.v dpc_bi_tri.v dpc_core.v
//		dpc_logic.v dpc_cont.v dpc_par.v dpc_dpath.v
//
//
//
// *************************************************************************
// *************************************************************************
// This is the the DPC block. It has all the inter-block connections,
//	the 3-state buffers and bi-dir pads.
![[Up: rl_memif_major dpc]](v2html-up.gif) module rl_dpc
module rl_dpc (dp_perr, b_memdata_out, b_mempar_out,
	   			 mc_mdata0, dp_ben,
				 bd_mux_out1, bd_mux_out0, mc_mdata_en0, 
				 b_memdata_in, b_mempar_in,
				 mc_dpct, mc_curr_st, mc_odat_hld,
				 mm_oddmpar, mm_parity_en,
				 pcic_afxm_db_oen,
				 ss_reset, ss_scan_mode, ss_clock,
				 mm_issue_req, mm_mreq,
				 mc_cfb_data, mm_misc2cf, mm_2nd_wd, mc_mbsy,
				 mm_fb_req,
				 quad_sel, quad_sel_dwd, out_hld_3, out_hld_2,
				 am_gnt_l, valid_l, am_read, sync_t0
				 );
	output	[1:0]	dp_perr
	(dp_perr, b_memdata_out, b_mempar_out,
	   			 mc_mdata0, dp_ben,
				 bd_mux_out1, bd_mux_out0, mc_mdata_en0, 
				 b_memdata_in, b_mempar_in,
				 mc_dpct, mc_curr_st, mc_odat_hld,
				 mm_oddmpar, mm_parity_en,
				 pcic_afxm_db_oen,
				 ss_reset, ss_scan_mode, ss_clock,
				 mm_issue_req, mm_mreq,
				 mc_cfb_data, mm_misc2cf, mm_2nd_wd, mc_mbsy,
				 mm_fb_req,
				 quad_sel, quad_sel_dwd, out_hld_3, out_hld_2,
				 am_gnt_l, valid_l, am_read, sync_t0
				 );
	output	[1:0]	dp_perr ;	  	// Parity-Error condition bits.
	output	[63:0]	b_memdata_out
;	  	// Parity-Error condition bits.
	output	[63:0]	b_memdata_out ;	// Data out to the Data Pads.
	output	[1:0]	b_mempar_out
 ;	// Data out to the Data Pads.
	output	[1:0]	b_mempar_out ;	// Parity out to the Parity pads.
	output	[31:0]	mc_mdata0
;	// Parity out to the Parity pads.
	output	[31:0]	mc_mdata0 ;	  	// Write Lo-word to internal dat_bus.
//	output	[31:0]	mc_mdata1;	  	// Write Hi-word to internal dat_bus.
//	output			dp_buf0_en;		// Internal Tri-enable control to MMU.
	output			dp_ben
;	  	// Write Lo-word to internal dat_bus.
//	output	[31:0]	mc_mdata1;	  	// Write Hi-word to internal dat_bus.
//	output			dp_buf0_en;		// Internal Tri-enable control to MMU.
	output			dp_ben ;			// External Tri-enable control to IO-pad.
	output	[63:0]		mc_cfb_data
;			// External Tri-enable control to IO-pad.
	output	[63:0]		mc_cfb_data ;
        output  quad_sel
;
        output  quad_sel ;
        output  quad_sel_dwd
;
        output  quad_sel_dwd ;
        output  out_hld_3
;
        output  out_hld_3 ;
        output  out_hld_2
;
        output  out_hld_2 ;
	input	[31:0]	bd_mux_out1
;
	input	[31:0]	bd_mux_out1 ;	// In from internal data bus.
	input	[31:0]	bd_mux_out0
;	// In from internal data bus.
	input	[31:0]	bd_mux_out0 ;	// In from internal data bus.
	input			mc_mdata_en0
;	// In from internal data bus.
	input			mc_mdata_en0 ;	// Tri_enable, Wr Lo_word, from MMU.
//	input			mc_mdata_en1;	// Tri_enable, Wr Hi_word, from MMU.
	input	[63:0]	b_memdata_in
;	// Tri_enable, Wr Lo_word, from MMU.
//	input			mc_mdata_en1;	// Tri_enable, Wr Hi_word, from MMU.
	input	[63:0]	b_memdata_in ;	// Data in from Data Pads.
	input	[1:0]	b_mempar_in
 ;	// Data in from Data Pads.
	input	[1:0]	b_mempar_in ;	// Parity in from the Parity pads.
								  	//	bd_mdat bus, when this is asserted.
	input	[8:0]	mc_curr_st
;	// Parity in from the Parity pads.
								  	//	bd_mdat bus, when this is asserted.
	input	[8:0]	mc_curr_st ;	  	// MCB current state.
	input			mc_odat_hld
;	  	// MCB current state.
	input			mc_odat_hld ;  	// MCB in Idle when 0.
	input	[5:0]	mc_dpct
;  	// MCB in Idle when 0.
	input	[5:0]	mc_dpct ;	  	// DPC control bus from MCB.
	input			mm_oddmpar
;	  	// DPC control bus from MCB.
	input			mm_oddmpar ;	  	// Selects odd/even parity.
	input			mm_parity_en
;	  	// Selects odd/even parity.
	input			mm_parity_en ;	  	// Selects parity enable.
        input  pcic_afxm_db_oen
;	  	// Selects parity enable.
        input  pcic_afxm_db_oen ;                //IIep 2.0: dma_rd par c
    input           ss_reset
;                //IIep 2.0: dma_rd par c
    input           ss_reset ;		// System Reset.
	input			ss_scan_mode
;		// System Reset.
	input			ss_scan_mode ;
	input			ss_clock
;
	input			ss_clock ;		// Free running system clock.
//        input       mm_wbstben0;        // strobe for 0th word of store double.
//        input       mm_wbstben1;        // strobe for 1st word of store double.
        input       mm_issue_req
;		// Free running system clock.
//        input       mm_wbstben0;        // strobe for 0th word of store double.
//        input       mm_wbstben1;        // strobe for 1st word of store double.
        input       mm_issue_req ;        // 
        input   [3:0]   mm_mreq
;        // 
        input   [3:0]   mm_mreq ;        // 
	input	mm_misc2cf
;        // 
	input	mm_misc2cf ;
	input	mm_2nd_wd
;
	input	mm_2nd_wd ;
	input	mc_mbsy
;
	input	mc_mbsy ;
	input	mm_fb_req
;
	input	mm_fb_req ;
 	input   am_gnt_l
;
 	input   am_gnt_l ;           // IIe signal : DRAM bus granted to Falcon.
        input   valid_l
;           // IIe signal : DRAM bus granted to Falcon.
        input   valid_l ;                // IIe signal : DMA r/w data valid
        input   am_read
;                // IIe signal : DMA r/w data valid
        input   am_read ;                // IIe signal : DMA r/~w direction
        input       sync_t0
;                // IIe signal : DMA r/~w direction
        input       sync_t0 ;    	//IIep 2.0: for dma read par chk
	wire	[63:0]	rid
;    	//IIep 2.0: for dma read par chk
	wire	[63:0]	rid ;		  	// Data in to internal bd_mdata bus.
	wire	[31:0]  mdata0
 ;		  	// Data in to internal bd_mdata bus.
	wire	[31:0]  mdata0 ;  // Lo & Hi uni-dir Wr data bus
//	wire	[31:0]  mdata1;  // Lo & Hi uni-dir Wr data bus
									//  from rl_dpc_core.
//	wire			mdata_en1r;		// reg'd Tri_enable to tri32 Hi_wrd
	wire			mdata_en0
;  // Lo & Hi uni-dir Wr data bus
//	wire	[31:0]  mdata1;  // Lo & Hi uni-dir Wr data bus
									//  from rl_dpc_core.
//	wire			mdata_en1r;		// reg'd Tri_enable to tri32 Hi_wrd
	wire			mdata_en0 ;		// scan_en gated Tri_enable to tri32 Lo_wrd
//	wire			mdata_en1;		// scan_en gated Tri_enable to tri32 Hi_wrd
	wire			fix_1032
;		// scan_en gated Tri_enable to tri32 Lo_wrd
//	wire			mdata_en1;		// scan_en gated Tri_enable to tri32 Hi_wrd
	wire			fix_1032 ;		// see comments below
	wire			Gnd
;		// see comments below
	wire			Gnd = 1'b0 ;
	wire 			enable_qlfr
 = 1'b0 ;
	wire 			enable_qlfr = ~(ss_reset | ss_scan_mode);
/* remove 1 mc_mdata_en,
	GReg1	hi_wrd_en (mdata_en1r, ((mc_mdata_en1)&(enable_qlfr)), 
					   ss_clock, Gnd);
	// Per fix for bug#1032, the "mdata_en1" is now gated with
	// a new signal "fix_1032" that is forced to "1" while ss_reset=1
	// or ss_scan_mode=1
	assign fix_1032 = (ss_reset ? ss_reset : ss_scan_mode );
	assign	mdata_en1 = (mdata_en1r & ~fix_1032);
	
	GReg1	lo_wrd_en (mdata_en0r, ((mc_mdata_en0)&(enable_qlfr)), 
					   ss_clock, Gnd);
	assign	mdata_en0 = (mdata_en0r & ~ss_scan_mode);
*/
// enable needs to be 1 cycle earlier than data using fj tristate cell.
	assign fix_1032 = (ss_reset ? ss_reset : ss_scan_mode );
	wire	mdata_en0_p
 = ~(ss_reset | ss_scan_mode);
/* remove 1 mc_mdata_en,
	GReg1	hi_wrd_en (mdata_en1r, ((mc_mdata_en1)&(enable_qlfr)), 
					   ss_clock, Gnd);
	// Per fix for bug#1032, the "mdata_en1" is now gated with
	// a new signal "fix_1032" that is forced to "1" while ss_reset=1
	// or ss_scan_mode=1
	assign fix_1032 = (ss_reset ? ss_reset : ss_scan_mode );
	assign	mdata_en1 = (mdata_en1r & ~fix_1032);
	
	GReg1	lo_wrd_en (mdata_en0r, ((mc_mdata_en0)&(enable_qlfr)), 
					   ss_clock, Gnd);
	assign	mdata_en0 = (mdata_en0r & ~ss_scan_mode);
*/
// enable needs to be 1 cycle earlier than data using fj tristate cell.
	assign fix_1032 = (ss_reset ? ss_reset : ss_scan_mode );
	wire	mdata_en0_p = ((mc_mdata_en0)&(enable_qlfr)&(~fix_1032));
/*
        GReg1   lo_wrd_en (mdata_en0r, ((mc_mdata_en0)&(enable_qlfr)),
                                           ss_clock, Gnd);
        assign  mdata_en0 = (mdata_en0r & ~fix_1032);
*/
	rl_dpc_core	   dpc_core( dp_perr, mdata0 , 
	   				b_memdata_out, b_mempar_out, dp_ben,
	   				bd_mux_out1, bd_mux_out0, b_memdata_in, b_mempar_in,
					mc_dpct, mc_curr_st, mc_odat_hld,
					mm_oddmpar, mm_parity_en, 
					pcic_afxm_db_oen,
					ss_scan_mode, ss_clock,
					mm_issue_req, mm_mreq,
					mc_cfb_data, mm_misc2cf, mm_2nd_wd, 
					mc_mbsy, mm_fb_req,
					quad_sel, quad_sel_dwd, out_hld_3, out_hld_2,
					am_gnt_l, valid_l, am_read, 
					sync_t0
					);
// Added spare cells 
        // spares  rl_dpc_spares ();			commented out 
//	tri32	hi_wrd_wr(mc_mdata1, mdata1, mdata_en1);
//use fj tristate cell
//	tri32	lo_wrd_wr(mc_mdata0, mdata0, mdata_en0);
	tri_regen_32	lo_wrd_wr(mc_mdata0, mdata0, ss_clock, mdata_en0_p, ss_reset);
	
endmodule
 = ((mc_mdata_en0)&(enable_qlfr)&(~fix_1032));
/*
        GReg1   lo_wrd_en (mdata_en0r, ((mc_mdata_en0)&(enable_qlfr)),
                                           ss_clock, Gnd);
        assign  mdata_en0 = (mdata_en0r & ~fix_1032);
*/
	rl_dpc_core	   dpc_core( dp_perr, mdata0 , 
	   				b_memdata_out, b_mempar_out, dp_ben,
	   				bd_mux_out1, bd_mux_out0, b_memdata_in, b_mempar_in,
					mc_dpct, mc_curr_st, mc_odat_hld,
					mm_oddmpar, mm_parity_en, 
					pcic_afxm_db_oen,
					ss_scan_mode, ss_clock,
					mm_issue_req, mm_mreq,
					mc_cfb_data, mm_misc2cf, mm_2nd_wd, 
					mc_mbsy, mm_fb_req,
					quad_sel, quad_sel_dwd, out_hld_3, out_hld_2,
					am_gnt_l, valid_l, am_read, 
					sync_t0
					);
// Added spare cells 
        // spares  rl_dpc_spares ();			commented out 
//	tri32	hi_wrd_wr(mc_mdata1, mdata1, mdata_en1);
//use fj tristate cell
//	tri32	lo_wrd_wr(mc_mdata0, mdata0, mdata_en0);
	tri_regen_32	lo_wrd_wr(mc_mdata0, mdata0, ss_clock, mdata_en0_p, ss_reset);
	
endmodule
 | This page: | Created: | Thu Aug 19 12:03:11 1999 | 
   | From: | ../../../sparc_v8/ssparc/memif/rtl/rl_dpc.v |