Skip to content

Commit d09fc92

Browse files
committed
util_do_ram: Fix Rx path for interrupted transfers
When capture length is not programmed the DMA will interrupt the transfer once it received all the samples he was set in its descriptor, this case must be handled by resetting the read process and returning an end of transfer (eot) to the data offload control logic.
1 parent ec6e184 commit d09fc92

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

library/util_do_ram/util_do_ram.v

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,9 @@ ad_mem_asym #(
185185
reg rd_active = 1'b0;
186186
reg [1:0] rd_req_cnt = 2'b0;
187187
always @(posedge m_axis_aclk) begin
188-
if (rd_request_valid & rd_request_ready)
188+
if (~rd_request_enable)
189+
rd_req_cnt <= 2'b0;
190+
else if (rd_request_valid & rd_request_ready)
189191
rd_req_cnt <= rd_req_cnt + 2'b1;
190192
else if (rd_response_eot)
191193
rd_req_cnt <= rd_req_cnt - 2'b1;
@@ -198,12 +200,17 @@ always @(posedge m_axis_aclk) begin
198200
rd_length <= rd_request_length[LENGTH_WIDTH-1:DST_ADDR_ALIGN];
199201
end
200202

203+
wire rd_early_finish;
204+
205+
assign rd_early_finish = rd_active & ~rd_request_enable;
201206
assign rd_last_beat = (rd_addr == rd_length) & rd_enable;
202-
assign rd_response_eot = m_axis_last & m_axis_valid & m_axis_ready;
207+
assign rd_response_eot = (m_axis_last & m_axis_valid & m_axis_ready) || rd_early_finish;
203208

204209
// Read logic
205210
always @(posedge m_axis_aclk) begin
206-
if (rd_request_valid & rd_request_ready)
211+
if (~rd_request_enable)
212+
rd_active <= 1'b0;
213+
else if (rd_request_valid & rd_request_ready)
207214
rd_active <= 1'b1;
208215
else if (rd_last_beat)
209216
rd_active <= rd_req_cnt == 2;
@@ -256,7 +263,7 @@ util_axis_fifo #(
256263
.M_AXIS_REGISTERED(0)
257264
) i_rd_fifo (
258265
.s_axis_aclk(m_axis_aclk),
259-
.s_axis_aresetn(m_axis_aresetn),
266+
.s_axis_aresetn(m_axis_aresetn & rd_request_enable),
260267
.s_axis_valid(rd_fifo_s_valid),
261268
.s_axis_ready(rd_fifo_s_ready),
262269
.s_axis_full(),
@@ -267,7 +274,7 @@ util_axis_fifo #(
267274
.s_axis_almost_full(),
268275

269276
.m_axis_aclk(m_axis_aclk),
270-
.m_axis_aresetn(m_axis_aresetn),
277+
.m_axis_aresetn(m_axis_aresetn & rd_request_enable),
271278
.m_axis_valid(m_axis_valid),
272279
.m_axis_ready(m_axis_ready),
273280
.m_axis_data({m_axis_last,m_axis_data}),

0 commit comments

Comments
 (0)