1 # this file has been generated by sv2nmigen
2 # // Copyright 2018 ETH Zurich and University of Bologna.
3 # // Copyright and related rights are licensed under the Solderpad Hardware
4 # // License, Version 0.51 (the "License"); you may not use this file except in
5 # // compliance with the License. You may obtain a copy of the License at
6 # // http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law
7 # // or agreed to in writing, software, hardware and materials distributed under
8 # // this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 # // CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 # // specific language governing permissions and limitations under the License.
11 from nmigen
import Signal
, Module
, Const
, Cat
, Elaboratable
14 class axi4_w_buffer(Elaboratable
):
17 self
.axi4_aclk
= Signal() # input
18 self
.axi4_arstn
= Signal() # input
19 self
.l1_done_o
= Signal() # output
20 self
.l1_accept_i
= Signal() # input
21 self
.l1_save_i
= Signal() # input
22 self
.l1_drop_i
= Signal() # input
23 self
.l1_master_i
= Signal() # input
24 self
.l1_id_i
= Signal(AXI_ID_WIDTH
) # input
25 self
.l1_len_i
= Signal(8) # input
26 self
.l1_prefetch_i
= Signal() # input
27 self
.l1_hit_i
= Signal() # input
28 self
.l2_done_o
= Signal() # output
29 self
.l2_accept_i
= Signal() # input
30 self
.l2_drop_i
= Signal() # input
31 self
.l2_master_i
= Signal() # input
32 self
.l2_id_i
= Signal(AXI_ID_WIDTH
) # input
33 self
.l2_len_i
= Signal(8) # input
34 self
.l2_prefetch_i
= Signal() # input
35 self
.l2_hit_i
= Signal() # input
36 self
.master_select_o
= Signal() # output
37 self
.input_stall_o
= Signal() # output
38 self
.output_stall_o
= Signal() # output
39 self
.b_drop_o
= Signal() # output
40 self
.b_done_i
= Signal() # input
41 self
.id_o
= Signal(AXI_ID_WIDTH
) # output
42 self
.prefetch_o
= Signal() # output
43 self
.hit_o
= Signal() # output
44 self
.s_axi4_wdata
= Signal(AXI_DATA_WIDTH
) # input
45 self
.s_axi4_wvalid
= Signal() # input
46 self
.s_axi4_wready
= Signal() # output
47 self
.s_axi4_wstrb
= Signal(1+ERROR p_expression_25
) # input
48 self
.s_axi4_wlast
= Signal() # input
49 self
.s_axi4_wuser
= Signal(AXI_USER_WIDTH
) # input
50 self
.m_axi4_wdata
= Signal(AXI_DATA_WIDTH
) # output
51 self
.m_axi4_wvalid
= Signal() # output
52 self
.m_axi4_wready
= Signal() # input
53 self
.m_axi4_wstrb
= Signal(1+ERROR p_expression_25
) # output
54 self
.m_axi4_wlast
= Signal() # output
55 self
.m_axi4_wuser
= Signal(AXI_USER_WIDTH
) # output
57 def elaborate(self
, platform
=None):
63 # //import CfMath::log2;
65 # module axi4_w_buffer
67 # parameter AXI_DATA_WIDTH = 32,
68 # parameter AXI_ID_WIDTH = 4,
69 # parameter AXI_USER_WIDTH = 4,
70 # parameter ENABLE_L2TLB = 0,
71 # parameter HUM_BUFFER_DEPTH = 16
74 # input logic axi4_aclk,
75 # input logic axi4_arstn,
77 # // L1 & L2 interfaces
78 # output logic l1_done_o,
79 # input logic l1_accept_i,
80 # input logic l1_save_i,
81 # input logic l1_drop_i,
82 # input logic l1_master_i,
83 # input logic [AXI_ID_WIDTH-1:0] l1_id_i,
84 # input logic [7:0] l1_len_i,
85 # input logic l1_prefetch_i,
86 # input logic l1_hit_i,
88 # output logic l2_done_o,
89 # input logic l2_accept_i,
90 # input logic l2_drop_i,
91 # input logic l2_master_i,
92 # input logic [AXI_ID_WIDTH-1:0] l2_id_i,
93 # input logic [7:0] l2_len_i,
94 # input logic l2_prefetch_i,
95 # input logic l2_hit_i,
97 # output logic master_select_o,
98 # output logic input_stall_o,
99 # output logic output_stall_o,
101 # // B sender interface
102 # output logic b_drop_o,
103 # input logic b_done_i,
104 # output logic [AXI_ID_WIDTH-1:0] id_o,
105 # output logic prefetch_o,
106 # output logic hit_o,
108 # // AXI W channel interfaces
109 # input logic [AXI_DATA_WIDTH-1:0] s_axi4_wdata,
110 # input logic s_axi4_wvalid,
111 # output logic s_axi4_wready,
112 # input logic [AXI_DATA_WIDTH/8-1:0] s_axi4_wstrb,
113 # input logic s_axi4_wlast,
114 # input logic [AXI_USER_WIDTH-1:0] s_axi4_wuser,
116 # output logic [AXI_DATA_WIDTH-1:0] m_axi4_wdata,
117 # output logic m_axi4_wvalid,
118 # input logic m_axi4_wready,
119 # output logic [AXI_DATA_WIDTH/8-1:0] m_axi4_wstrb,
120 # output logic m_axi4_wlast,
121 # output logic [AXI_USER_WIDTH-1:0] m_axi4_wuser
126 localparam BUFFER_WIDTH = AXI_DATA_WIDTH+AXI_USER_WIDTH+AXI_DATA_WIDTH/8+1;
128 localparam INPUT_BUFFER_DEPTH = 4;
129 localparam L1_FIFO_DEPTH = 8;
130 localparam L2_FIFO_DEPTH = 4;
132 logic [AXI_DATA_WIDTH-1:0] axi4_wdata;
135 logic [AXI_DATA_WIDTH/8-1:0] axi4_wstrb;
137 logic [AXI_USER_WIDTH-1:0] axi4_wuser;
139 logic l1_fifo_valid_out;
140 logic l1_fifo_ready_in;
141 logic l1_fifo_valid_in;
142 logic l1_fifo_ready_out;
145 logic l1_accept_cur, l1_save_cur, l1_drop_cur;
147 logic [AXI_ID_WIDTH-1:0] l1_id_cur;
148 logic [7:0] l1_len_cur;
149 logic l1_hit_cur, l1_prefetch_cur;
150 logic l1_save_in, l1_save_out;
151 logic [log2(L1_FIFO_DEPTH)-1:0] n_l1_save_SP;
153 logic l2_fifo_valid_out;
154 logic l2_fifo_ready_in;
155 logic l2_fifo_valid_in;
156 logic l2_fifo_ready_out;
159 logic l2_accept_cur, l2_drop_cur;
161 logic [AXI_ID_WIDTH-1:0] l2_id_cur;
162 logic [7:0] l2_len_cur;
163 logic l2_hit_cur, l2_prefetch_cur;
165 logic fifo_select, fifo_select_SN, fifo_select_SP;
169 // HUM buffer signals
170 logic hum_buf_ready_out;
171 logic hum_buf_valid_in;
172 logic hum_buf_ready_in;
173 logic hum_buf_valid_out;
174 logic hum_buf_underfull;
176 logic [AXI_DATA_WIDTH-1:0] hum_buf_wdata;
177 logic [AXI_DATA_WIDTH/8-1:0] hum_buf_wstrb;
179 logic [AXI_USER_WIDTH-1:0] hum_buf_wuser;
181 logic hum_buf_drop_req_SN, hum_buf_drop_req_SP;
182 logic [7:0] hum_buf_drop_len_SN, hum_buf_drop_len_SP;
183 logic hum_buf_almost_full;
186 logic wlast_in, wlast_out;
187 logic signed [3:0] n_wlast_SN, n_wlast_SP;
188 logic block_forwarding;
191 typedef enum logic [3:0] {STORE, BYPASS,
192 WAIT_L1_BYPASS_YES, WAIT_L2_BYPASS_YES,
193 WAIT_L1_BYPASS_NO, WAIT_L2_BYPASS_NO,
197 hum_buf_state_t hum_buf_SP; // Present state
198 hum_buf_state_tbg hum_buf_SN; // Next State
202 .DATA_WIDTH ( BUFFER_WIDTH ),
203 .BUFFER_DEPTH ( INPUT_BUFFER_DEPTH )
208 .rstn ( axi4_arstn ),
210 .data_in ( {s_axi4_wuser, s_axi4_wstrb, s_axi4_wdata, s_axi4_wlast} ),
211 .valid_in ( s_axi4_wvalid ),
212 .ready_out ( s_axi4_wready ),
214 .data_out ( {axi4_wuser, axi4_wstrb, axi4_wdata, axi4_wlast} ),
215 .valid_out ( axi4_wvalid ),
216 .ready_in ( axi4_wready )
221 .DATA_WIDTH ( 2+AXI_ID_WIDTH+8+4 ),
222 .BUFFER_DEPTH ( L1_FIFO_DEPTH )
227 .rstn ( axi4_arstn ),
229 .data_in ( {l1_prefetch_i, l1_hit_i, l1_id_i, l1_len_i, l1_master_i, l1_accept_i, l1_save_i, l1_drop_i} ),
230 .valid_in ( l1_fifo_valid_in ),
231 .ready_out ( l1_fifo_ready_out ),
233 .data_out ( {l1_prefetch_cur, l1_hit_cur, l1_id_cur, l1_len_cur, l1_master_cur, l1_accept_cur, l1_save_cur, l1_drop_cur} ),
234 .valid_out ( l1_fifo_valid_out ),
235 .ready_in ( l1_fifo_ready_in )
238 // Push upon receiving new requests from the TLB.
239 assign l1_req = l1_accept_i | l1_save_i | l1_drop_i;
240 assign l1_fifo_valid_in = l1_req & l1_fifo_ready_out;
243 assign l1_done_o = l1_fifo_valid_in;
244 assign l2_done_o = l2_fifo_valid_in;
246 // Stall AW input of L1 TLB
247 assign input_stall_o = ~(l1_fifo_ready_out & l2_fifo_ready_out);
249 // Interface b_drop signals + handshake
251 if (fifo_select == 1'b0) begin
252 prefetch_o = l1_prefetch_cur;
256 l1_fifo_ready_in = w_done | b_done_i;
257 l2_fifo_ready_in = 1'b0;
259 prefetch_o = l2_prefetch_cur;
263 l1_fifo_ready_in = 1'b0;
264 l2_fifo_ready_in = w_done | b_done_i;
268 // Detect when an L1 transaction save request enters or exits the L1 FIFO.
269 assign l1_save_in = l1_fifo_valid_in & l1_save_i;
270 assign l1_save_out = l1_fifo_ready_in & l1_save_cur;
272 // Count the number of L1 transaction to save in the L1 FIFO.
273 always_ff @(posedge axi4_aclk or negedge axi4_arstn) begin
274 if (axi4_arstn == 0) begin
276 end else if (l1_save_in ^ l1_save_out) begin
277 if (l1_save_in) begin
278 n_l1_save_SP <= n_l1_save_SP + 1'b1;
279 end else if (l1_save_out) begin
280 n_l1_save_SP <= n_l1_save_SP - 1'b1;
285 // Stall forwarding of AW L1 hits if:
286 // 1. The HUM buffer does not allow to be bypassed.
287 // 2. There are multiple L1 save requests in the FIFO, i.e., multiple L2 outputs pending.
288 assign output_stall_o = (n_l1_save_SP > 1) || (block_forwarding == 1'b1);
291 if (ENABLE_L2TLB == 1) begin : HUM_BUFFER
295 .DATA_WIDTH ( BUFFER_WIDTH ),
296 .BUFFER_DEPTH ( HUM_BUFFER_DEPTH )
301 .rstn ( axi4_arstn ),
303 .data_in ( {axi4_wuser, axi4_wstrb, axi4_wdata, axi4_wlast} ),
304 .valid_in ( hum_buf_valid_in ),
305 .ready_out ( hum_buf_ready_out ),
307 .data_out ( {hum_buf_wuser, hum_buf_wstrb, hum_buf_wdata, hum_buf_wlast} ),
308 .valid_out ( hum_buf_valid_out ),
309 .ready_in ( hum_buf_ready_in ),
311 .almost_full ( hum_buf_almost_full ),
312 .underfull ( hum_buf_underfull ),
313 .drop_req ( hum_buf_drop_req_SP ),
314 .drop_len ( hum_buf_drop_len_SP )
319 .DATA_WIDTH ( 2+AXI_ID_WIDTH+8+3 ),
320 .BUFFER_DEPTH ( L2_FIFO_DEPTH )
325 .rstn ( axi4_arstn ),
327 .data_in ( {l2_prefetch_i, l2_hit_i, l2_id_i, l2_len_i, l2_master_i, l2_accept_i, l2_drop_i} ),
328 .valid_in ( l2_fifo_valid_in ),
329 .ready_out ( l2_fifo_ready_out ),
331 .data_out ( {l2_prefetch_cur, l2_hit_cur, l2_id_cur, l2_len_cur, l2_master_cur, l2_accept_cur, l2_drop_cur} ),
332 .valid_out ( l2_fifo_valid_out ),
333 .ready_in ( l2_fifo_ready_in )
336 // Push upon receiving new result from TLB.
337 assign l2_req = l2_accept_i | l2_drop_i;
338 assign l2_fifo_valid_in = l2_req & l2_fifo_ready_out;
340 assign wlast_in = axi4_wlast & hum_buf_valid_in & hum_buf_ready_out;
341 assign wlast_out = hum_buf_wlast & hum_buf_valid_out & hum_buf_ready_in;
343 always_ff @(posedge axi4_aclk or negedge axi4_arstn) begin
344 if (axi4_arstn == 0) begin
345 fifo_select_SP <= 1'b0;
346 hum_buf_drop_len_SP <= 'b0;
347 hum_buf_drop_req_SP <= 1'b0;
351 fifo_select_SP <= fifo_select_SN;
352 hum_buf_drop_len_SP <= hum_buf_drop_len_SN;
353 hum_buf_drop_req_SP <= hum_buf_drop_req_SN;
354 hum_buf_SP <= hum_buf_SN;
355 n_wlast_SP <= n_wlast_SN;
360 n_wlast_SN = n_wlast_SP;
361 if (hum_buf_drop_req_SP) begin // Happens exactly once per burst to be dropped.
372 always_comb begin : HUM_BUFFER_FSM
373 hum_buf_SN = hum_buf_SP;
380 m_axi4_wvalid = 1'b0;
383 hum_buf_valid_in = 1'b0;
384 hum_buf_ready_in = 1'b0;
386 hum_buf_drop_req_SN = hum_buf_drop_req_SP;
387 hum_buf_drop_len_SN = hum_buf_drop_len_SP;
388 master_select_o = 1'b0;
390 w_done = 1'b0; // read from FIFO without handshake with B sender
391 b_drop_o = 1'b0; // send data from FIFO to B sender (with handshake)
394 fifo_select_SN = fifo_select_SP;
397 block_forwarding = 1'b0;
399 unique case (hum_buf_SP)
402 // Simply store the data in the buffer.
403 hum_buf_valid_in = axi4_wvalid & hum_buf_ready_out;
404 axi4_wready = hum_buf_ready_out;
406 // We have got a full burst in the HUM buffer, thus stop storing.
407 if (wlast_in & !hum_buf_underfull | (n_wlast_SP > $signed(0))) begin
408 hum_buf_SN = WAIT_L1_BYPASS_YES;
410 // The buffer is full, thus wait for decision.
411 end else if (~hum_buf_ready_out) begin
412 hum_buf_SN = WAIT_L1_BYPASS_NO;
415 // Avoid the forwarding of L1 hits until we know whether we can bypass.
416 if (l1_fifo_valid_out & l1_save_cur) begin
417 block_forwarding = 1'b1;
421 WAIT_L1_BYPASS_YES : begin
422 // Wait for orders from L1 TLB.
423 if (l1_fifo_valid_out) begin
425 // L1 hit - forward data from buffer
426 if (l1_accept_cur) begin
427 m_axi4_wlast = hum_buf_wlast;
428 m_axi4_wdata = hum_buf_wdata;
429 m_axi4_wstrb = hum_buf_wstrb;
430 m_axi4_wuser = hum_buf_wuser;
432 m_axi4_wvalid = hum_buf_valid_out;
433 hum_buf_ready_in = m_axi4_wready;
435 master_select_o = l1_master_cur;
437 // Detect last data beat.
444 // L1 miss - wait for L2
445 end else if (l1_save_cur) begin
448 hum_buf_SN = WAIT_L2_BYPASS_YES;
450 // L1 prefetch, prot, multi - drop data
451 end else if (l1_drop_cur) begin
452 fifo_select_SN = 1'b0; // L1
453 hum_buf_drop_req_SN = 1'b1;
454 hum_buf_drop_len_SN = l1_len_cur;
460 WAIT_L2_BYPASS_YES : begin
461 // Wait for orders from L2 TLB.
462 if (l2_fifo_valid_out) begin
464 // L2 hit - forward data from buffer
465 if (l2_accept_cur) begin
466 m_axi4_wlast = hum_buf_wlast;
467 m_axi4_wdata = hum_buf_wdata;
468 m_axi4_wstrb = hum_buf_wstrb;
469 m_axi4_wuser = hum_buf_wuser;
471 m_axi4_wvalid = hum_buf_valid_out;
472 hum_buf_ready_in = m_axi4_wready;
474 master_select_o = l2_master_cur;
476 // Detect last data beat.
483 // L2 miss/prefetch hit
484 end else if (l2_drop_cur) begin
485 fifo_select_SN = 1'b1; // L2
486 hum_buf_drop_req_SN = 1'b1;
487 hum_buf_drop_len_SN = l2_len_cur;
491 // While we wait for orders from L2 TLB, we can still drop and accept L1 transactions.
492 end else if (l1_fifo_valid_out) begin
495 if (l1_accept_cur) begin
498 // L1 prefetch/prot/multi
499 end else if (l1_drop_cur) begin
500 hum_buf_SN = DISCARD;
506 // Clear HUM buffer flush request.
507 hum_buf_drop_req_SN = 1'b0;
509 // perform handshake with B sender
510 fifo_select = fifo_select_SP;
518 // Forward one full transaction from input buffer.
519 m_axi4_wlast = axi4_wlast;
520 m_axi4_wdata = axi4_wdata;
521 m_axi4_wstrb = axi4_wstrb;
522 m_axi4_wuser = axi4_wuser;
524 m_axi4_wvalid = axi4_wvalid;
525 axi4_wready = m_axi4_wready;
527 master_select_o = l1_master_cur;
529 // We have got a full transaction.
530 if (axi4_wlast & axi4_wready & axi4_wvalid) begin
533 hum_buf_SN = WAIT_L2_BYPASS_YES;
538 // Discard one full transaction from input buffer.
541 // We have got a full transaction.
542 if (axi4_wlast & axi4_wready & axi4_wvalid) begin
543 // Try to perform handshake with B sender.
546 // We cannot wait here due to axi4_wready.
548 hum_buf_SN = WAIT_L2_BYPASS_YES;
550 hum_buf_SN = DISCARD_FINISH;
555 DISCARD_FINISH : begin
556 // Perform handshake with B sender.
560 hum_buf_SN = WAIT_L2_BYPASS_YES;
564 WAIT_L1_BYPASS_NO : begin
565 // Do not allow the forwarding of L1 hits.
566 block_forwarding = 1'b1;
568 // Wait for orders from L1 TLB.
569 if (l1_fifo_valid_out) begin
571 // L1 hit - forward data from/through HUM buffer and refill the buffer
572 if (l1_accept_cur) begin
573 // Forward data from HUM buffer.
574 m_axi4_wlast = hum_buf_wlast;
575 m_axi4_wdata = hum_buf_wdata;
576 m_axi4_wstrb = hum_buf_wstrb;
577 m_axi4_wuser = hum_buf_wuser;
579 m_axi4_wvalid = hum_buf_valid_out;
580 hum_buf_ready_in = m_axi4_wready;
582 master_select_o = l1_master_cur;
584 // Refill the HUM buffer. Stop when buffer full.
585 stop_store = ~hum_buf_ready_out;
586 hum_buf_valid_in = stop_store ? 1'b0 : axi4_wvalid ;
587 axi4_wready = stop_store ? 1'b0 : hum_buf_ready_out;
589 // Detect last data beat.
593 if (~hum_buf_ready_out | hum_buf_almost_full) begin
594 hum_buf_SN = WAIT_L1_BYPASS_NO;
600 // Allow the forwarding of L1 hits.
601 block_forwarding = 1'b0;
603 // L1 miss - wait for L2
604 end else if (l1_save_cur) begin
607 hum_buf_SN = WAIT_L2_BYPASS_NO;
609 // L1 prefetch, prot, multi - drop data
610 end else if (l1_drop_cur) begin
611 fifo_select_SN = 1'b0; // L1
612 hum_buf_drop_req_SN = 1'b1;
613 hum_buf_drop_len_SN = l1_len_cur;
616 // Allow the forwarding of L1 hits.
617 block_forwarding = 1'b0;
622 WAIT_L2_BYPASS_NO : begin
623 // Do not allow the forwarding of L1 hits.
624 block_forwarding = 1'b1;
626 // Wait for orders from L2 TLB.
627 if (l2_fifo_valid_out) begin
629 // L2 hit - forward first part from HUM buffer, rest from input buffer
630 if (l2_accept_cur) begin
631 // Forward data from HUM buffer.
632 m_axi4_wlast = hum_buf_wlast;
633 m_axi4_wdata = hum_buf_wdata;
634 m_axi4_wstrb = hum_buf_wstrb;
635 m_axi4_wuser = hum_buf_wuser;
637 m_axi4_wvalid = hum_buf_valid_out;
638 hum_buf_ready_in = m_axi4_wready;
640 master_select_o = l2_master_cur;
642 // Refill the HUM buffer. Stop when buffer full.
643 stop_store = ~hum_buf_ready_out;
644 hum_buf_valid_in = stop_store ? 1'b0 : axi4_wvalid ;
645 axi4_wready = stop_store ? 1'b0 : hum_buf_ready_out;
647 // Detect last data beat.
651 if (~hum_buf_ready_out | hum_buf_almost_full) begin
652 hum_buf_SN = WAIT_L1_BYPASS_NO;
658 // Allow the forwarding of L1 hits.
659 block_forwarding = 1'b0;
661 // L2 miss/prefetch hit - drop data
662 end else if (l2_drop_cur) begin
663 fifo_select_SN = 1'b1; // L2
664 hum_buf_drop_req_SN = 1'b1;
665 hum_buf_drop_len_SN = l2_len_cur;
668 // Allow the forwarding of L1 hits.
669 block_forwarding = 1'b0;
679 endcase // hum_buf_SP
680 end // HUM_BUFFER_FSM
682 assign b_drop_set = 1'b0;
684 end else begin // HUM_BUFFER
686 // register to perform the handshake with B sender
687 always_ff @(posedge axi4_aclk or negedge axi4_arstn) begin
688 if (axi4_arstn == 0) begin
690 end else if (b_done_i) begin
692 end else if (b_drop_set) begin
697 always_comb begin : OUTPUT_CTRL
708 m_axi4_wvalid = 1'b0;
711 if (l1_fifo_valid_out) begin
713 if (l1_accept_cur) begin
714 m_axi4_wlast = axi4_wlast;
715 m_axi4_wdata = axi4_wdata;
716 m_axi4_wstrb = axi4_wstrb;
717 m_axi4_wuser = axi4_wuser;
719 m_axi4_wvalid = axi4_wvalid;
720 axi4_wready = m_axi4_wready;
722 // Simply pop from FIFO upon last data beat.
723 w_done = axi4_wlast & axi4_wvalid & axi4_wready;
725 // discard entire burst
726 end else if (b_drop_o == 1'b0) begin
729 // Simply pop from FIFO upon last data beat. Perform handshake with B sender.
730 if (axi4_wlast & axi4_wvalid & axi4_wready)
737 assign master_select_o = l1_master_cur;
738 assign l2_fifo_ready_out = 1'b1;
739 assign block_forwarding = 1'b0;
742 assign hum_buf_ready_out = 1'b0;
743 assign hum_buf_valid_in = 1'b0;
744 assign hum_buf_ready_in = 1'b0;
745 assign hum_buf_valid_out = 1'b0;
746 assign hum_buf_wdata = 'b0;
747 assign hum_buf_wstrb = 'b0;
748 assign hum_buf_wlast = 1'b0;
749 assign hum_buf_wuser = 'b0;
750 assign hum_buf_drop_len_SN = 'b0;
751 assign hum_buf_drop_req_SN = 1'b0;
752 assign hum_buf_almost_full = 1'b0;
754 assign l2_fifo_valid_in = 1'b0;
755 assign l2_fifo_valid_out = 1'b0;
756 assign l2_prefetch_cur = 1'b0;
757 assign l2_hit_cur = 1'b0;
758 assign l2_id_cur = 'b0;
759 assign l2_len_cur = 'b0;
760 assign l2_master_cur = 1'b0;
761 assign l2_accept_cur = 1'b0;
762 assign l2_drop_cur = 1'b0;
764 assign l2_req = 1'b0;
766 assign fifo_select_SN = 1'b0;
767 assign fifo_select_SP = 1'b0;
769 assign stop_store = 1'b0;
770 assign n_wlast_SP = 'b0;
771 assign wlast_in = 1'b0;
772 assign wlast_out = 1'b0;