Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / lsu / rtl / lsu_sbd_dp.v
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T2 Processor File: lsu_sbd_dp.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
//
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This 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 program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
//
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// have any questions.
//
// ========== Copyright Header End ============================================
module lsu_sbd_dp (
const_cpuid,
lsu_va_m,
exu_lsu_store_data_e,
fgu_lsu_fst_data_fx1,
tlb_pgnum_crit,
tlb_tte_ie_b,
sbc_st_int_sel_m,
sbc_bst_offset,
sbc_bst_in_prog_m,
sbc_load_bst_addr,
sec_st_sz_dw_std_le_b,
sec_st_sz_dw_le_not_ie_b,
sec_st_sz_dw_be_not_ie_b,
sec_st_sz_word_le_not_ie_b,
sec_st_sz_word_be_not_ie_b,
sec_st_sz_hw_le_not_ie_b,
sec_st_sz_hw_be_not_ie_b,
sec_st_sz_dw_le_if_ie_b,
sec_st_sz_dw_be_if_ie_b,
sec_st_sz_word_le_if_ie_b,
sec_st_sz_word_be_if_ie_b,
sec_st_sz_hw_le_if_ie_b,
sec_st_sz_hw_be_if_ie_b,
sec_st_sz_byte_b,
dcc_tid_m,
dcc_asi_m,
dcc_sbd_e_clken,
dcc_sbd_m_clken,
dcc_std_inst_m,
dcc_fp32b_sel_m,
dcc_asi_iomap_m,
dcc_cache_diag_wr_m,
dcc_demap_asi_m,
dcc_ldstub_inst_m,
stb_cam_data,
dcs_memref_m,
mbi_run,
mbi_cambist_run,
mbi_wdata,
mbi_ptag_data,
mbi_init_to_zero,
mbi_cambist_shift,
sbd_st_data_b,
sbd_st_data2_b,
sbd_st_datab_b,
sbd_st_predata_b,
sbd_st_addr_b,
stb_st_addr_m,
stb_st_addr_b,
l2clk,
scan_in,
tcu_pce_ov,
tcu_scan_en,
spc_aclk,
spc_bclk,
scan_out);
wire stop;
wire se;
wire pce_ov;
wire siclk;
wire soclk;
wire dff_st_data_m_0_scanin;
wire dff_st_data_m_0_scanout;
wire [63:0] pre_st_data_m;
wire dff_st_data_m_1_scanin;
wire dff_st_data_m_1_scanout;
wire ldstub_inst_m_0;
wire ldstub_inst_m_1;
wire [63:0] pre_st_data2_m;
wire [63:0] st_data_m;
wire dff_st_data_b_0_scanin;
wire dff_st_data_b_0_scanout;
wire [63:0] st_data_b;
wire dff_st_data_b_1_scanin;
wire dff_st_data_b_1_scanout;
wire [7:0] byte0;
wire [7:0] byte1;
wire [7:0] byte2;
wire [7:0] byte3;
wire [7:0] byte4;
wire [7:0] byte5;
wire [7:0] byte6;
wire [7:0] byte7;
wire [63:0] st_data_ie0_b;
wire [63:0] st_data_ie1_b;
wire [39:3] st_addr_b;
wire [39:3] bist_data;
wire [39:6] bst_addr;
wire [39:3] st_addr_m;
wire dff_st_addr_scanin;
wire dff_st_addr_scanout;
wire dff_bst_addr_scanin;
wire dff_bst_addr_scanout;
input [2:0] const_cpuid;
input [47:3] lsu_va_m;
input [63:0] exu_lsu_store_data_e;
input [63:0] fgu_lsu_fst_data_fx1;
input [39:13] tlb_pgnum_crit;
input tlb_tte_ie_b;
input sbc_st_int_sel_m;
input [2:0] sbc_bst_offset;
input sbc_bst_in_prog_m;
input sbc_load_bst_addr;
input sec_st_sz_dw_std_le_b;
input sec_st_sz_dw_le_not_ie_b;
input sec_st_sz_dw_be_not_ie_b;
input sec_st_sz_word_le_not_ie_b;
input sec_st_sz_word_be_not_ie_b;
input sec_st_sz_hw_le_not_ie_b;
input sec_st_sz_hw_be_not_ie_b;
input sec_st_sz_dw_le_if_ie_b;
input sec_st_sz_dw_be_if_ie_b;
input sec_st_sz_word_le_if_ie_b;
input sec_st_sz_word_be_if_ie_b;
input sec_st_sz_hw_le_if_ie_b;
input sec_st_sz_hw_be_if_ie_b;
input sec_st_sz_byte_b;
input [2:0] dcc_tid_m;
input [7:0] dcc_asi_m;
input dcc_sbd_e_clken;
input dcc_sbd_m_clken;
input dcc_std_inst_m;
input dcc_fp32b_sel_m;
input dcc_asi_iomap_m;
input dcc_cache_diag_wr_m;
input dcc_demap_asi_m;
input dcc_ldstub_inst_m;
input [44:11] stb_cam_data;
input dcs_memref_m;
input mbi_run;
input mbi_cambist_run;
input [7:0] mbi_wdata;
input mbi_ptag_data;
input mbi_init_to_zero;
input mbi_cambist_shift;
output [63:0] sbd_st_data_b; // Final formatted data
output [63:0] sbd_st_data2_b; // Final formatted data
output [63:0] sbd_st_datab_b; // Final formatted data with bist
output [47:0] sbd_st_predata_b; // Unformatted store data (ok for ASI writes)
output [39:3] sbd_st_addr_b;
output [39:3] stb_st_addr_m;
output [39:13] stb_st_addr_b;
// Globals
input l2clk;
input scan_in;
input tcu_pce_ov; // scan signals
input tcu_scan_en;
input spc_aclk;
input spc_bclk;
output scan_out;
// scan renames
assign stop = 1'b0;
// end scan
lsu_sbd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 test_rep0 (
.din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}),
.dout({se,pce_ov,siclk,soclk})
);
////////////////////////////////////////////////////////////////////////////////
// Mux different sources of store data. FGU data gets muxed spearately in M
// because it comes in that cycle.
lsu_sbd_dp_msff_macro__mux_aope__ports_2__stack_32c__width_32 dff_st_data_m_0 (
.scan_in(dff_st_data_m_0_scanin),
.scan_out(dff_st_data_m_0_scanout),
.din0 (pre_st_data_m[31:0]), // std
.din1 (exu_lsu_store_data_e[63:32]), // default
.sel0 (dcc_std_inst_m),
.dout (pre_st_data_m[63:32]),
.clk (l2clk),
.en (dcc_sbd_e_clken),
.se(se),
.siclk(siclk),
.soclk(soclk),
.pce_ov(pce_ov),
.stop(stop) // enable on stores, second half of STD/CAS
);
lsu_sbd_dp_msff_macro__mux_aope__ports_2__stack_32c__width_32 dff_st_data_m_1 (
.scan_in(dff_st_data_m_1_scanin),
.scan_out(dff_st_data_m_1_scanout),
.din0 (exu_lsu_store_data_e[31:0]), // std
.din1 (exu_lsu_store_data_e[31:0]), // default
.sel0 (dcc_std_inst_m),
.dout (pre_st_data_m[31:0]),
.clk (l2clk),
.en (dcc_sbd_e_clken),
.se(se),
.siclk(siclk),
.soclk(soclk),
.pce_ov(pce_ov),
.stop(stop) // enable on stores, second half of STD/CAS
);
lsu_sbd_dp_buff_macro__rep_1__width_2 ldstub_buf (
.din ({2{dcc_ldstub_inst_m}}),
.dout ({ldstub_inst_m_0,ldstub_inst_m_1})
);
lsu_sbd_dp_or_macro__ports_2__stack_32c__width_32 ldstub_or_0 (
.din0 (pre_st_data_m[63:32]),
.din1 ({32{ldstub_inst_m_0}}),
.dout (pre_st_data2_m[63:32])
);
lsu_sbd_dp_or_macro__ports_2__stack_32c__width_32 ldstub_or_1 (
.din0 (pre_st_data_m[31:0]),
.din1 ({32{ldstub_inst_m_1}}),
.dout (pre_st_data2_m[31:0])
);
lsu_sbd_dp_mux_macro__mux_aope__ports_4__stack_32c__width_32 mx_data_m_0 (
.din0 ({16'b0,lsu_va_m[47:32]}),
.din1 (pre_st_data2_m[63:32]),
.din2 (fgu_lsu_fst_data_fx1[63:32]),
.din3 (fgu_lsu_fst_data_fx1[63:32]),
.sel0 (dcc_demap_asi_m),
.sel1 (sbc_st_int_sel_m),
.sel2 (dcc_fp32b_sel_m),
.dout (st_data_m[63:32])
);
lsu_sbd_dp_mux_macro__mux_aope__ports_4__stack_32c__width_32 mx_data_m_1 (
.din0 ({lsu_va_m[31:3],3'b0}),
.din1 (pre_st_data2_m[31:0]),
.din2 (fgu_lsu_fst_data_fx1[63:32]),
.din3 (fgu_lsu_fst_data_fx1[31:0]),
.sel0 (dcc_demap_asi_m),
.sel1 (sbc_st_int_sel_m),
.sel2 (dcc_fp32b_sel_m),
.dout (st_data_m[31:0])
);
lsu_sbd_dp_msff_macro__stack_32c__width_32 dff_st_data_b_0 (
.scan_in(dff_st_data_b_0_scanin),
.scan_out(dff_st_data_b_0_scanout),
.din (st_data_m[63:32]),
.dout (st_data_b[63:32]),
.clk (l2clk),
.en (dcc_sbd_m_clken),
.se(se),
.siclk(siclk),
.soclk(soclk),
.pce_ov(pce_ov),
.stop(stop)
);
lsu_sbd_dp_msff_macro__stack_32c__width_32 dff_st_data_b_1 (
.scan_in(dff_st_data_b_1_scanin),
.scan_out(dff_st_data_b_1_scanout),
.din (st_data_m[31:0]),
.dout (st_data_b[31:0]),
.clk (l2clk),
.en (dcc_sbd_m_clken),
.se(se),
.siclk(siclk),
.soclk(soclk),
.pce_ov(pce_ov),
.stop(stop)
);
lsu_sbd_dp_buff_macro__rep_1__stack_32c__width_16 st_predata_buf_0 (
.din (st_data_b[47:32]),
.dout (sbd_st_predata_b[47:32])
);
lsu_sbd_dp_buff_macro__rep_1__stack_32c__width_32 st_predata_buf_1 (
.din (st_data_b[31:0]),
.dout (sbd_st_predata_b[31:0])
);
////////////////////////////////////////////////////////////////////////////////
// Little endian swapping and data fill
assign byte0[7:0] = st_data_b[7:0];
assign byte1[7:0] = st_data_b[15:8];
assign byte2[7:0] = st_data_b[23:16];
assign byte3[7:0] = st_data_b[31:24];
assign byte4[7:0] = st_data_b[39:32];
assign byte5[7:0] = st_data_b[47:40];
assign byte6[7:0] = st_data_b[55:48];
assign byte7[7:0] = st_data_b[63:56];
// Replicate data of size <64b to fill the line.
lsu_sbd_dp_mux_macro__mux_aonpe__ports_8__stack_32c__width_32 mx_ie0_0 (
.din0 ({byte4[7:0],byte5[7:0],byte6[7:0],byte7[7:0]}),
.din1 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din2 ({byte7[7:0],byte6[7:0],byte5[7:0],byte4[7:0]}),
.din3 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din4 ({byte3[7:0],byte2[7:0],byte1[7:0],byte0[7:0]}),
.din5 ({byte0[7:0],byte1[7:0],byte0[7:0],byte1[7:0]}),
.din6 ({byte1[7:0],byte0[7:0],byte1[7:0],byte0[7:0]}),
.din7 ({byte0[7:0],byte0[7:0],byte0[7:0],byte0[7:0]}),
.sel0 (sec_st_sz_dw_std_le_b),
.sel1 (sec_st_sz_dw_le_not_ie_b),
.sel2 (sec_st_sz_dw_be_not_ie_b),
.sel3 (sec_st_sz_word_le_not_ie_b),
.sel4 (sec_st_sz_word_be_not_ie_b),
.sel5 (sec_st_sz_hw_le_not_ie_b),
.sel6 (sec_st_sz_hw_be_not_ie_b),
.sel7 (sec_st_sz_byte_b),
.dout (st_data_ie0_b[63:32])
);
lsu_sbd_dp_mux_macro__mux_aonpe__ports_8__stack_32c__width_32 mx_ie0_1 (
.din0 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din1 ({byte4[7:0],byte5[7:0],byte6[7:0],byte7[7:0]}),
.din2 ({byte3[7:0],byte2[7:0],byte1[7:0],byte0[7:0]}),
.din3 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din4 ({byte3[7:0],byte2[7:0],byte1[7:0],byte0[7:0]}),
.din5 ({byte0[7:0],byte1[7:0],byte0[7:0],byte1[7:0]}),
.din6 ({byte1[7:0],byte0[7:0],byte1[7:0],byte0[7:0]}),
.din7 ({byte0[7:0],byte0[7:0],byte0[7:0],byte0[7:0]}),
.sel0 (sec_st_sz_dw_std_le_b),
.sel1 (sec_st_sz_dw_le_not_ie_b),
.sel2 (sec_st_sz_dw_be_not_ie_b),
.sel3 (sec_st_sz_word_le_not_ie_b),
.sel4 (sec_st_sz_word_be_not_ie_b),
.sel5 (sec_st_sz_hw_le_not_ie_b),
.sel6 (sec_st_sz_hw_be_not_ie_b),
.sel7 (sec_st_sz_byte_b),
.dout (st_data_ie0_b[31:0])
);
lsu_sbd_dp_mux_macro__mux_aonpe__ports_8__stack_32c__width_32 mx_ie1_0 (
.din0 ({byte4[7:0],byte5[7:0],byte6[7:0],byte7[7:0]}),
.din1 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din2 ({byte7[7:0],byte6[7:0],byte5[7:0],byte4[7:0]}),
.din3 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din4 ({byte3[7:0],byte2[7:0],byte1[7:0],byte0[7:0]}),
.din5 ({byte0[7:0],byte1[7:0],byte0[7:0],byte1[7:0]}),
.din6 ({byte1[7:0],byte0[7:0],byte1[7:0],byte0[7:0]}),
.din7 ({byte0[7:0],byte0[7:0],byte0[7:0],byte0[7:0]}),
.sel0 (sec_st_sz_dw_std_le_b),
.sel1 (sec_st_sz_dw_le_if_ie_b),
.sel2 (sec_st_sz_dw_be_if_ie_b),
.sel3 (sec_st_sz_word_le_if_ie_b),
.sel4 (sec_st_sz_word_be_if_ie_b),
.sel5 (sec_st_sz_hw_le_if_ie_b),
.sel6 (sec_st_sz_hw_be_if_ie_b),
.sel7 (sec_st_sz_byte_b),
.dout (st_data_ie1_b[63:32])
);
lsu_sbd_dp_mux_macro__mux_aonpe__ports_8__stack_32c__width_32 mx_ie1_1 (
.din0 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din1 ({byte4[7:0],byte5[7:0],byte6[7:0],byte7[7:0]}),
.din2 ({byte3[7:0],byte2[7:0],byte1[7:0],byte0[7:0]}),
.din3 ({byte0[7:0],byte1[7:0],byte2[7:0],byte3[7:0]}),
.din4 ({byte3[7:0],byte2[7:0],byte1[7:0],byte0[7:0]}),
.din5 ({byte0[7:0],byte1[7:0],byte0[7:0],byte1[7:0]}),
.din6 ({byte1[7:0],byte0[7:0],byte1[7:0],byte0[7:0]}),
.din7 ({byte0[7:0],byte0[7:0],byte0[7:0],byte0[7:0]}),
.sel0 (sec_st_sz_dw_std_le_b),
.sel1 (sec_st_sz_dw_le_if_ie_b),
.sel2 (sec_st_sz_dw_be_if_ie_b),
.sel3 (sec_st_sz_word_le_if_ie_b),
.sel4 (sec_st_sz_word_be_if_ie_b),
.sel5 (sec_st_sz_hw_le_if_ie_b),
.sel6 (sec_st_sz_hw_be_if_ie_b),
.sel7 (sec_st_sz_byte_b),
.dout (st_data_ie1_b[31:0])
);
lsu_sbd_dp_mux_macro__mux_pgpe__ports_2__stack_32c__width_32 mx_endian_0 (
.din0 (st_data_ie1_b[63:32]),
.din1 (st_data_ie0_b[63:32]),
.sel0 (tlb_tte_ie_b),
.dout (sbd_st_data_b[63:32])
);
lsu_sbd_dp_mux_macro__mux_pgpe__ports_2__stack_32c__width_32 mx_endian_1 (
.din0 (st_data_ie1_b[31:0]),
.din1 (st_data_ie0_b[31:0]),
.sel0 (tlb_tte_ie_b),
.dout (sbd_st_data_b[31:0])
);
lsu_sbd_dp_buff_macro__dbuff_16x__rep_1__stack_32c__width_32 st_data_buf_0 (
.din (sbd_st_data_b[63:32]),
.dout (sbd_st_data2_b[63:32])
);
lsu_sbd_dp_buff_macro__dbuff_16x__rep_1__stack_32c__width_32 st_data_buf_1 (
.din (sbd_st_data_b[31:0]),
.dout (sbd_st_data2_b[31:0])
);
lsu_sbd_dp_mux_macro__mux_aope__ports_2__stack_32c__width_32 mx_bist_0 (
.din0 ({4{mbi_wdata[7:0]}}),
.din1 (sbd_st_data2_b[63:32]),
.sel0 (mbi_run),
.dout (sbd_st_datab_b[63:32])
);
lsu_sbd_dp_mux_macro__mux_aope__ports_2__stack_32c__width_32 mx_bist_1 (
.din0 ({4{mbi_wdata[7:0]}}),
.din1 (sbd_st_data2_b[31:0]),
.sel0 (mbi_run),
.dout (sbd_st_datab_b[31:0])
);
////////////////////////////////////////////////////////////////////////////////
// Block store address flop and address mux.
// When a block store initiates, load the address in the mux. With each step of
// the store, increment the address. Store addresses either come from the tlb
// or from the block store address flop.
lsu_sbd_dp_mux_macro__left_1__mux_aope__ports_4__stack_38l__width_37 sbd_bist_mux (
.din0 ({{36{1'b0}},1'b1}),
.din1 ({st_addr_b[38:3],1'b0}),
.din2 ({37{mbi_ptag_data}}),
.din3 ({{4{mbi_wdata[7:0]}},mbi_wdata[7:3]}),
.sel0 (mbi_init_to_zero),
.sel1 (mbi_cambist_shift),
.sel2 (mbi_cambist_run),
.dout ({bist_data[39:3]})
);
// During Lbist, dcc_asi_iomap_m is forced high. This prevents the tlb_pgnum_crit
// from propagating.
lsu_sbd_dp_mux_macro__dmux_8x__left_1__mux_aope__ports_5__stack_38l__width_37 st_addr_mux (
.din0 (bist_data[39:3]),
.din1 ({bst_addr[39:6],sbc_bst_offset[2:0]}),
.din2 ({8'h90,const_cpuid[2:0],dcc_tid_m[2:0],dcc_asi_m[7:0],lsu_va_m[17:3]}),
.din3 ({pre_st_data_m[30:2],lsu_va_m[10:3]}),
.din4 ({tlb_pgnum_crit[39:13],lsu_va_m[12:3]}),
.sel0 (mbi_run),
.sel1 (sbc_bst_in_prog_m),
.sel2 (dcc_asi_iomap_m),
.sel3 (dcc_cache_diag_wr_m),
.dout ({st_addr_m[39:3]})
);
assign stb_st_addr_m[39:3] = st_addr_m[39:3]; // to stb_cam
lsu_sbd_dp_msff_macro__left_1__stack_38l__width_37 dff_st_addr (
.scan_in(dff_st_addr_scanin),
.scan_out(dff_st_addr_scanout),
.din (st_addr_m[39:3]),
.dout (st_addr_b[39:3]),
.clk (l2clk),
.en (dcs_memref_m),
.se(se),
.siclk(siclk),
.soclk(soclk),
.pce_ov(pce_ov),
.stop(stop)
);
lsu_sbd_dp_buff_macro__left_1__rep_1__stack_38l__width_37 st_addr_b_buf (
.din (st_addr_b[39:3]),
.dout (sbd_st_addr_b[39:3])
);
lsu_sbd_dp_buff_macro__left_10__rep_1__stack_40c__width_27 stb_st_addr_b_buf (
.din (st_addr_b[39:13]),
.dout (stb_st_addr_b[39:13])
);
lsu_sbd_dp_msff_macro__left_4__minbuff_1__stack_38l__width_34 dff_bst_addr (
.scan_in(dff_bst_addr_scanin),
.scan_out(dff_bst_addr_scanout),
.din (stb_cam_data[44:11]),
.dout (bst_addr[39:6]),
.clk (l2clk),
.en (sbc_load_bst_addr),
.se(se),
.siclk(siclk),
.soclk(soclk),
.pce_ov(pce_ov),
.stop(stop)
);
// fixscan start:
assign dff_st_data_m_0_scanin = scan_in ;
assign dff_st_data_m_1_scanin = dff_st_data_m_0_scanout ;
assign dff_st_data_b_0_scanin = dff_st_data_m_1_scanout ;
assign dff_st_data_b_1_scanin = dff_st_data_b_0_scanout ;
assign dff_st_addr_scanin = dff_st_data_b_1_scanout ;
assign dff_bst_addr_scanin = dff_st_addr_scanout ;
assign scan_out = dff_bst_addr_scanout ;
// fixscan end:
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 (
din,
dout);
input [3:0] din;
output [3:0] dout;
buff #(4) d0_0 (
.in(din[3:0]),
.out(dout[3:0])
);
endmodule
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_msff_macro__mux_aope__ports_2__stack_32c__width_32 (
din0,
din1,
sel0,
clk,
en,
se,
scan_in,
siclk,
soclk,
pce_ov,
stop,
dout,
scan_out);
wire psel0;
wire psel1;
wire [31:0] muxout;
wire l1clk;
wire siclk_out;
wire soclk_out;
wire [30:0] so;
input [31:0] din0;
input [31:0] din1;
input sel0;
input clk;
input en;
input se;
input scan_in;
input siclk;
input soclk;
input pce_ov;
input stop;
output [31:0] dout;
output scan_out;
cl_dp1_penc2_8x c1_0 (
.sel0(sel0),
.psel0(psel0),
.psel1(psel1)
);
mux2s #(32) d1_0 (
.sel0(psel0),
.sel1(psel1),
.in0(din0[31:0]),
.in1(din1[31:0]),
.dout(muxout[31:0])
);
cl_dp1_l1hdr_8x c0_0 (
.l2clk(clk),
.pce(en),
.aclk(siclk),
.bclk(soclk),
.l1clk(l1clk),
.se(se),
.pce_ov(pce_ov),
.stop(stop),
.siclk_out(siclk_out),
.soclk_out(soclk_out)
);
dff #(32) d0_0 (
.l1clk(l1clk),
.siclk(siclk_out),
.soclk(soclk_out),
.d(muxout[31:0]),
.si({scan_in,so[30:0]}),
.so({so[30:0],scan_out}),
.q(dout[31:0])
);
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__rep_1__width_2 (
din,
dout);
input [1:0] din;
output [1:0] dout;
buff #(2) d0_0 (
.in(din[1:0]),
.out(dout[1:0])
);
endmodule
//
// or macro for ports = 2,3
//
//
module lsu_sbd_dp_or_macro__ports_2__stack_32c__width_32 (
din0,
din1,
dout);
input [31:0] din0;
input [31:0] din1;
output [31:0] dout;
or2 #(32) d0_0 (
.in0(din0[31:0]),
.in1(din1[31:0]),
.out(dout[31:0])
);
endmodule
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_mux_macro__mux_aope__ports_4__stack_32c__width_32 (
din0,
din1,
din2,
din3,
sel0,
sel1,
sel2,
dout);
wire psel0;
wire psel1;
wire psel2;
wire psel3;
input [31:0] din0;
input [31:0] din1;
input [31:0] din2;
input [31:0] din3;
input sel0;
input sel1;
input sel2;
output [31:0] dout;
cl_dp1_penc4_8x c0_0 (
.test(1'b1),
.sel0(sel0),
.sel1(sel1),
.sel2(sel2),
.psel0(psel0),
.psel1(psel1),
.psel2(psel2),
.psel3(psel3)
);
mux4s #(32) d0_0 (
.sel0(psel0),
.sel1(psel1),
.sel2(psel2),
.sel3(psel3),
.in0(din0[31:0]),
.in1(din1[31:0]),
.in2(din2[31:0]),
.in3(din3[31:0]),
.dout(dout[31:0])
);
endmodule
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_msff_macro__stack_32c__width_32 (
din,
clk,
en,
se,
scan_in,
siclk,
soclk,
pce_ov,
stop,
dout,
scan_out);
wire l1clk;
wire siclk_out;
wire soclk_out;
wire [30:0] so;
input [31:0] din;
input clk;
input en;
input se;
input scan_in;
input siclk;
input soclk;
input pce_ov;
input stop;
output [31:0] dout;
output scan_out;
cl_dp1_l1hdr_8x c0_0 (
.l2clk(clk),
.pce(en),
.aclk(siclk),
.bclk(soclk),
.l1clk(l1clk),
.se(se),
.pce_ov(pce_ov),
.stop(stop),
.siclk_out(siclk_out),
.soclk_out(soclk_out)
);
dff #(32) d0_0 (
.l1clk(l1clk),
.siclk(siclk_out),
.soclk(soclk_out),
.d(din[31:0]),
.si({scan_in,so[30:0]}),
.so({so[30:0],scan_out}),
.q(dout[31:0])
);
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__rep_1__stack_32c__width_16 (
din,
dout);
input [15:0] din;
output [15:0] dout;
buff #(16) d0_0 (
.in(din[15:0]),
.out(dout[15:0])
);
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__rep_1__stack_32c__width_32 (
din,
dout);
input [31:0] din;
output [31:0] dout;
buff #(32) d0_0 (
.in(din[31:0]),
.out(dout[31:0])
);
endmodule
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_mux_macro__mux_aonpe__ports_8__stack_32c__width_32 (
din0,
sel0,
din1,
sel1,
din2,
sel2,
din3,
sel3,
din4,
sel4,
din5,
sel5,
din6,
sel6,
din7,
sel7,
dout);
wire buffout0;
wire buffout1;
wire buffout2;
wire buffout3;
wire buffout4;
wire buffout5;
wire buffout6;
wire buffout7;
input [31:0] din0;
input sel0;
input [31:0] din1;
input sel1;
input [31:0] din2;
input sel2;
input [31:0] din3;
input sel3;
input [31:0] din4;
input sel4;
input [31:0] din5;
input sel5;
input [31:0] din6;
input sel6;
input [31:0] din7;
input sel7;
output [31:0] dout;
cl_dp1_muxbuff8_8x c0_0 (
.in0(sel0),
.in1(sel1),
.in2(sel2),
.in3(sel3),
.in4(sel4),
.in5(sel5),
.in6(sel6),
.in7(sel7),
.out0(buffout0),
.out1(buffout1),
.out2(buffout2),
.out3(buffout3),
.out4(buffout4),
.out5(buffout5),
.out6(buffout6),
.out7(buffout7)
);
mux8s #(32) d0_0 (
.sel0(buffout0),
.sel1(buffout1),
.sel2(buffout2),
.sel3(buffout3),
.sel4(buffout4),
.sel5(buffout5),
.sel6(buffout6),
.sel7(buffout7),
.in0(din0[31:0]),
.in1(din1[31:0]),
.in2(din2[31:0]),
.in3(din3[31:0]),
.in4(din4[31:0]),
.in5(din5[31:0]),
.in6(din6[31:0]),
.in7(din7[31:0]),
.dout(dout[31:0])
);
endmodule
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_mux_macro__mux_pgpe__ports_2__stack_32c__width_32 (
din0,
din1,
sel0,
dout);
wire psel0_unused;
wire psel1;
input [31:0] din0;
input [31:0] din1;
input sel0;
output [31:0] dout;
cl_dp1_penc2_8x c0_0 (
.sel0(sel0),
.psel0(psel0_unused),
.psel1(psel1)
);
mux2e #(32) d0_0 (
.sel(psel1),
.in0(din0[31:0]),
.in1(din1[31:0]),
.dout(dout[31:0])
);
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__dbuff_16x__rep_1__stack_32c__width_32 (
din,
dout);
input [31:0] din;
output [31:0] dout;
buff #(32) d0_0 (
.in(din[31:0]),
.out(dout[31:0])
);
endmodule
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_mux_macro__mux_aope__ports_2__stack_32c__width_32 (
din0,
din1,
sel0,
dout);
wire psel0;
wire psel1;
input [31:0] din0;
input [31:0] din1;
input sel0;
output [31:0] dout;
cl_dp1_penc2_8x c0_0 (
.sel0(sel0),
.psel0(psel0),
.psel1(psel1)
);
mux2s #(32) d0_0 (
.sel0(psel0),
.sel1(psel1),
.in0(din0[31:0]),
.in1(din1[31:0]),
.dout(dout[31:0])
);
endmodule
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_mux_macro__left_1__mux_aope__ports_4__stack_38l__width_37 (
din0,
din1,
din2,
din3,
sel0,
sel1,
sel2,
dout);
wire psel0;
wire psel1;
wire psel2;
wire psel3;
input [36:0] din0;
input [36:0] din1;
input [36:0] din2;
input [36:0] din3;
input sel0;
input sel1;
input sel2;
output [36:0] dout;
cl_dp1_penc4_8x c0_0 (
.test(1'b1),
.sel0(sel0),
.sel1(sel1),
.sel2(sel2),
.psel0(psel0),
.psel1(psel1),
.psel2(psel2),
.psel3(psel3)
);
mux4s #(37) d0_0 (
.sel0(psel0),
.sel1(psel1),
.sel2(psel2),
.sel3(psel3),
.in0(din0[36:0]),
.in1(din1[36:0]),
.in2(din2[36:0]),
.in3(din3[36:0]),
.dout(dout[36:0])
);
endmodule
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_mux_macro__dmux_8x__left_1__mux_aope__ports_5__stack_38l__width_37 (
din0,
din1,
din2,
din3,
din4,
sel0,
sel1,
sel2,
sel3,
dout);
wire psel0;
wire psel1;
wire psel2;
wire psel3;
wire psel4;
input [36:0] din0;
input [36:0] din1;
input [36:0] din2;
input [36:0] din3;
input [36:0] din4;
input sel0;
input sel1;
input sel2;
input sel3;
output [36:0] dout;
cl_dp1_penc5_8x c0_0 (
.test(1'b1),
.sel0(sel0),
.sel1(sel1),
.sel2(sel2),
.sel3(sel3),
.psel0(psel0),
.psel1(psel1),
.psel2(psel2),
.psel3(psel3),
.psel4(psel4)
);
mux5s #(37) d0_0 (
.sel0(psel0),
.sel1(psel1),
.sel2(psel2),
.sel3(psel3),
.sel4(psel4),
.in0(din0[36:0]),
.in1(din1[36:0]),
.in2(din2[36:0]),
.in3(din3[36:0]),
.in4(din4[36:0]),
.dout(dout[36:0])
);
endmodule
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_msff_macro__left_1__stack_38l__width_37 (
din,
clk,
en,
se,
scan_in,
siclk,
soclk,
pce_ov,
stop,
dout,
scan_out);
wire l1clk;
wire siclk_out;
wire soclk_out;
wire [35:0] so;
input [36:0] din;
input clk;
input en;
input se;
input scan_in;
input siclk;
input soclk;
input pce_ov;
input stop;
output [36:0] dout;
output scan_out;
cl_dp1_l1hdr_8x c0_0 (
.l2clk(clk),
.pce(en),
.aclk(siclk),
.bclk(soclk),
.l1clk(l1clk),
.se(se),
.pce_ov(pce_ov),
.stop(stop),
.siclk_out(siclk_out),
.soclk_out(soclk_out)
);
dff #(37) d0_0 (
.l1clk(l1clk),
.siclk(siclk_out),
.soclk(soclk_out),
.d(din[36:0]),
.si({scan_in,so[35:0]}),
.so({so[35:0],scan_out}),
.q(dout[36:0])
);
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__left_1__rep_1__stack_38l__width_37 (
din,
dout);
input [36:0] din;
output [36:0] dout;
buff #(37) d0_0 (
.in(din[36:0]),
.out(dout[36:0])
);
endmodule
//
// buff macro
//
//
module lsu_sbd_dp_buff_macro__left_10__rep_1__stack_40c__width_27 (
din,
dout);
input [26:0] din;
output [26:0] dout;
buff #(27) d0_0 (
.in(din[26:0]),
.out(dout[26:0])
);
endmodule
// any PARAMS parms go into naming of macro
module lsu_sbd_dp_msff_macro__left_4__minbuff_1__stack_38l__width_34 (
din,
clk,
en,
se,
scan_in,
siclk,
soclk,
pce_ov,
stop,
dout,
scan_out);
wire l1clk;
wire siclk_out;
wire soclk_out;
wire [32:0] so;
input [33:0] din;
input clk;
input en;
input se;
input scan_in;
input siclk;
input soclk;
input pce_ov;
input stop;
output [33:0] dout;
output scan_out;
cl_dp1_l1hdr_8x c0_0 (
.l2clk(clk),
.pce(en),
.aclk(siclk),
.bclk(soclk),
.l1clk(l1clk),
.se(se),
.pce_ov(pce_ov),
.stop(stop),
.siclk_out(siclk_out),
.soclk_out(soclk_out)
);
dff #(34) d0_0 (
.l1clk(l1clk),
.siclk(siclk_out),
.soclk(soclk_out),
.d(din[33:0]),
.si({scan_in,so[32:0]}),
.so({so[32:0],scan_out}),
.q(dout[33:0])
);
endmodule