File tree Expand file tree Collapse file tree 2 files changed +30
-5
lines changed Expand file tree Collapse file tree 2 files changed +30
-5
lines changed Original file line number Diff line number Diff line change @@ -453,10 +453,12 @@ module sddma #(
453
453
454
454
generate if (USE_FIFO)
455
455
begin : GEN_FIFO
456
+ localparam LGFLEN = LGFIFO- $clog2(DW/ 8 );
457
+ reg flushing;
456
458
457
459
sdfifo #(
458
460
// {{{
459
- .LGFLEN(LGFIFO-$clog2(DW/ 8 ) ),
461
+ .LGFLEN(LGFLEN ),
460
462
.BW(2 +$clog2(DW/8 )+DW),
461
463
.OPT_ASYNC_READ(1'b0 ),
462
464
.OPT_WRITE_ON_FULL(1'b0 ),
@@ -471,13 +473,26 @@ module sddma #(
471
473
.o_full(fifo_full),
472
474
.o_fill(ign_fifo_fill),
473
475
//
474
- .i_rd(fifo_ready),
476
+ .i_rd(fifo_ready && flushing ),
475
477
.o_data({ fifo_last, fifo_bytes, fifo_data }),
476
478
.o_empty(fifo_empty)
477
479
// }}}
478
480
);
479
481
480
- assign fifo_valid = ! fifo_empty;
482
+ always @(posedge i_clk)
483
+ if (i_reset)
484
+ flushing <= 0 ;
485
+ else if (i_dma_s2sd || mm2s_busy
486
+ || (i_dma_sd2s && OPT_OSTREAM && i_dma_addr[ADDR_MSB]))
487
+ flushing <= 1 ;
488
+ else if (wide_valid && wide_last)
489
+ flushing <= 1 ;
490
+ else if (ign_fifo_fill[LGFLEN:LGFLEN- 1 ] != 0 )
491
+ flushing <= 1 ;
492
+ else if (fifo_empty)
493
+ flushing <= 0 ;
494
+
495
+ assign fifo_valid = ! fifo_empty && flushing;
481
496
assign wide_ready = ! fifo_full;
482
497
483
498
end else begin : NO_FIFO
Original file line number Diff line number Diff line change @@ -1103,11 +1103,21 @@ module sdrxframe #(
1103
1103
assert({ mem_full, o_mem_addr, subaddr } == fmem_count);
1104
1104
1105
1105
always @(posedge i_clk)
1106
- if (! i_reset && ! i_rx_en)
1106
+ if (i_reset)
1107
+ begin
1108
+ end else if (! i_rx_en)
1109
+ begin
1107
1110
assert(! o_mem_valid);
1108
- else if (! i_reset && o_mem_valid)
1111
+ end else if (o_mem_valid)
1109
1112
assert(o_mem_strb != 0 );
1110
1113
1114
+ always @(posedge i_clk)
1115
+ if (! i_reset && o_mem_valid && $past(o_mem_valid))
1116
+ begin
1117
+ if (! $changed(o_mem_addr))
1118
+ assert(0 == (o_mem_strb & $past(o_mem_strb)));
1119
+ end
1120
+
1111
1121
// }}}
1112
1122
// //////////////////////////////////////////////////////////////////////
1113
1123
//
You can’t perform that action at this time.
0 commit comments