Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_smx_wreq_dmc.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_smx_wreq_dmc.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 ============================================
35
36module niu_smx_wreq_dmc(
37/*AUTOARG*/
38 // Outputs
39 meta_dmc0_req_accept, meta_dmc0_data_req, wreq_cmdff_wr,
40 wreq_cmdff_wdata, wreq_dataff_wr, wreq_dataff_wdata,
41 wreq_pcmd_ff_wr, wreq_pcmd_ff_wdata, wreq_xtb_wr, wreq_xtb_waddr,
42 wreq_xtb_wdata, wreq_cmdreq_idle, wreq_cmd_cs, dreq_cs, wreq_dv_cs,
43 // Inputs
44 clk, reset_l, dmc_meta0_req, dmc_meta0_req_cmd,
45 dmc_meta0_req_address, dmc_meta0_req_length,
46 dmc_meta0_req_transID, dmc_meta0_req_port_num,
47 dmc_meta0_req_dma_num, dmc_meta0_req_client, dmc_meta0_data_valid,
48 dmc_meta0_data, dmc_meta0_req_byteenable, dmc_meta0_status,
49 dmc_meta0_transfer_complete, wreq_cmdff_full, wreq_dataff_full,
50 wreq_pcmd_ff_full, wreq_rst_xtb_wr, stall_enable
51 );
52
53input clk;
54input reset_l;
55
56input dmc_meta0_req;
57input [7:0] dmc_meta0_req_cmd;
58input [63:0] dmc_meta0_req_address;
59input [13:0] dmc_meta0_req_length;
60input [5:0] dmc_meta0_req_transID;
61input [1:0] dmc_meta0_req_port_num;
62input [4:0] dmc_meta0_req_dma_num;
63input [7:0] dmc_meta0_req_client;
64output meta_dmc0_req_accept;
65
66output meta_dmc0_data_req;
67input dmc_meta0_data_valid;
68input [127:0] dmc_meta0_data;
69input [15:0] dmc_meta0_req_byteenable;
70input [3:0] dmc_meta0_status;
71input dmc_meta0_transfer_complete;
72
73// cmd ff
74output wreq_cmdff_wr;
75output [65:0] wreq_cmdff_wdata;
76input wreq_cmdff_full;
77
78// data ff
79output wreq_dataff_wr;
80output [127:0] wreq_dataff_wdata;
81input wreq_dataff_full; // right now not use ???
82
83// pcmd ff
84output wreq_pcmd_ff_wr;
85output [3:0] wreq_pcmd_ff_wdata;
86input wreq_pcmd_ff_full; // right now not use ???
87
88// xtb
89output wreq_xtb_wr;
90output [5:0] wreq_xtb_waddr;
91output [127:0] wreq_xtb_wdata;
92input wreq_rst_xtb_wr;
93
94 // stall_hdlr if
95input stall_enable;
96output wreq_cmdreq_idle;
97
98output [2:0] wreq_cmd_cs;
99output [2:0] dreq_cs;
100output [1:0] wreq_dv_cs;
101
102wire [2:0] cmd_cs;
103wire [2:0] wreq_cmd_cs= cmd_cs;
104
105wire [1:0] dv_cs;
106wire [1:0] wreq_dv_cs= dv_cs;
107
108// req input
109wire dmc_smx_req= dmc_meta0_req;
110wire [7:0] dmc_smx_req_cmd= dmc_meta0_req_cmd;
111wire [63:0] dmc_smx_req_addr= dmc_meta0_req_address;
112wire [13:0] dmc_smx_req_len= dmc_meta0_req_length;
113wire [5:0] dmc_smx_req_xid= dmc_meta0_req_transID;
114wire [1:0] dmc_smx_req_port= dmc_meta0_req_port_num;
115wire [4:0] dmc_smx_req_dma= dmc_meta0_req_dma_num;
116wire [7:0] dmc_smx_req_client= dmc_meta0_req_client;
117// req output
118wire smx_dmc_req_accept;
119wire meta_dmc0_req_accept= smx_dmc_req_accept;
120
121// data req output
122wire smx_dmc_datareq;
123wire meta_dmc0_data_req= smx_dmc_datareq;
124// data input
125wire dmc_smx_dv= dmc_meta0_data_valid;
126wire [127:0] dmc_smx_data= dmc_meta0_data &
127 {
128 {8{dmc_meta0_req_byteenable[15]}},
129 {8{dmc_meta0_req_byteenable[14]}},
130 {8{dmc_meta0_req_byteenable[13]}},
131 {8{dmc_meta0_req_byteenable[12]}},
132 {8{dmc_meta0_req_byteenable[11]}},
133 {8{dmc_meta0_req_byteenable[10]}},
134 {8{dmc_meta0_req_byteenable[9]}},
135 {8{dmc_meta0_req_byteenable[8]}},
136 {8{dmc_meta0_req_byteenable[7]}},
137 {8{dmc_meta0_req_byteenable[6]}},
138 {8{dmc_meta0_req_byteenable[5]}},
139 {8{dmc_meta0_req_byteenable[4]}},
140 {8{dmc_meta0_req_byteenable[3]}},
141 {8{dmc_meta0_req_byteenable[2]}},
142 {8{dmc_meta0_req_byteenable[1]}},
143 {8{dmc_meta0_req_byteenable[0]}}
144 };
145
146// wire [15:0] dmc_smx_ben= dmc_meta0_req_byteenable;
147wire [3:0] dmc_smx_status= dmc_meta0_status;
148wire dmc_smx_xfer_comp= dmc_meta0_transfer_complete;
149
150wire [4:0] cmdflag_data;
151wire [4:0] early_cmdflag_data_n;
152// wire dv_eop, datareq_busy;
153wire datareq_busy;
154// wire xfer_done= dv_eop & ~datareq_busy;
155wire lnen_ff_empty;
156wire xfer_done= lnen_ff_empty & ~datareq_busy;
157
158wire cmdflag;
159wire early_cmdflag_n;
160wire rst_cmdflag;
161wire datareq_idle;
162
163wire [4:0] lnen_ff_wdata;
164wire [4:0] lnen_ff_rdata;
165
166wire lnen_ff_wr;
167wire lnen_ff_full;
168wire dv_pad_done;
169wire lnen_ff_rd;
170
171niu_smx_sm_req_cmdreq wr_sm_cmd(
172 .clk (clk),
173 .reset_l (reset_l),
174 .req (dmc_smx_req),
175 .req_cmd (dmc_smx_req_cmd[7:0]),
176 .req_addr ({dmc_smx_req_addr[63:6], 6'h0}),
177 // ??? force addr to
178 // be 64B aligned in wr;
179 // tb generating random addr??
180 .req_len (dmc_smx_req_len[13:0]),
181 .req_xid (dmc_smx_req_xid[5:0]),
182 .req_port (dmc_smx_req_port[1:0]),
183 .req_dma (dmc_smx_req_dma[4:0]),
184 .req_client (dmc_smx_req_client[7:0]),
185 .ack (smx_dmc_req_accept),
186 .cmdflag (cmdflag),
187 .cmdflag_data (cmdflag_data[4:0]),
188 .early_cmdflag_n (early_cmdflag_n),
189 .early_cmdflag_data_n (early_cmdflag_data_n[4:0]),
190 .rst_cmdflag (rst_cmdflag),
191 .cfg_no_cmdflag (1'b0),
192 .cfg_no_sameclientck (1'b0),
193 .datareq_idle (datareq_idle), // hard wire to 0 if wanna
194 // disable early_cmdflag ???
195 // diagram show 1 cy bubble from ack to datareq
196 .xtb_wr (wreq_xtb_wr),
197 .xtb_waddr (wreq_xtb_waddr[5:0]),
198 .xtb_wdata (wreq_xtb_wdata[127:0]),
199 .rst_xtb_wr (wreq_rst_xtb_wr),
200 .ff_wr (wreq_cmdff_wr),
201 .ff_wdata (wreq_cmdff_wdata[65:0]),
202 .ff_full (wreq_cmdff_full),
203 .lnen_ff_wr (lnen_ff_wr),
204 .lnen_ff_wdata (lnen_ff_wdata[4:0]),
205 .lnen_ff_full (lnen_ff_full),
206
207 .stall_enable (stall_enable),
208 .cmdreq_idle (wreq_cmdreq_idle),
209
210 .cmd_cs (cmd_cs[2:0]),
211
212 .tid_valid_rdata_bus ({64{1'b1}}),
213
214 .xfer_done (xfer_done)
215);
216
217
218niu_smx_sm_req_datareq wr_sm_datareq(
219 .clk (clk),
220 .reset_l (reset_l),
221 .cmdflag (cmdflag),
222 .cmdflag_data (cmdflag_data[4:0]),
223 .early_cmdflag_n (early_cmdflag_n),
224 .early_cmdflag_data_n (early_cmdflag_data_n[4:0]),
225 .rst_cmdflag (rst_cmdflag),
226 .datareq (smx_dmc_datareq),
227 .datareq_busy (datareq_busy),
228 .datareq_idle (datareq_idle),
229 .cfg_pad_wait (1'b0),
230 .dreq_cs (dreq_cs[2:0]),
231 .dv_pad_done (dv_pad_done)
232);
233
234niu_smx_sm_req_dv wr_sm_dv(
235 .clk (clk),
236 .reset_l (reset_l),
237 .dv (dmc_smx_dv),
238 .data (dmc_smx_data[127:0]),
239 .data_status (dmc_smx_status[3:0]),
240 .xfer_comp (dmc_smx_xfer_comp),
241 .ff_wr (wreq_dataff_wr),
242 .ff_wdata (wreq_dataff_wdata[127:0]),
243 .pcmd_ff_wr (wreq_pcmd_ff_wr),
244 .pcmd_ff_wdata (wreq_pcmd_ff_wdata[3:0]),
245 .lnen_ff_rd (lnen_ff_rd),
246 .lnen_ff_rdata (lnen_ff_rdata[4:0]),
247 .lnen_ff_empty (lnen_ff_empty),
248 .dv_cs (dv_cs[1:0]),
249 .dv_pad_done (dv_pad_done)
250);
251
252// .eop (dv_eop),
253
254niu_smx_ff_regfl #(5,2) lnen_ff_5bx4(
255 .clk (clk),
256 .reset_l (reset_l),
257 .wr (lnen_ff_wr),
258 .wdata (lnen_ff_wdata[4:0]),
259 .full (lnen_ff_full),
260 .rd (lnen_ff_rd),
261 .empty (lnen_ff_empty),
262 .rdata (lnen_ff_rdata[4:0])
263);
264
265
266/*
267errff - at 4th data, wr errff; ???
268if data_status error, errff_data= sth
269use this empty flag for read side
270
271if len0, drop at cmd sm ???
272*/
273
274
275endmodule
276
277