blob: 002de0dcaea4a637b226711cc520e331ce2276cb [file] [log] [blame] [edit]
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T1 Processor File: pad_ddr0.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 ============================================
module pad_ddr0(bscan_mode_ctl_in ,spare_ddr0_paddata ,ddr_si ,
ddr0_dll_bypass_l ,ddr0_bypass_data ,spare_ddr0_pin ,clkobs ,
spare_ddr0_pindata ,ctu_io_clkobs ,tck ,spare_ddr0_pad ,
ddr_testmode_l ,ddr_se ,ps_select ,ddr_so ,pad_ddr0_sscan_out ,afo
,bypass_enable ,bscan_hiz_l_out ,bscan_shift_dr_out ,ps_select_out
,bscan_update_dr_out ,vdd18 ,test_mode ,serial_in ,
bypass_enable_out ,bscan_clock_dr_out ,serial_out ,afi ,
bscan_mode_ctl_out ,bscan_hiz_l_in ,dram0_dq ,dram0_dqs ,dram0_cb ,
dram0_addr ,dram0_ba ,dram0_cs_l ,dram0_we_l ,dram0_cas_l ,
dram0_ras_l ,dram0_cke ,dram0_ck_n ,dram0_ck_p ,
ctu_ddr0_iodll_rst_l ,dram_adbginit_l ,pad_ddr0_bso ,ddr0_ddr1_cbd
,dram_arst_l ,dram_gdbginit_l ,bscan_clock_dr_in ,
ctu_ddr0_dll_delayctr ,pad_ddr0_bsi ,pad_ddr0_sscan_in ,
ctu_io_sscan_se ,ctu_io_sscan_update ,ctu_global_snap ,
dram01_p_ref_res ,ddr0_ddr1_cbu ,bscan_shift_dr_in
,dram01_n_ref_res ,ddr0_ctu_dll_overflow ,bscan_update_dr_in ,
dram0_io_ptr_clk_inv ,dram_gclk ,dram0_io_write_en_l ,
dram0_io_ras_l ,dram0_io_cke ,io_dram0_data_in ,dram0_io_drive_data
,dram0_io_addr ,io_dram0_data_valid ,dram0_io_pad_enable ,
io_dram0_ecc_in ,dram0_io_data_out ,dram0_io_drive_enable ,
dram0_io_channel_disabled ,dram_grst_l ,clk_ddr0_cken ,
dram0_io_cs_l ,dram0_io_cas_l ,dram0_io_clk_enable ,dram0_io_bank ,
dram0_io_pad_clk_inv ,ddr0_ctu_dll_lock, ddr0_lpf_code );
output [4:0] ddr0_lpf_code ;
output [143:0] serial_out ;
output [143:0] afi ;
output [14:0] dram0_addr ;
output [2:0] dram0_ba ;
output [3:0] dram0_cs_l ;
output [3:0] dram0_ck_n ;
output [3:0] dram0_ck_p ;
output [8:1] ddr0_ddr1_cbd ;
output [8:1] ddr0_ddr1_cbu ;
output [255:0] io_dram0_data_in ;
output [31:0] io_dram0_ecc_in ;
input [6:0] spare_ddr0_paddata ;
input [4:0] ddr0_bypass_data ;
input [2:2] spare_ddr0_pindata ;
input [1:0] ctu_io_clkobs ;
input [143:0] afo ;
input [143:0] serial_in ;
input [2:0] ctu_ddr0_dll_delayctr ;
input [4:0] dram0_io_ptr_clk_inv ;
input [1:0] dram_gclk ;
input [14:0] dram0_io_addr ;
input [287:0] dram0_io_data_out ;
input [3:0] dram0_io_cs_l ;
input [2:0] dram0_io_bank ;
inout [2:2] spare_ddr0_pin ;
inout [1:0] clkobs ;
inout [6:0] spare_ddr0_pad ;
inout [127:0] dram0_dq ;
inout [35:0] dram0_dqs ;
inout [15:0] dram0_cb ;
output ddr_so ;
output pad_ddr0_sscan_out ;
output bscan_hiz_l_out ;
output bscan_shift_dr_out ;
output ps_select_out ;
output bscan_update_dr_out ;
output bypass_enable_out ;
output bscan_clock_dr_out ;
output bscan_mode_ctl_out ;
output dram0_we_l ;
output dram0_cas_l ;
output dram0_ras_l ;
output dram0_cke ;
output pad_ddr0_bso ;
output ddr0_ctu_dll_overflow ;
output io_dram0_data_valid ;
output ddr0_ctu_dll_lock ;
input bscan_mode_ctl_in ;
input ddr_si ;
input ddr0_dll_bypass_l ;
input tck ;
input ddr_testmode_l ;
input ddr_se ;
input ps_select ;
input bypass_enable ;
input vdd18 ;
input test_mode ;
input bscan_hiz_l_in ;
input ctu_ddr0_iodll_rst_l ;
input dram_adbginit_l ;
input dram_arst_l ;
input dram_gdbginit_l ;
input bscan_clock_dr_in ;
input pad_ddr0_bsi ;
input pad_ddr0_sscan_in ;
input ctu_io_sscan_se ;
input ctu_io_sscan_update ;
input ctu_global_snap ;
input dram01_p_ref_res ;
input bscan_shift_dr_in ;
input dram01_n_ref_res ;
input bscan_update_dr_in ;
input dram0_io_write_en_l ;
input dram0_io_ras_l ;
input dram0_io_cke ;
input dram0_io_drive_data ;
input dram0_io_pad_enable ;
input dram0_io_drive_enable ;
input dram0_io_channel_disabled ;
input dram_grst_l ;
input clk_ddr0_cken ;
input dram0_io_cas_l ;
input dram0_io_clk_enable ;
input dram0_io_pad_clk_inv ;
supply1 vdd ;
supply0 vss ;
wire [7:0] net223 ;
wire [7:0] net243 ;
wire net191 ;
wire clk_ddr0_cken_buf ;
wire strobe ;
wire rst_l ;
wire sscan0 ;
wire net224 ;
wire scan0 ;
wire scan1 ;
wire scan2 ;
wire scan3 ;
wire net244 ;
wire ddr_se_buf ;
wire rclk ;
wire arst2_l ;
bw_clk_cl_ddr_ddr pad_ddr0_header (
.gclk ({dram_gclk } ),
.ddr_rclk (rclk ),
.so (ddr_so_pre_latch ),
.si (scan3 ),
.gdbginit_l (dram_gdbginit_l ),
.grst_l (dram_grst_l ),
.cluster_grst_l (rst_l ),
.dbginit_l (net191 ),
.rclk (rclk ),
.se (ddr_se_buf ),
.adbginit_l (dram_adbginit_l ),
.arst_l (dram_arst_l ),
.arst2_l (arst2_l ),
.cluster_cken (clk_ddr0_cken_buf ) );
ddr_ch ddr0_ddr_ch (
.arst_l_out (arst2_l ),
.afo ({afo } ),
.serial_in ({serial_in } ),
.afi ({afi } ),
.serial_out ({serial_out } ),
.dram_io_data_out ({dram0_io_data_out } ),
.spare_ddr_pin ({spare_ddr0_pin[2] ,spare_ddr0_pad[6:0] ,
clkobs[1:0] } ),
.spare_ddr_data ({spare_ddr0_pindata[2] ,spare_ddr0_paddata[6:0] ,
ctu_io_clkobs[1:0] } ),
.dram_io_ptr_clk_inv ({dram0_io_ptr_clk_inv } ),
.io_dram_data_in ({io_dram0_data_in } ),
.io_dram_ecc_in ({io_dram0_ecc_in } ),
.dram_io_addr ({dram0_io_addr } ),
.dram_io_bank ({dram0_io_bank } ),
.dram_io_cs_l ({dram0_io_cs_l } ),
.dram_dq ({dram0_dq } ),
.dram_addr ({dram0_addr } ),
.dram_cb ({dram0_cb } ),
.dram_dqs ({dram0_dqs } ),
.dram_ba ({dram0_ba } ),
.dram_ck_n ({dram0_ck_n } ),
.dram_ck_p ({dram0_ck_p } ),
.dram_cs_l ({dram0_cs_l } ),
.lpf_code ({ddr0_lpf_code } ),
.cbu ({ddr0_ddr1_cbu } ),
.cbd ({ddr0_ddr1_cbd } ),
.update_dr_in (bscan_update_dr_in ),
.mode_ctrl_in (bscan_mode_ctl_in ),
.shift_dr_in (bscan_shift_dr_in ),
.clock_dr_in (bscan_clock_dr_in ),
.hiz_n_in (bscan_hiz_l_in ),
.testmode_l (ddr_testmode_l ),
.test_mode (test_mode ),
.bypass_enable_out (bypass_enable_out ),
.ps_select_out (ps_select_out ),
.rclk (rclk ),
.se (ddr_se_buf ),
.pad_clk_so (scan0 ),
.pad_clk_si (ddr_si ),
.bso (pad_ddr0_bso ),
.bsi (pad_ddr0_bsi ),
.mode_ctrl_out (bscan_mode_ctl_out ),
.update_dr_out (bscan_update_dr_out ),
.shift_dr_out (bscan_shift_dr_out ),
.clock_dr_out (bscan_clock_dr_out ),
.hiz_n_out (bscan_hiz_l_out ),
.bypass_enable_in (bypass_enable ),
.ps_select_in (ps_select ),
.strobe (strobe ),
.dram_io_clk_enable (dram0_io_clk_enable ),
.dram_io_cke (dram0_io_cke ),
.dram_io_ras_l (dram0_io_ras_l ),
.dram_io_write_en_l (dram0_io_write_en_l ),
.dram_io_cas_l (dram0_io_cas_l ),
.dram_cke (dram0_cke ),
.io_dram_data_valid (io_dram0_data_valid ),
.dram_ras_l (dram0_ras_l ),
.dram_we_l (dram0_we_l ),
.dram_cas_l (dram0_cas_l ),
.burst_length_four (vdd ),
.dram_io_pad_clk_inv (dram0_io_pad_clk_inv ),
.dram_io_pad_enable (dram0_io_pad_enable ),
.dram_io_drive_enable (dram0_io_drive_enable ),
.rst_l (rst_l ),
.dram_arst_l (dram_arst_l ),
.dram_io_channel_disabled (dram0_io_channel_disabled ),
.dram_io_drive_data (dram0_io_drive_data ),
.vdd_h (vdd18 ) );
bw_io_ddr_impctl_pulldown ddr0_impctl_pulldown (
.z ({ddr0_ddr1_cbd } ),
.from_csr ({vss ,vss ,vss ,vss ,vss ,vss ,vss ,vss } ),
.to_csr ({net243[0] ,net243[1] ,net243[2] ,net243[3] ,
net243[4] ,net243[5] ,net243[6] ,net243[7] } ),
.tclk (tck ),
.ctu_global_snap (ctu_global_snap ),
.ctu_io_sscan_in (sscan0 ),
.ctu_io_sscan_se (ctu_io_sscan_se ),
.ctu_io_sscan_update (ctu_io_sscan_update ),
.ctu_io_sscan_out (pad_ddr0_sscan_out ),
.rclk (rclk ),
.deltabit (net244 ),
.hard_reset_n (rst_l ),
.clk_dis_l (clk_ddr0_cken_buf ),
.we_csr (vss ),
.si (scan1 ),
.se (ddr_se_buf ),
.vdd18 (vdd18 ),
.pad (dram01_n_ref_res ),
.so (scan2 ) );
// ECO 7016 added ddr0_iodll_code_adjust 10/11/04
// ECO 7016 Changed so, lpf_out port connections on ddr0_master_dll
wire [4:0] ddr0_lpf_code_pre;
wire scan3_pre;
bw_iodll_code_adjust ddr0_iodll_code_adjust (
.bypass_data (ddr0_bypass_data[4:0]),
.ddr_clk_in (rclk),
.delay_ctrl (ctu_ddr0_dll_delayctr[2:0]),
.io_dll_bypass_l (ddr0_dll_bypass_l),
.iodll_reset_l (ctu_ddr0_iodll_rst_l),
.s_controller_out (ddr0_lpf_code_pre[4:0]),
.s_percent_ctrl_out (ddr0_lpf_code[4:0]),
.se (ddr_se_buf),
.si (scan3_pre),
.so (scan3));
bw_iodll ddr0_master_dll (
.ddr_testmode_l (ddr_testmode_l ),
.bypass_data ({ddr0_bypass_data } ),
.lpf_out ({ddr0_lpf_code_pre } ),
.delay_ctrl ({ctu_ddr0_dll_delayctr } ),
.so (scan3_pre ),
.io_dll_bypass_l (ddr0_dll_bypass_l ),
.io_dll_reset_l (ctu_ddr0_iodll_rst_l ),
.se (ddr_se_buf ),
.si (scan2 ),
.ddr_clk_in (rclk ),
.iodll_lock (ddr0_ctu_dll_lock ),
.overflow (ddr0_ctu_dll_overflow ),
.strobe (strobe ) );
// End ECO 7016
bw_io_ddr_impctl_pullup ddr0_impctl_pullup (
.z ({ddr0_ddr1_cbu } ),
.from_csr ({vss ,vss ,vss ,vss ,vss ,vss ,vss ,vss } ),
.to_csr ({net223[0] ,net223[1] ,net223[2] ,net223[3] ,
net223[4] ,net223[5] ,net223[6] ,net223[7] } ),
.rclk (rclk ),
.so (scan1 ),
.deltabit (net224 ),
.hard_reset_n (rst_l ),
.clk_dis_l (clk_ddr0_cken_buf ),
.we_csr (vss ),
.si (scan0 ),
.se (ddr_se_buf ),
.ctu_io_sscan_se (ctu_io_sscan_se ),
.vdd18 (vdd18 ),
.ctu_io_sscan_in (pad_ddr0_sscan_in ),
.ctu_io_sscan_out (sscan0 ),
.ctu_io_sscan_update (ctu_io_sscan_update ),
.pad (dram01_p_ref_res ),
.ctu_global_snap (ctu_global_snap ),
.tclk (tck ) );
bw_u1_buf_40x I223 (
.z (ddr_se_buf ),
.a (ddr_se ) );
bw_u1_buf_40x I225 (
.z (clk_ddr0_cken_buf ),
.a (clk_ddr0_cken ) );
bw_u1_scanl_2x lockup_latch(
.so(ddr_so),
.sd(ddr_so_pre_latch),
.ck(rclk));
endmodule