Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / libs / n2sram / sp / n2_iom_sp_devtsb_cust_l / n2_iom_sp_devtsb_cust / rtl / n2_iom_sp_devtsb_cust.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: n2_iom_sp_devtsb_cust.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35module n2_iom_sp_devtsb_cust (
36 // clocks, scan
37 clk,
38 scan_in,
39 tcu_se_scancollar_in,
40 tcu_scan_en,
41 tcu_pce_ov,
42 pce,
43 tcu_aclk,
44 tcu_bclk,
45 tcu_array_wr_inhibit,
46 scan_out,
47
48// efu inputs
49 efu_bits,
50
51 // ram control
52 dev_rd,
53 adr_r,
54 tsb_rd,
55 lkup_en,
56 adr_bs,
57 dev_wr,
58 adr_w,
59 tsb_wr,
60 din,
61 dout,
62 tsb_adr_r
63
64);
65
66
67 // clocks, scan
68 input clk; // io clock
69 input scan_in; //
70 input tcu_se_scancollar_in; //
71 input tcu_scan_en; //
72 input tcu_pce_ov; // scan signals
73 input pce; //
74 input tcu_aclk; //
75 input tcu_bclk; //
76 input tcu_array_wr_inhibit; //
77 output scan_out; //
78 input [3:0] efu_bits; // efu inputs to adjust access time
79
80
81 input dev_rd; // Read enable for DEV RAM read port
82 input [4:0] adr_r; // Address for read port
83 input tsb_rd; // Read enable for TSB RAM read port
84 input lkup_en; // Lookup process enable
85 input [2:0] adr_bs;
86 input dev_wr; // Write enable for DEV RAM write port
87 input [4:0] adr_w; // Address for write port
88 input tsb_wr; // Write enable for TSB RAM write port
89 input [63:0] din;
90 output [63:0] dout;
91 output [4:0] tsb_adr_r;
92
93
94 //------------------------------------------------------------------------
95 // checker for read/write exclusivity
96 //------------------------------------------------------------------------
97wire [1:0] dev_rw,tsb_rw;
98assign dev_rw[1:0] = {dev_rd,dev_wr};
99assign tsb_rw[1:0] = {tsb_rd,tsb_wr};
100// 0in bits_on -var dev_rw -max 1
101// 0in bits_on -var tsb_rw -max 1
102 //------------------------------------------------------------------------
103 // scan chain connections
104 //------------------------------------------------------------------------
105// scan renames
106wire [1:0] siclk,soclk;
107wire se,wr_inhibit,and_clk;
108assign wr_inhibit = tcu_array_wr_inhibit;
109// end scan
110 //------------------------------------------------------------------------
111 // instantiate clock headers
112 //------------------------------------------------------------------------
113wire [1:0] collar_clk;
114wire pce_ov = tcu_pce_ov;
115wire stop = 1'b0;
116wire aclk = tcu_aclk;
117wire bclk = tcu_bclk;
118assign se = tcu_se_scancollar_in; // TEMP
119
120cl_dp1_l1hdr_8x clk_hdr_cntl (
121 .l2clk(clk),
122 .pce (pce),
123 .l1clk(collar_clk[0]),
124 .siclk_out(siclk[0]),
125 .soclk_out(soclk[0]),
126 .se(se),
127 .pce_ov(pce_ov),
128 .stop(stop),
129 .aclk(aclk),
130 .bclk(bclk)
131);
132
133cl_dp1_l1hdr_8x clk_hdr_data1 (
134 .l2clk(clk),
135 .pce (pce),
136 .l1clk(collar_clk[1]),
137 .siclk_out(siclk[1]),
138 .soclk_out(soclk[1]),
139 .se(se),
140 .pce_ov(pce_ov),
141 .stop(stop),
142 .aclk(aclk),
143 .bclk(bclk)
144);
145
146cl_dp1_l1hdr_8x scan_en_hdr (
147 .l2clk(clk),
148 .pce (pce),
149 .l1clk(and_clk),
150 .siclk_out(),
151 .soclk_out(),
152 .se(tcu_scan_en),
153 .pce_ov(pce_ov),
154 .stop(stop),
155 .aclk(aclk),
156 .bclk(bclk)
157);
158
159
160
161 //------------------------------------------------------------------------
162 // input flops
163 //------------------------------------------------------------------------
164wire [4:0] r_adr_r,rd_addr_so;
165wire [4:0] r_adr_w,wr_addr_so;
166wire [2:0] adr_bs_so;
167wire [2:0] dev_dout_sel;
168wire r_lkup_en;
169wire lkup_en_so;
170wire r_dev_rd,r_dev_wr;
171wire r_tsb_rd,r_tsb_wr;
172wire dev_rd_so,dev_wr_so;
173wire tsb_rd_so,tsb_wr_so;
174wire [63:0] r_din;
175wire [63:0] din_so;
176//reg [63:0] dout;
177wire [63:0] dout;
178
179wire [4:0] rd_addr_si;
180wire [4:0] wr_addr_si;
181wire [2:0] adr_bs_si;
182wire dev_rd_si;
183wire tsb_rd_si;
184wire dev_wr_si;
185wire tsb_wr_si;
186wire lkup_en_si;
187wire [63:0] din_si;
188
189
190cl_mc1_sram_msff_mo_8x rd_addr_so_4 ( .si(rd_addr_si[4]), .so(rd_addr_so[4]), .l1clk(collar_clk[0]),
191 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_r[4]), .mq(r_adr_r[4]), .and_clk(and_clk) );
192cl_mc1_sram_msff_mo_8x rd_addr_so_3 ( .si(rd_addr_si[3]), .so(rd_addr_so[3]), .l1clk(collar_clk[0]),
193 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_r[3]), .mq(r_adr_r[3]), .and_clk(and_clk) );
194cl_mc1_sram_msff_mo_8x rd_addr_so_2 ( .si(rd_addr_si[2]), .so(rd_addr_so[2]), .l1clk(collar_clk[0]),
195 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_r[2]), .mq(r_adr_r[2]), .and_clk(and_clk) );
196cl_mc1_sram_msff_mo_8x rd_addr_so_1 ( .si(rd_addr_si[1]), .so(rd_addr_so[1]), .l1clk(collar_clk[0]),
197 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_r[1]), .mq(r_adr_r[1]), .and_clk(and_clk) );
198cl_mc1_sram_msff_mo_8x rd_addr_so_0 ( .si(rd_addr_si[0]), .so(rd_addr_so[0]), .l1clk(collar_clk[0]),
199 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_r[0]), .mq(r_adr_r[0]), .and_clk(and_clk) );
200
201cl_mc1_sram_msff_mo_8x wr_addr_so_4 ( .si(wr_addr_si[4]), .so(wr_addr_so[4]), .l1clk(collar_clk[0]),
202 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_w[4]), .mq(r_adr_w[4]), .and_clk(and_clk) );
203cl_mc1_sram_msff_mo_8x wr_addr_so_3 ( .si(wr_addr_si[3]), .so(wr_addr_so[3]), .l1clk(collar_clk[0]),
204 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_w[3]), .mq(r_adr_w[3]), .and_clk(and_clk) );
205cl_mc1_sram_msff_mo_8x wr_addr_so_2 ( .si(wr_addr_si[2]), .so(wr_addr_so[2]), .l1clk(collar_clk[0]),
206 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_w[2]), .mq(r_adr_w[2]), .and_clk(and_clk) );
207cl_mc1_sram_msff_mo_8x wr_addr_so_1 ( .si(wr_addr_si[1]), .so(wr_addr_so[1]), .l1clk(collar_clk[0]),
208 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_w[1]), .mq(r_adr_w[1]), .and_clk(and_clk) );
209cl_mc1_sram_msff_mo_8x wr_addr_so_0 ( .si(wr_addr_si[0]), .so(wr_addr_so[0]), .l1clk(collar_clk[0]),
210 .siclk(siclk[0]), .soclk(soclk[0]), .d(adr_w[0]), .mq(r_adr_w[0]), .and_clk(and_clk) );
211
212cl_mc1_sram_msff_mo_8x adr_bs_so_2 ( .si(adr_bs_si[2]), .so(adr_bs_so[2]), .l1clk(collar_clk[0]), .siclk(siclk[0]),
213 .soclk(soclk[0]), .d(adr_bs[2]), .mq(dev_dout_sel[2]), .and_clk(and_clk) );
214cl_mc1_sram_msff_mo_8x adr_bs_so_1 ( .si(adr_bs_si[1]), .so(adr_bs_so[1]), .l1clk(collar_clk[0]), .siclk(siclk[0]),
215 .soclk(soclk[0]), .d(adr_bs[1]), .mq(dev_dout_sel[1]), .and_clk(and_clk) );
216cl_mc1_sram_msff_mo_8x adr_bs_so_0 ( .si(adr_bs_si[0]), .so(adr_bs_so[0]), .l1clk(collar_clk[0]), .siclk(siclk[0]),
217 .soclk(soclk[0]), .d(adr_bs[0]), .mq(dev_dout_sel[0]), .and_clk(and_clk) );
218
219cl_mc1_sram_msff_mo_8x dev_rd_so_ff ( .si(dev_rd_si), .so(dev_rd_so), .l1clk(collar_clk[0]), .siclk(siclk[0]), .soclk(soclk[0]),
220 .d(dev_rd), .mq(r_dev_rd), .and_clk(and_clk) );
221
222cl_mc1_sram_msff_mo_8x tsb_rd_so_ff ( .si(tsb_rd_si), .so(tsb_rd_so), .l1clk(collar_clk[0]), .siclk(siclk[0]), .soclk(soclk[0]),
223 .d(tsb_rd), .mq(r_tsb_rd), .and_clk(and_clk) );
224
225cl_mc1_sram_msff_mo_8x dev_wr_so_ff ( .si(dev_wr_si), .so(dev_wr_so), .l1clk(collar_clk[0]), .siclk(siclk[0]), .soclk(soclk[0]),
226 .d(dev_wr), .mq(r_dev_wr), .and_clk(and_clk) );
227
228cl_mc1_sram_msff_mo_8x tsb_wr_so_ff ( .si(tsb_wr_si), .so(tsb_wr_so), .l1clk(collar_clk[0]), .siclk(siclk[0]), .soclk(soclk[0]),
229 .d(tsb_wr), .mq(r_tsb_wr), .and_clk(and_clk) );
230
231cl_mc1_sram_msff_mo_8x lkup_en_ff ( .si(lkup_en_si), .so(lkup_en_so), .l1clk(collar_clk[0]), .siclk(siclk[0]), .soclk(soclk[0]),
232 .d(lkup_en), .mq(r_lkup_en), .and_clk(and_clk) );
233
234
235cl_sc1_msff_8x din_63 ( .si(din_si[63]), .so(din_so[63]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[63]), .q(r_din[63]) );
236cl_sc1_msff_8x din_62 ( .si(din_si[62]), .so(din_so[62]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[62]), .q(r_din[62]) );
237cl_sc1_msff_8x din_61 ( .si(din_si[61]), .so(din_so[61]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[61]), .q(r_din[61]) );
238cl_sc1_msff_8x din_60 ( .si(din_si[60]), .so(din_so[60]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[60]), .q(r_din[60]) );
239
240cl_sc1_msff_8x din_59 ( .si(din_si[59]), .so(din_so[59]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[59]), .q(r_din[59]) );
241cl_sc1_msff_8x din_58 ( .si(din_si[58]), .so(din_so[58]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[58]), .q(r_din[58]) );
242cl_sc1_msff_8x din_57 ( .si(din_si[57]), .so(din_so[57]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[57]), .q(r_din[57]) );
243cl_sc1_msff_8x din_56 ( .si(din_si[56]), .so(din_so[56]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[56]), .q(r_din[56]) );
244cl_sc1_msff_8x din_55 ( .si(din_si[55]), .so(din_so[55]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[55]), .q(r_din[55]) );
245cl_sc1_msff_8x din_54 ( .si(din_si[54]), .so(din_so[54]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[54]), .q(r_din[54]) );
246cl_sc1_msff_8x din_53 ( .si(din_si[53]), .so(din_so[53]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[53]), .q(r_din[53]) );
247cl_sc1_msff_8x din_52 ( .si(din_si[52]), .so(din_so[52]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[52]), .q(r_din[52]) );
248cl_sc1_msff_8x din_51 ( .si(din_si[51]), .so(din_so[51]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[51]), .q(r_din[51]) );
249cl_sc1_msff_8x din_50 ( .si(din_si[50]), .so(din_so[50]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[50]), .q(r_din[50]) );
250
251cl_sc1_msff_8x din_49 ( .si(din_si[49]), .so(din_so[49]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[49]), .q(r_din[49]) );
252cl_sc1_msff_8x din_48 ( .si(din_si[48]), .so(din_so[48]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[48]), .q(r_din[48]) );
253cl_sc1_msff_8x din_47 ( .si(din_si[47]), .so(din_so[47]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[47]), .q(r_din[47]) );
254cl_sc1_msff_8x din_46 ( .si(din_si[46]), .so(din_so[46]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[46]), .q(r_din[46]) );
255cl_sc1_msff_8x din_45 ( .si(din_si[45]), .so(din_so[45]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[45]), .q(r_din[45]) );
256cl_sc1_msff_8x din_44 ( .si(din_si[44]), .so(din_so[44]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[44]), .q(r_din[44]) );
257cl_sc1_msff_8x din_43 ( .si(din_si[43]), .so(din_so[43]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[43]), .q(r_din[43]) );
258cl_sc1_msff_8x din_42 ( .si(din_si[42]), .so(din_so[42]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[42]), .q(r_din[42]) );
259cl_sc1_msff_8x din_41 ( .si(din_si[41]), .so(din_so[41]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[41]), .q(r_din[41]) );
260cl_sc1_msff_8x din_40 ( .si(din_si[40]), .so(din_so[40]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[40]), .q(r_din[40]) );
261
262cl_sc1_msff_8x din_39 ( .si(din_si[39]), .so(din_so[39]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[39]), .q(r_din[39]) );
263cl_sc1_msff_8x din_38 ( .si(din_si[38]), .so(din_so[38]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[38]), .q(r_din[38]) );
264cl_sc1_msff_8x din_37 ( .si(din_si[37]), .so(din_so[37]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[37]), .q(r_din[37]) );
265cl_sc1_msff_8x din_36 ( .si(din_si[36]), .so(din_so[36]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[36]), .q(r_din[36]) );
266cl_sc1_msff_8x din_35 ( .si(din_si[35]), .so(din_so[35]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[35]), .q(r_din[35]) );
267cl_sc1_msff_8x din_34 ( .si(din_si[34]), .so(din_so[34]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[34]), .q(r_din[34]) );
268cl_sc1_msff_8x din_33 ( .si(din_si[33]), .so(din_so[33]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[33]), .q(r_din[33]) );
269cl_sc1_msff_8x din_32 ( .si(din_si[32]), .so(din_so[32]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[32]), .q(r_din[32]) );
270cl_sc1_msff_8x din_31 ( .si(din_si[31]), .so(din_so[31]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[31]), .q(r_din[31]) );
271cl_sc1_msff_8x din_30 ( .si(din_si[30]), .so(din_so[30]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[30]), .q(r_din[30]) );
272
273cl_sc1_msff_8x din_29 ( .si(din_si[29]), .so(din_so[29]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[29]), .q(r_din[29]) );
274cl_sc1_msff_8x din_28 ( .si(din_si[28]), .so(din_so[28]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[28]), .q(r_din[28]) );
275cl_sc1_msff_8x din_27 ( .si(din_si[27]), .so(din_so[27]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[27]), .q(r_din[27]) );
276cl_sc1_msff_8x din_26 ( .si(din_si[26]), .so(din_so[26]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[26]), .q(r_din[26]) );
277cl_sc1_msff_8x din_25 ( .si(din_si[25]), .so(din_so[25]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[25]), .q(r_din[25]) );
278cl_sc1_msff_8x din_24 ( .si(din_si[24]), .so(din_so[24]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[24]), .q(r_din[24]) );
279cl_sc1_msff_8x din_23 ( .si(din_si[23]), .so(din_so[23]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[23]), .q(r_din[23]) );
280cl_sc1_msff_8x din_22 ( .si(din_si[22]), .so(din_so[22]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[22]), .q(r_din[22]) );
281cl_sc1_msff_8x din_21 ( .si(din_si[21]), .so(din_so[21]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[21]), .q(r_din[21]) );
282cl_sc1_msff_8x din_20 ( .si(din_si[20]), .so(din_so[20]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[20]), .q(r_din[20]) );
283
284cl_sc1_msff_8x din_19 ( .si(din_si[19]), .so(din_so[19]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[19]), .q(r_din[19]) );
285cl_sc1_msff_8x din_18 ( .si(din_si[18]), .so(din_so[18]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[18]), .q(r_din[18]) );
286cl_sc1_msff_8x din_17 ( .si(din_si[17]), .so(din_so[17]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[17]), .q(r_din[17]) );
287cl_sc1_msff_8x din_16 ( .si(din_si[16]), .so(din_so[16]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[16]), .q(r_din[16]) );
288cl_sc1_msff_8x din_15 ( .si(din_si[15]), .so(din_so[15]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[15]), .q(r_din[15]) );
289cl_sc1_msff_8x din_14 ( .si(din_si[14]), .so(din_so[14]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[14]), .q(r_din[14]) );
290cl_sc1_msff_8x din_13 ( .si(din_si[13]), .so(din_so[13]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[13]), .q(r_din[13]) );
291cl_sc1_msff_8x din_12 ( .si(din_si[12]), .so(din_so[12]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[12]), .q(r_din[12]) );
292cl_sc1_msff_8x din_11 ( .si(din_si[11]), .so(din_so[11]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[11]), .q(r_din[11]) );
293cl_sc1_msff_8x din_10 ( .si(din_si[10]), .so(din_so[10]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[10]), .q(r_din[10]) );
294
295cl_sc1_msff_8x din_9 ( .si(din_si[9]), .so(din_so[9]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[9]), .q(r_din[9]) );
296cl_sc1_msff_8x din_8 ( .si(din_si[8]), .so(din_so[8]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[8]), .q(r_din[8]) );
297cl_sc1_msff_8x din_7 ( .si(din_si[7]), .so(din_so[7]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[7]), .q(r_din[7]) );
298cl_sc1_msff_8x din_6 ( .si(din_si[6]), .so(din_so[6]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[6]), .q(r_din[6]) );
299cl_sc1_msff_8x din_5 ( .si(din_si[5]), .so(din_so[5]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[5]), .q(r_din[5]) );
300cl_sc1_msff_8x din_4 ( .si(din_si[4]), .so(din_so[4]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[4]), .q(r_din[4]) );
301cl_sc1_msff_8x din_3 ( .si(din_si[3]), .so(din_so[3]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[3]), .q(r_din[3]) );
302cl_sc1_msff_8x din_2 ( .si(din_si[2]), .so(din_so[2]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[2]), .q(r_din[2]) );
303cl_sc1_msff_8x din_1 ( .si(din_si[1]), .so(din_so[1]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[1]), .q(r_din[1]) );
304cl_sc1_msff_8x din_0 ( .si(din_si[0]), .so(din_so[0]), .l1clk(collar_clk[1]), .siclk(siclk[1]), .soclk(soclk[1]), .d(din[0]), .q(r_din[0]) );
305
306// scan chain is being stitched here with assign statement: Uttam 03/29/05
307// scan chain is being re-stitched here with assign statement: Uttam 09/07/05
308// Left array
309
310assign din_si[32]=scan_in;
311assign din_si[33]=din_so[32];
312assign din_si[34]=din_so[33];
313assign din_si[35]=din_so[34];
314assign din_si[36]=din_so[35];
315assign din_si[37]=din_so[36];
316assign din_si[38]=din_so[37];
317assign din_si[39]=din_so[38];
318assign din_si[40]=din_so[39];
319assign din_si[41]=din_so[40];
320assign din_si[42]=din_so[41];
321assign din_si[43]=din_so[42];
322assign din_si[44]=din_so[43];
323assign din_si[45]=din_so[44];
324assign din_si[46]=din_so[45];
325assign din_si[47]=din_so[46];
326assign din_si[48]=din_so[47];
327assign din_si[49]=din_so[48];
328assign din_si[50]=din_so[49];
329assign din_si[51]=din_so[50];
330assign din_si[52]=din_so[51];
331assign din_si[53]=din_so[52];
332assign din_si[54]=din_so[53];
333assign din_si[55]=din_so[54];
334assign din_si[56]=din_so[55];
335assign din_si[57]=din_so[56];
336assign din_si[58]=din_so[57];
337assign din_si[59]=din_so[58];
338assign din_si[60]=din_so[59];
339assign din_si[61]=din_so[60];
340assign din_si[62]=din_so[61];
341assign din_si[63]=din_so[62];
342
343// Decoder
344
345assign tsb_wr_si=din_so[63];
346assign tsb_rd_si=tsb_wr_so;
347assign lkup_en_si=tsb_rd_so;
348assign rd_addr_si[4]=lkup_en_so;
349assign rd_addr_si[3]=rd_addr_so[4];
350assign wr_addr_si[4]=rd_addr_so[3];
351assign wr_addr_si[3]=wr_addr_so[4];
352assign rd_addr_si[2]=wr_addr_so[3];
353assign rd_addr_si[1]=rd_addr_so[2];
354assign wr_addr_si[2]=rd_addr_so[1];
355assign wr_addr_si[1]=wr_addr_so[2];
356assign rd_addr_si[0]=wr_addr_so[1];
357assign dev_wr_si=rd_addr_so[0];
358assign wr_addr_si[0]=dev_wr_so;
359assign dev_rd_si=wr_addr_so[0];
360assign adr_bs_si[2]=dev_rd_so;
361assign adr_bs_si[1]=adr_bs_so[2];
362assign adr_bs_si[0]=adr_bs_so[1];
363
364
365// Right array
366
367assign din_si[0]=adr_bs_so[0];
368assign din_si[1]=din_so[0];
369assign din_si[2]=din_so[1];
370assign din_si[3]=din_so[2];
371assign din_si[4]=din_so[3];
372assign din_si[5]=din_so[4];
373assign din_si[6]=din_so[5];
374assign din_si[7]=din_so[6];
375assign din_si[8]=din_so[7];
376assign din_si[9]=din_so[8];
377assign din_si[10]=din_so[9];
378assign din_si[11]=din_so[10];
379assign din_si[12]=din_so[11];
380assign din_si[13]=din_so[12];
381assign din_si[14]=din_so[13];
382assign din_si[15]=din_so[14];
383assign din_si[16]=din_so[15];
384assign din_si[17]=din_so[16];
385assign din_si[18]=din_so[17];
386assign din_si[19]=din_so[18];
387assign din_si[20]=din_so[19];
388assign din_si[21]=din_so[20];
389assign din_si[22]=din_so[21];
390assign din_si[23]=din_so[22];
391assign din_si[24]=din_so[23];
392assign din_si[25]=din_so[24];
393assign din_si[26]=din_so[25];
394assign din_si[27]=din_so[26];
395assign din_si[28]=din_so[27];
396assign din_si[29]=din_so[28];
397assign din_si[30]=din_so[29];
398assign din_si[31]=din_so[30];
399assign scan_out=din_so[31];
400
401// end of scan chain connection uttam 03/29/05
402
403
404//wire r_d_rd,r_d_wr;
405//assign r_d_rd = !wr_inhibit && !r_dev_wr && r_dev_rd;
406//assign r_d_wr = !wr_inhibit && r_dev_wr;
407
408wire x1_,x2_,x3,r_d_rd, r_d_wr;
409not rd2 (x1_,wr_inhibit);
410not rd3 (x2_,r_dev_wr);
411and rd1 (x3,x2_,x1_);
412and rd4 (r_d_rd,x3,r_dev_rd);
413
414and wr1 (r_d_wr,x1_,r_dev_wr);
415
416 //------------------------------------------------------------------------
417 // instantiate the clock-less ram
418 //------------------------------------------------------------------------
419wire [63:0] dev_dout;
420wire [63:0] tsb_dout;
421
422n2_iom_sp_1024b_cust iommu_dev_ram (
423 .clk (and_clk),
424 .adr_r (r_adr_r[3:0]),
425 .adr_w (r_adr_w[3:0]),
426 .rd (r_d_rd),
427 .wr (r_d_wr),
428 .din (r_din),
429 .dout (dev_dout)
430 );
431
432
433// assign bypass_dout[63:0] = r_din[63:0];
434
435wire [4:0] sel_dev_dout;
436//always @(dev_dout_sel or dev_dout)
437// begin
438// case(dev_dout_sel)
439// 3'b000 : sel_dev_dout = dev_dout[4:0];
440// 3'b001 : sel_dev_dout = dev_dout[12:8];
441// 3'b010 : sel_dev_dout = dev_dout[20:16];
442// 3'b011 : sel_dev_dout = dev_dout[28:24];
443// 3'b100 : sel_dev_dout = dev_dout[36:32];
444// 3'b101 : sel_dev_dout = dev_dout[44:40];
445// 3'b110 : sel_dev_dout = dev_dout[52:48];
446// 3'b111 : sel_dev_dout = dev_dout[60:56];
447// default : sel_dev_dout = 5'bxxxx;
448// endcase
449// end
450wire [7:0] sel;
451wire dev_dout_sel_2_,dev_dout_sel_1_,dev_dout_sel_0_;
452wire f_2_f_1,f_2_t_1,t_2_f_1,t_2_t_1;
453not case_sel_0 (dev_dout_sel_2_,dev_dout_sel[2]);
454not case_sel_1 (dev_dout_sel_1_,dev_dout_sel[1]);
455not case_sel_2 (dev_dout_sel_0_,dev_dout_sel[0]);
456and case_sel_3 (f_2_f_1,dev_dout_sel_2_,dev_dout_sel_1_);
457and case_sel_4 (sel[0],f_2_f_1,dev_dout_sel_0_);
458and case_sel_5 (sel[1],f_2_f_1,dev_dout_sel[0]);
459and case_sel_6 (f_2_t_1,dev_dout_sel_2_,dev_dout_sel[1]);
460and case_sel_7 (sel[2],f_2_t_1,dev_dout_sel_0_);
461and case_sel_8 (sel[3],f_2_t_1,dev_dout_sel[0]);
462and case_sel_9 (t_2_f_1,dev_dout_sel[2],dev_dout_sel_1_);
463and case_sel_10 (sel[4],t_2_f_1,dev_dout_sel_0_);
464and case_sel_11 (sel[5],t_2_f_1,dev_dout_sel[0]);
465and case_sel_12 (t_2_t_1,dev_dout_sel[2],dev_dout_sel[1]);
466and case_sel_13 (sel[6],t_2_t_1,dev_dout_sel_0_);
467and case_sel_14 (sel[7],t_2_t_1,dev_dout_sel[0]);
468cl_a1_aomux8_4x sel_dev_dout_mux_0 ( .out(sel_dev_dout[0]) ,
469 .sel0(sel[0]), .sel1(sel[1]), .in0(dev_dout[0]), .in1(dev_dout[8]),
470 .sel2(sel[2]), .sel3(sel[3]), .in2(dev_dout[16]), .in3(dev_dout[24]),
471 .sel4(sel[4]), .sel5(sel[5]), .in4(dev_dout[32]), .in5(dev_dout[40]),
472 .sel6(sel[6]), .sel7(sel[7]), .in6(dev_dout[48]), .in7(dev_dout[56]) );
473cl_a1_aomux8_4x sel_dev_dout_mux_1 ( .out(sel_dev_dout[1]) ,
474 .sel0(sel[0]), .sel1(sel[1]), .in0(dev_dout[1]), .in1(dev_dout[9]),
475 .sel2(sel[2]), .sel3(sel[3]), .in2(dev_dout[17]), .in3(dev_dout[25]),
476 .sel4(sel[4]), .sel5(sel[5]), .in4(dev_dout[33]), .in5(dev_dout[41]),
477 .sel6(sel[6]), .sel7(sel[7]), .in6(dev_dout[49]), .in7(dev_dout[57]) );
478cl_a1_aomux8_4x sel_dev_dout_mux_2 ( .out(sel_dev_dout[2]) ,
479 .sel0(sel[0]), .sel1(sel[1]), .in0(dev_dout[2]), .in1(dev_dout[10]),
480 .sel2(sel[2]), .sel3(sel[3]), .in2(dev_dout[18]), .in3(dev_dout[26]),
481 .sel4(sel[4]), .sel5(sel[5]), .in4(dev_dout[34]), .in5(dev_dout[42]),
482 .sel6(sel[6]), .sel7(sel[7]), .in6(dev_dout[50]), .in7(dev_dout[58]) );
483cl_a1_aomux8_4x sel_dev_dout_mux_3 ( .out(sel_dev_dout[3]) ,
484 .sel0(sel[0]), .sel1(sel[1]), .in0(dev_dout[3]), .in1(dev_dout[11]),
485 .sel2(sel[2]), .sel3(sel[3]), .in2(dev_dout[19]), .in3(dev_dout[27]),
486 .sel4(sel[4]), .sel5(sel[5]), .in4(dev_dout[35]), .in5(dev_dout[43]),
487 .sel6(sel[6]), .sel7(sel[7]), .in6(dev_dout[51]), .in7(dev_dout[59]) );
488cl_a1_aomux8_4x sel_dev_dout_mux_4 ( .out(sel_dev_dout[4]) ,
489 .sel0(sel[0]), .sel1(sel[1]), .in0(dev_dout[4]), .in1(dev_dout[12]),
490 .sel2(sel[2]), .sel3(sel[3]), .in2(dev_dout[20]), .in3(dev_dout[28]),
491 .sel4(sel[4]), .sel5(sel[5]), .in4(dev_dout[36]), .in5(dev_dout[44]),
492 .sel6(sel[6]), .sel7(sel[7]), .in6(dev_dout[52]), .in7(dev_dout[60]) );
493
494// assign sel_dev_dout = ((dev_dout_sel == 3'b000) ? dev_dout[4:0] :
495// (dev_dout_sel == 3'b001) ? dev_dout[12:8] :
496// (dev_dout_sel == 3'b010) ? dev_dout[20:16] :
497// (dev_dout_sel == 3'b011) ? dev_dout[28:24] :
498// (dev_dout_sel == 3'b100) ? dev_dout[36:32] :
499// (dev_dout_sel == 3'b101) ? dev_dout[44:40] :
500// (dev_dout_sel == 3'b110) ? dev_dout[52:48] :
501// (dev_dout_sel == 3'b111) ? dev_dout[60:56] : 4'bxxxx );
502
503wire r_t_rd,r_t_wr;
504wire [4:0] rd_and_r_adr,tsb_adr_r,tsb_ram_adr_r,rd_wr_adr;
505wire r_tsb_wr_,wr_inhibit_,y0,r_lkup_en_;
506
507//assign tsb_read_addr = r_lkup_en ? sel_dev_dout : r_adr_r ;
508//assign tsb_adr_r = r_tsb_wr ? r_adr_w : tsb_read_addr;
509//BP 9-27-06 eco 119647changes below for TO 2.0 to make rtl match schematic because of atpg mismatches
510not r_lkup_en_0 (r_lkup_en_,r_lkup_en);
511and rd_and_addr_4_g (rd_and_r_adr[4], r_adr_r[4],r_tsb_rd);
512and rd_and_addr_3_g (rd_and_r_adr[3], r_adr_r[3],r_tsb_rd);
513and rd_and_addr_2_g (rd_and_r_adr[2], r_adr_r[2],r_tsb_rd);
514and rd_and_addr_1_g (rd_and_r_adr[1], r_adr_r[1],r_tsb_rd);
515and rd_and_addr_0_g (rd_and_r_adr[0], r_adr_r[0],r_tsb_rd);
516cl_a1_aomux2_4x rd_addr_mux_4 ( .sel0(r_lkup_en), .sel1(r_lkup_en_), .in0(sel_dev_dout[4]), .in1(rd_wr_adr[4]), .out(tsb_ram_adr_r[4]) );
517cl_a1_aomux2_4x rd_addr_mux_3 ( .sel0(r_lkup_en), .sel1(r_lkup_en_), .in0(sel_dev_dout[3]), .in1(rd_wr_adr[3]), .out(tsb_ram_adr_r[3]) );
518cl_a1_aomux2_4x rd_addr_mux_2 ( .sel0(r_lkup_en), .sel1(r_lkup_en_), .in0(sel_dev_dout[2]), .in1(rd_wr_adr[2]), .out(tsb_ram_adr_r[2]) );
519cl_a1_aomux2_4x rd_addr_mux_1 ( .sel0(r_lkup_en), .sel1(r_lkup_en_), .in0(sel_dev_dout[1]), .in1(rd_wr_adr[1]), .out(tsb_ram_adr_r[1]) );
520cl_a1_aomux2_4x rd_addr_mux_0 ( .sel0(r_lkup_en), .sel1(r_lkup_en_), .in0(sel_dev_dout[0]), .in1(rd_wr_adr[0]), .out(tsb_ram_adr_r[0]) );
521cl_a1_aomux2_4x tsb_adr_r_mux_4 ( .sel0(r_tsb_wr), .sel1(r_tsb_wr_), .in0(r_adr_w[4]), .in1(rd_and_r_adr[4]), .out(rd_wr_adr[4]) );
522cl_a1_aomux2_4x tsb_adr_r_mux_3 ( .sel0(r_tsb_wr), .sel1(r_tsb_wr_), .in0(r_adr_w[3]), .in1(rd_and_r_adr[3]), .out(rd_wr_adr[3]) );
523cl_a1_aomux2_4x tsb_adr_r_mux_2 ( .sel0(r_tsb_wr), .sel1(r_tsb_wr_), .in0(r_adr_w[2]), .in1(rd_and_r_adr[2]), .out(rd_wr_adr[2]) );
524cl_a1_aomux2_4x tsb_adr_r_mux_1 ( .sel0(r_tsb_wr), .sel1(r_tsb_wr_), .in0(r_adr_w[1]), .in1(rd_and_r_adr[1]), .out(rd_wr_adr[1]) );
525cl_a1_aomux2_4x tsb_adr_r_mux_0 ( .sel0(r_tsb_wr), .sel1(r_tsb_wr_), .in0(r_adr_w[0]), .in1(rd_and_r_adr[0]), .out(rd_wr_adr[0]) );
526
527//BP 4-12-05 need latch to hold tsb_ram_adr_r because the new mo latch causes latched inputs to go to 0 during ~clk
528cl_mc1_tisram_blb_4x tsb_adr_r_o_4 ( .l1clk(~and_clk), .d_a(tsb_ram_adr_r[4]), .q_b(tsb_adr_r[4]) );
529cl_mc1_tisram_blb_4x tsb_adr_r_o_3 ( .l1clk(~and_clk), .d_a(tsb_ram_adr_r[3]), .q_b(tsb_adr_r[3]) );
530cl_mc1_tisram_blb_4x tsb_adr_r_o_2 ( .l1clk(~and_clk), .d_a(tsb_ram_adr_r[2]), .q_b(tsb_adr_r[2]) );
531cl_mc1_tisram_blb_4x tsb_adr_r_o_1 ( .l1clk(~and_clk), .d_a(tsb_ram_adr_r[1]), .q_b(tsb_adr_r[1]) );
532cl_mc1_tisram_blb_4x tsb_adr_r_o_0 ( .l1clk(~and_clk), .d_a(tsb_ram_adr_r[0]), .q_b(tsb_adr_r[0]) );
533
534//assign r_t_rd = !wr_inhibit && !r_tsb_wr && r_tsb_rd;
535//assign r_t_wr = !wr_inhibit && r_tsb_wr;
536
537not tsb_0 (wr_inhibit_,wr_inhibit);
538not tsb_1 (r_tsb_wr_,r_tsb_wr);
539and tsb_2 (y0,wr_inhibit_,r_tsb_wr_);
540and tsb_3 (r_t_rd,y0,r_tsb_rd);
541and tsb_4 (r_t_wr,wr_inhibit_,r_tsb_wr);
542
543n2_iom_sp_2048b_cust iommu_tsb_ram (
544 .clk (and_clk),
545 .adr_r (tsb_ram_adr_r),
546 // .adr_w (r_adr_w),
547 .adr_w (tsb_ram_adr_r),
548 .rd (r_t_rd),
549 .wr (r_t_wr),
550 .din (r_din),
551 .dout (tsb_dout),
552 .efu_bits (efu_bits[3:0])
553 );
554
555
556// wire [63:0] dout_array;
557//always @(clk or r_t_rd or tsb_dout or dev_dout or r_d_rd or r_tsb_rd ) begin
558//
559// if (clk) begin
560// if (r_t_rd & r_tsb_rd) begin
561// dout[63:0] = tsb_dout;
562// end
563// else if (r_d_rd & ~r_tsb_rd) begin
564// dout[63:0] = dev_dout;
565// end
566// end
567//end
568wire [63:0] mux_dout;
569wire r_tsb_rd_,tsb_sel_,tsb_sel,dev_sel_,dev_sel;
570
571cl_a1_inv_4x mux_sel_4 ( .out(r_tsb_rd_), .in(r_tsb_rd) );
572//cl_a1_nand2_4x mux_sel_0 ( .out(tsb_sel_), .in0(r_t_rd), .in1(r_tsb_rd) );
573cl_a1_nand2_4x mux_sel_0 ( .out(tsb_sel_), .in0(wr_inhibit_), .in1(r_tsb_rd) );
574cl_a1_inv_4x mux_sel_1 ( .out(tsb_sel), .in(tsb_sel_) );
575//cl_a1_nand2_4x mux_sel_2 ( .out(dev_sel_), .in0(r_d_rd), .in1(r_tsb_rd_) );
576cl_a1_nand2_4x mux_sel_2 ( .out(dev_sel_), .in0(wr_inhibit_), .in1(r_tsb_rd_) );
577cl_a1_inv_4x mux_sel_3 ( .out(dev_sel), .in(dev_sel_) );
578
579cl_a1_aomux2_4x mux_dout_63 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[63]), .in1(dev_dout[63]), .out(mux_dout[63]) );
580cl_a1_aomux2_4x mux_dout_62 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[62]), .in1(dev_dout[62]), .out(mux_dout[62]) );
581cl_a1_aomux2_4x mux_dout_61 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[61]), .in1(dev_dout[61]), .out(mux_dout[61]) );
582cl_a1_aomux2_4x mux_dout_60 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[60]), .in1(dev_dout[60]), .out(mux_dout[60]) );
583
584cl_a1_aomux2_4x mux_dout_59 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[59]), .in1(dev_dout[59]), .out(mux_dout[59]) );
585cl_a1_aomux2_4x mux_dout_58 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[58]), .in1(dev_dout[58]), .out(mux_dout[58]) );
586cl_a1_aomux2_4x mux_dout_57 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[57]), .in1(dev_dout[57]), .out(mux_dout[57]) );
587cl_a1_aomux2_4x mux_dout_56 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[56]), .in1(dev_dout[56]), .out(mux_dout[56]) );
588cl_a1_aomux2_4x mux_dout_55 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[55]), .in1(dev_dout[55]), .out(mux_dout[55]) );
589cl_a1_aomux2_4x mux_dout_54 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[54]), .in1(dev_dout[54]), .out(mux_dout[54]) );
590cl_a1_aomux2_4x mux_dout_53 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[53]), .in1(dev_dout[53]), .out(mux_dout[53]) );
591cl_a1_aomux2_4x mux_dout_52 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[52]), .in1(dev_dout[52]), .out(mux_dout[52]) );
592cl_a1_aomux2_4x mux_dout_51 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[51]), .in1(dev_dout[51]), .out(mux_dout[51]) );
593cl_a1_aomux2_4x mux_dout_50 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[50]), .in1(dev_dout[50]), .out(mux_dout[50]) );
594
595cl_a1_aomux2_4x mux_dout_49 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[49]), .in1(dev_dout[49]), .out(mux_dout[49]) );
596cl_a1_aomux2_4x mux_dout_48 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[48]), .in1(dev_dout[48]), .out(mux_dout[48]) );
597cl_a1_aomux2_4x mux_dout_47 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[47]), .in1(dev_dout[47]), .out(mux_dout[47]) );
598cl_a1_aomux2_4x mux_dout_46 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[46]), .in1(dev_dout[46]), .out(mux_dout[46]) );
599cl_a1_aomux2_4x mux_dout_45 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[45]), .in1(dev_dout[45]), .out(mux_dout[45]) );
600cl_a1_aomux2_4x mux_dout_44 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[44]), .in1(dev_dout[44]), .out(mux_dout[44]) );
601cl_a1_aomux2_4x mux_dout_43 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[43]), .in1(dev_dout[43]), .out(mux_dout[43]) );
602cl_a1_aomux2_4x mux_dout_42 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[42]), .in1(dev_dout[42]), .out(mux_dout[42]) );
603cl_a1_aomux2_4x mux_dout_41 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[41]), .in1(dev_dout[41]), .out(mux_dout[41]) );
604cl_a1_aomux2_4x mux_dout_40 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[40]), .in1(dev_dout[40]), .out(mux_dout[40]) );
605
606cl_a1_aomux2_4x mux_dout_39 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[39]), .in1(dev_dout[39]), .out(mux_dout[39]) );
607cl_a1_aomux2_4x mux_dout_38 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[38]), .in1(dev_dout[38]), .out(mux_dout[38]) );
608cl_a1_aomux2_4x mux_dout_37 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[37]), .in1(dev_dout[37]), .out(mux_dout[37]) );
609cl_a1_aomux2_4x mux_dout_36 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[36]), .in1(dev_dout[36]), .out(mux_dout[36]) );
610cl_a1_aomux2_4x mux_dout_35 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[35]), .in1(dev_dout[35]), .out(mux_dout[35]) );
611cl_a1_aomux2_4x mux_dout_34 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[34]), .in1(dev_dout[34]), .out(mux_dout[34]) );
612cl_a1_aomux2_4x mux_dout_33 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[33]), .in1(dev_dout[33]), .out(mux_dout[33]) );
613cl_a1_aomux2_4x mux_dout_32 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[32]), .in1(dev_dout[32]), .out(mux_dout[32]) );
614cl_a1_aomux2_4x mux_dout_31 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[31]), .in1(dev_dout[31]), .out(mux_dout[31]) );
615cl_a1_aomux2_4x mux_dout_30 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[30]), .in1(dev_dout[30]), .out(mux_dout[30]) );
616
617cl_a1_aomux2_4x mux_dout_29 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[29]), .in1(dev_dout[29]), .out(mux_dout[29]) );
618cl_a1_aomux2_4x mux_dout_28 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[28]), .in1(dev_dout[28]), .out(mux_dout[28]) );
619cl_a1_aomux2_4x mux_dout_27 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[27]), .in1(dev_dout[27]), .out(mux_dout[27]) );
620cl_a1_aomux2_4x mux_dout_26 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[26]), .in1(dev_dout[26]), .out(mux_dout[26]) );
621cl_a1_aomux2_4x mux_dout_25 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[25]), .in1(dev_dout[25]), .out(mux_dout[25]) );
622cl_a1_aomux2_4x mux_dout_24 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[24]), .in1(dev_dout[24]), .out(mux_dout[24]) );
623cl_a1_aomux2_4x mux_dout_23 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[23]), .in1(dev_dout[23]), .out(mux_dout[23]) );
624cl_a1_aomux2_4x mux_dout_22 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[22]), .in1(dev_dout[22]), .out(mux_dout[22]) );
625cl_a1_aomux2_4x mux_dout_21 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[21]), .in1(dev_dout[21]), .out(mux_dout[21]) );
626cl_a1_aomux2_4x mux_dout_20 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[20]), .in1(dev_dout[20]), .out(mux_dout[20]) );
627
628cl_a1_aomux2_4x mux_dout_19 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[19]), .in1(dev_dout[19]), .out(mux_dout[19]) );
629cl_a1_aomux2_4x mux_dout_18 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[18]), .in1(dev_dout[18]), .out(mux_dout[18]) );
630cl_a1_aomux2_4x mux_dout_17 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[17]), .in1(dev_dout[17]), .out(mux_dout[17]) );
631cl_a1_aomux2_4x mux_dout_16 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[16]), .in1(dev_dout[16]), .out(mux_dout[16]) );
632cl_a1_aomux2_4x mux_dout_15 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[15]), .in1(dev_dout[15]), .out(mux_dout[15]) );
633cl_a1_aomux2_4x mux_dout_14 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[14]), .in1(dev_dout[14]), .out(mux_dout[14]) );
634cl_a1_aomux2_4x mux_dout_13 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[13]), .in1(dev_dout[13]), .out(mux_dout[13]) );
635cl_a1_aomux2_4x mux_dout_12 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[12]), .in1(dev_dout[12]), .out(mux_dout[12]) );
636cl_a1_aomux2_4x mux_dout_11 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[11]), .in1(dev_dout[11]), .out(mux_dout[11]) );
637cl_a1_aomux2_4x mux_dout_10 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[10]), .in1(dev_dout[10]), .out(mux_dout[10]) );
638
639cl_a1_aomux2_4x mux_dout_9 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[9]), .in1(dev_dout[9]), .out(mux_dout[9]) );
640cl_a1_aomux2_4x mux_dout_8 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[8]), .in1(dev_dout[8]), .out(mux_dout[8]) );
641cl_a1_aomux2_4x mux_dout_7 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[7]), .in1(dev_dout[7]), .out(mux_dout[7]) );
642cl_a1_aomux2_4x mux_dout_6 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[6]), .in1(dev_dout[6]), .out(mux_dout[6]) );
643cl_a1_aomux2_4x mux_dout_5 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[5]), .in1(dev_dout[5]), .out(mux_dout[5]) );
644cl_a1_aomux2_4x mux_dout_4 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[4]), .in1(dev_dout[4]), .out(mux_dout[4]) );
645cl_a1_aomux2_4x mux_dout_3 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[3]), .in1(dev_dout[3]), .out(mux_dout[3]) );
646cl_a1_aomux2_4x mux_dout_2 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[2]), .in1(dev_dout[2]), .out(mux_dout[2]) );
647cl_a1_aomux2_4x mux_dout_1 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[1]), .in1(dev_dout[1]), .out(mux_dout[1]) );
648cl_a1_aomux2_4x mux_dout_0 ( .sel0(tsb_sel), .sel1(dev_sel), .in0(tsb_dout[0]), .in1(dev_dout[0]), .out(mux_dout[0]) );
649
650wire latch_clk;
651//assign latch_clk = ~(clk & ( r_t_rd | r_d_rd));
652wire rd_;
653cl_a1_nor2_4x latch_0 ( .out(rd_), .in0(r_tsb_rd), .in1(r_dev_rd) );
654cl_a1_inv_4x latch_1 ( .out(rd), .in(rd_) );
655//BP eco119647 latch_2 ( .out(latch_clk), .in0(rd), .in1(and_clk) );
656cl_a1_nand3_4x latch_2 ( .out(latch_clk), .in0(rd), .in1(and_clk), .in2(wr_inhibit_) );
657
658cl_mc1_tisram_blb_4x dout_63 ( .l1clk(latch_clk), .d_a(mux_dout[63]), .q_b(dout[63]) );
659cl_mc1_tisram_blb_4x dout_62 ( .l1clk(latch_clk), .d_a(mux_dout[62]), .q_b(dout[62]) );
660cl_mc1_tisram_blb_4x dout_61 ( .l1clk(latch_clk), .d_a(mux_dout[61]), .q_b(dout[61]) );
661cl_mc1_tisram_blb_4x dout_60 ( .l1clk(latch_clk), .d_a(mux_dout[60]), .q_b(dout[60]) );
662
663cl_mc1_tisram_blb_4x dout_59 ( .l1clk(latch_clk), .d_a(mux_dout[59]), .q_b(dout[59]) );
664cl_mc1_tisram_blb_4x dout_58 ( .l1clk(latch_clk), .d_a(mux_dout[58]), .q_b(dout[58]) );
665cl_mc1_tisram_blb_4x dout_57 ( .l1clk(latch_clk), .d_a(mux_dout[57]), .q_b(dout[57]) );
666cl_mc1_tisram_blb_4x dout_56 ( .l1clk(latch_clk), .d_a(mux_dout[56]), .q_b(dout[56]) );
667cl_mc1_tisram_blb_4x dout_55 ( .l1clk(latch_clk), .d_a(mux_dout[55]), .q_b(dout[55]) );
668cl_mc1_tisram_blb_4x dout_54 ( .l1clk(latch_clk), .d_a(mux_dout[54]), .q_b(dout[54]) );
669cl_mc1_tisram_blb_4x dout_53 ( .l1clk(latch_clk), .d_a(mux_dout[53]), .q_b(dout[53]) );
670cl_mc1_tisram_blb_4x dout_52 ( .l1clk(latch_clk), .d_a(mux_dout[52]), .q_b(dout[52]) );
671cl_mc1_tisram_blb_4x dout_51 ( .l1clk(latch_clk), .d_a(mux_dout[51]), .q_b(dout[51]) );
672cl_mc1_tisram_blb_4x dout_50 ( .l1clk(latch_clk), .d_a(mux_dout[50]), .q_b(dout[50]) );
673
674cl_mc1_tisram_blb_4x dout_49 ( .l1clk(latch_clk), .d_a(mux_dout[49]), .q_b(dout[49]) );
675cl_mc1_tisram_blb_4x dout_48 ( .l1clk(latch_clk), .d_a(mux_dout[48]), .q_b(dout[48]) );
676cl_mc1_tisram_blb_4x dout_47 ( .l1clk(latch_clk), .d_a(mux_dout[47]), .q_b(dout[47]) );
677cl_mc1_tisram_blb_4x dout_46 ( .l1clk(latch_clk), .d_a(mux_dout[46]), .q_b(dout[46]) );
678cl_mc1_tisram_blb_4x dout_45 ( .l1clk(latch_clk), .d_a(mux_dout[45]), .q_b(dout[45]) );
679cl_mc1_tisram_blb_4x dout_44 ( .l1clk(latch_clk), .d_a(mux_dout[44]), .q_b(dout[44]) );
680cl_mc1_tisram_blb_4x dout_43 ( .l1clk(latch_clk), .d_a(mux_dout[43]), .q_b(dout[43]) );
681cl_mc1_tisram_blb_4x dout_42 ( .l1clk(latch_clk), .d_a(mux_dout[42]), .q_b(dout[42]) );
682cl_mc1_tisram_blb_4x dout_41 ( .l1clk(latch_clk), .d_a(mux_dout[41]), .q_b(dout[41]) );
683cl_mc1_tisram_blb_4x dout_40 ( .l1clk(latch_clk), .d_a(mux_dout[40]), .q_b(dout[40]) );
684
685cl_mc1_tisram_blb_4x dout_39 ( .l1clk(latch_clk), .d_a(mux_dout[39]), .q_b(dout[39]) );
686cl_mc1_tisram_blb_4x dout_38 ( .l1clk(latch_clk), .d_a(mux_dout[38]), .q_b(dout[38]) );
687cl_mc1_tisram_blb_4x dout_37 ( .l1clk(latch_clk), .d_a(mux_dout[37]), .q_b(dout[37]) );
688cl_mc1_tisram_blb_4x dout_36 ( .l1clk(latch_clk), .d_a(mux_dout[36]), .q_b(dout[36]) );
689cl_mc1_tisram_blb_4x dout_35 ( .l1clk(latch_clk), .d_a(mux_dout[35]), .q_b(dout[35]) );
690cl_mc1_tisram_blb_4x dout_34 ( .l1clk(latch_clk), .d_a(mux_dout[34]), .q_b(dout[34]) );
691cl_mc1_tisram_blb_4x dout_33 ( .l1clk(latch_clk), .d_a(mux_dout[33]), .q_b(dout[33]) );
692cl_mc1_tisram_blb_4x dout_32 ( .l1clk(latch_clk), .d_a(mux_dout[32]), .q_b(dout[32]) );
693cl_mc1_tisram_blb_4x dout_31 ( .l1clk(latch_clk), .d_a(mux_dout[31]), .q_b(dout[31]) );
694cl_mc1_tisram_blb_4x dout_30 ( .l1clk(latch_clk), .d_a(mux_dout[30]), .q_b(dout[30]) );
695
696cl_mc1_tisram_blb_4x dout_29 ( .l1clk(latch_clk), .d_a(mux_dout[29]), .q_b(dout[29]) );
697cl_mc1_tisram_blb_4x dout_28 ( .l1clk(latch_clk), .d_a(mux_dout[28]), .q_b(dout[28]) );
698cl_mc1_tisram_blb_4x dout_27 ( .l1clk(latch_clk), .d_a(mux_dout[27]), .q_b(dout[27]) );
699cl_mc1_tisram_blb_4x dout_26 ( .l1clk(latch_clk), .d_a(mux_dout[26]), .q_b(dout[26]) );
700cl_mc1_tisram_blb_4x dout_25 ( .l1clk(latch_clk), .d_a(mux_dout[25]), .q_b(dout[25]) );
701cl_mc1_tisram_blb_4x dout_24 ( .l1clk(latch_clk), .d_a(mux_dout[24]), .q_b(dout[24]) );
702cl_mc1_tisram_blb_4x dout_23 ( .l1clk(latch_clk), .d_a(mux_dout[23]), .q_b(dout[23]) );
703cl_mc1_tisram_blb_4x dout_22 ( .l1clk(latch_clk), .d_a(mux_dout[22]), .q_b(dout[22]) );
704cl_mc1_tisram_blb_4x dout_21 ( .l1clk(latch_clk), .d_a(mux_dout[21]), .q_b(dout[21]) );
705cl_mc1_tisram_blb_4x dout_20 ( .l1clk(latch_clk), .d_a(mux_dout[20]), .q_b(dout[20]) );
706
707cl_mc1_tisram_blb_4x dout_19 ( .l1clk(latch_clk), .d_a(mux_dout[19]), .q_b(dout[19]) );
708cl_mc1_tisram_blb_4x dout_18 ( .l1clk(latch_clk), .d_a(mux_dout[18]), .q_b(dout[18]) );
709cl_mc1_tisram_blb_4x dout_17 ( .l1clk(latch_clk), .d_a(mux_dout[17]), .q_b(dout[17]) );
710cl_mc1_tisram_blb_4x dout_16 ( .l1clk(latch_clk), .d_a(mux_dout[16]), .q_b(dout[16]) );
711cl_mc1_tisram_blb_4x dout_15 ( .l1clk(latch_clk), .d_a(mux_dout[15]), .q_b(dout[15]) );
712cl_mc1_tisram_blb_4x dout_14 ( .l1clk(latch_clk), .d_a(mux_dout[14]), .q_b(dout[14]) );
713cl_mc1_tisram_blb_4x dout_13 ( .l1clk(latch_clk), .d_a(mux_dout[13]), .q_b(dout[13]) );
714cl_mc1_tisram_blb_4x dout_12 ( .l1clk(latch_clk), .d_a(mux_dout[12]), .q_b(dout[12]) );
715cl_mc1_tisram_blb_4x dout_11 ( .l1clk(latch_clk), .d_a(mux_dout[11]), .q_b(dout[11]) );
716cl_mc1_tisram_blb_4x dout_10 ( .l1clk(latch_clk), .d_a(mux_dout[10]), .q_b(dout[10]) );
717
718cl_mc1_tisram_blb_4x dout_9 ( .l1clk(latch_clk), .d_a(mux_dout[9]), .q_b(dout[9]) );
719cl_mc1_tisram_blb_4x dout_8 ( .l1clk(latch_clk), .d_a(mux_dout[8]), .q_b(dout[8]) );
720cl_mc1_tisram_blb_4x dout_7 ( .l1clk(latch_clk), .d_a(mux_dout[7]), .q_b(dout[7]) );
721cl_mc1_tisram_blb_4x dout_6 ( .l1clk(latch_clk), .d_a(mux_dout[6]), .q_b(dout[6]) );
722cl_mc1_tisram_blb_4x dout_5 ( .l1clk(latch_clk), .d_a(mux_dout[5]), .q_b(dout[5]) );
723cl_mc1_tisram_blb_4x dout_4 ( .l1clk(latch_clk), .d_a(mux_dout[4]), .q_b(dout[4]) );
724cl_mc1_tisram_blb_4x dout_3 ( .l1clk(latch_clk), .d_a(mux_dout[3]), .q_b(dout[3]) );
725cl_mc1_tisram_blb_4x dout_2 ( .l1clk(latch_clk), .d_a(mux_dout[2]), .q_b(dout[2]) );
726cl_mc1_tisram_blb_4x dout_1 ( .l1clk(latch_clk), .d_a(mux_dout[1]), .q_b(dout[1]) );
727cl_mc1_tisram_blb_4x dout_0 ( .l1clk(latch_clk), .d_a(mux_dout[0]), .q_b(dout[0]) );
728
729
730
731
732
733
734
735
736
737
738//assign dout = r_tsb_rd ? tsb_dout : dev_dout ; // behavioural before output latch added above
739
740
741
742endmodule // n2_iom_sp_devtsb_cust
743
744
745module n2_iom_sp_1024b_cust (
746
747 clk,
748 adr_r,
749 adr_w,
750 rd,
751 wr,
752 din,
753 dout
754
755);
756
757
758 input clk;
759 input [3:0] adr_r;
760 input [3:0] adr_w;
761 input rd;
762 input wr;
763 input [63:0] din;
764 output [63:0] dout;
765
766
767/* RAM Array: =16 - 1 -> 15 */
768
769reg [63:0] array_ram [0:15];
770reg [63:0] dout;
771
772`ifndef NOINITMEM
773integer i;
774
775initial begin
776 for (i=0; i<16; i=i+1) begin
777 array_ram[i] = 64'b0;
778 end
779dout[63:0] = 64'b0;
780end
781`endif
782
783
784// ----------------------------------------------------------------------------
785// Read/write the array, single port
786// ----------------------------------------------------------------------------
787always @(clk or rd or adr_r or wr or adr_w or din ) begin
788 if (clk) begin
789 if (rd ) begin
790 dout[63:0] <= array_ram[adr_r[3:0]];
791 end
792 else begin
793 dout[63:0] <= {64{1'b0}};
794 if (wr )
795 array_ram[adr_w[3:0]] <= din[63:0];
796 end
797 end
798end
799
800
801endmodule // n2_iom_sp_1024b_cust
802
803
804
805module n2_iom_sp_2048b_cust (
806
807 clk,
808 adr_r,
809 adr_w,
810 rd,
811 wr,
812 din,
813 dout,
814 efu_bits
815
816);
817
818
819 input clk;
820 input [4:0] adr_r;
821 input [4:0] adr_w;
822 input rd;
823 input wr;
824 input [63:0] din;
825 input [3:0] efu_bits;
826 output [63:0] dout;
827
828
829/* RAM Array: =32 - 1 -> 31 */
830
831reg [63:0] array_ram [0:31];
832reg [63:0] dout;
833
834`ifndef NOINITMEM
835integer i;
836
837initial begin
838 for (i=0; i<32; i=i+1) begin
839 array_ram[i] = 64'b0;
840 end
841dout[63:0] = 64'b0;
842end
843`endif
844
845// 0in one_hot -var efu_bits
846// ----------------------------------------------------------------------------
847// Read/write the array , single port
848// ----------------------------------------------------------------------------
849always @(clk or rd or adr_r or wr or adr_w or din or efu_bits) begin
850
851 if (clk) begin
852 if (rd) begin
853 if (efu_bits[0]) begin
854 dout[63:0] <= array_ram[adr_r[4:0]];
855 end
856 else if (efu_bits[1]) begin
857 dout[63:0] <= array_ram[adr_r[4:0]];
858 end
859 else if (efu_bits[2]) begin
860 dout[63:0] <= array_ram[adr_r[4:0]];
861 end
862 else if (efu_bits[3]) begin
863 dout[63:0] <= array_ram[adr_r[4:0]];
864 end
865 end
866 else begin
867 dout[63:0] <= {64{1'b0}};
868 if(wr )
869 array_ram[adr_w[4:0]] <= din[63:0];
870 end
871 end
872end
873
874
875endmodule // n2_iom_sp_2048b_cust
876
877