Skip to content

Commit ff1dce5

Browse files
committed
Merge branch 'laptop' into dev
2 parents 2fa43d5 + e1a1421 commit ff1dce5

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

rtl/sddma.v

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,10 +453,12 @@ module sddma #(
453453

454454
generate if (USE_FIFO)
455455
begin : GEN_FIFO
456+
localparam LGFLEN = LGFIFO-$clog2(DW/8);
457+
reg flushing;
456458

457459
sdfifo #(
458460
// {{{
459-
.LGFLEN(LGFIFO-$clog2(DW/8)),
461+
.LGFLEN(LGFLEN),
460462
.BW(2+$clog2(DW/8)+DW),
461463
.OPT_ASYNC_READ(1'b0),
462464
.OPT_WRITE_ON_FULL(1'b0),
@@ -471,13 +473,26 @@ module sddma #(
471473
.o_full(fifo_full),
472474
.o_fill(ign_fifo_fill),
473475
//
474-
.i_rd(fifo_ready),
476+
.i_rd(fifo_ready && flushing),
475477
.o_data({ fifo_last, fifo_bytes, fifo_data }),
476478
.o_empty(fifo_empty)
477479
// }}}
478480
);
479481

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;
481496
assign wide_ready = !fifo_full;
482497

483498
end else begin : NO_FIFO

rtl/sdrxframe.v

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,11 +1103,21 @@ module sdrxframe #(
11031103
assert({ mem_full, o_mem_addr, subaddr } == fmem_count);
11041104

11051105
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
11071110
assert(!o_mem_valid);
1108-
else if (!i_reset && o_mem_valid)
1111+
end else if (o_mem_valid)
11091112
assert(o_mem_strb != 0);
11101113

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+
11111121
// }}}
11121122
////////////////////////////////////////////////////////////////////////
11131123
//

0 commit comments

Comments
 (0)