Skip to content

Commit 0203cd6

Browse files
committed
axi_dmac: drive destination eot from source side
1 parent 681b619 commit 0203cd6

File tree

4 files changed

+49
-19
lines changed

4 files changed

+49
-19
lines changed

library/axi_dmac/axi_dmac_constr.ttcl

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ set_max_delay -quiet -datapath_only \
5656
set_max_delay -quiet -datapath_only \
5757
-from $req_clk \
5858
-through [get_cells -quiet -hier DP \
59-
-filter {NAME =~ *i_request_arb/eot_mem_reg*}] \
59+
-filter {NAME =~ *i_request_arb/eot_mem_src_reg*}] \
6060
-to $src_clk \
6161
[get_property -min PERIOD $src_clk]
6262

@@ -95,13 +95,6 @@ set_max_delay -quiet -datapath_only \
9595
-to $req_clk \
9696
[get_property -min PERIOD $req_clk]
9797

98-
set_max_delay -quiet -datapath_only \
99-
-from $req_clk \
100-
-through [get_cells -quiet -hier DP \
101-
-filter {NAME =~ *i_request_arb/eot_mem_reg*}] \
102-
-to $dest_clk \
103-
[get_property -min PERIOD $dest_clk]
104-
10598
<: } :>
10699
<: if {$async_src_dest} { :>
107100
set_max_delay -quiet -datapath_only \
@@ -164,6 +157,14 @@ set_max_delay -quiet -datapath_only \
164157
-filter {NAME =~ *i_src_dest_bl_fifo* && IS_SEQUENTIAL}] \
165158
-to $dest_clk \
166159
[get_property -min PERIOD $dest_clk]
160+
161+
set_max_delay -quiet -datapath_only \
162+
-from $src_clk \
163+
-through [get_cells -quiet -hier DP \
164+
-filter {NAME =~ *i_request_arb/eot_mem_dest_reg*}] \
165+
-to $dest_clk \
166+
[get_property -min PERIOD $dest_clk]
167+
167168
<: } :>
168169
# Reset signals
169170
set_false_path -quiet \

library/axi_dmac/data_mover.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ module dmac_data_mover #(
5151
input bl_ready,
5252
output reg [BEATS_PER_BURST_WIDTH-1:0] measured_last_burst_length,
5353

54+
output [ID_WIDTH-1:0] source_id,
55+
output source_eot,
56+
5457
output xfer_req,
5558

5659
output s_axi_ready,
@@ -98,6 +101,9 @@ assign xfer_req = active;
98101

99102
assign response_id = id;
100103

104+
assign source_id = id;
105+
assign source_eot = eot;
106+
101107
assign last = eot ? last_eot : last_non_eot;
102108

103109
assign s_axi_ready = (pending_burst & active) & ~transfer_abort_s;

library/axi_dmac/request_arb.v

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,13 @@ localparam BEATS_PER_BURST_WIDTH_DEST = BYTES_PER_BURST_WIDTH - BYTES_PER_BEAT_W
198198

199199
localparam BURSTS_PER_TRANSFER_WIDTH = DMA_LENGTH_WIDTH - BYTES_PER_BURST_WIDTH;
200200

201-
reg eot_mem[0:2**ID_WIDTH-1];
201+
reg eot_mem_src[0:2**ID_WIDTH-1];
202+
reg eot_mem_dest[0:2**ID_WIDTH-1];
202203
wire request_eot;
204+
wire source_eot;
203205

204206
wire [ID_WIDTH-1:0] request_id;
207+
wire [ID_WIDTH-1:0] source_id;
205208
wire [ID_WIDTH-1:0] response_id;
206209

207210
wire enabled_src;
@@ -288,7 +291,12 @@ assign dbg_src_response_id = src_response_id;
288291

289292
always @(posedge req_clk)
290293
begin
291-
eot_mem[request_id] <= request_eot;
294+
eot_mem_src[request_id] <= request_eot;
295+
end
296+
297+
always @(posedge src_clk)
298+
begin
299+
eot_mem_dest[source_id] <= source_eot;
292300
end
293301

294302
always @(posedge req_clk)
@@ -311,8 +319,8 @@ assign dest_clk = m_dest_axi_aclk;
311319
assign dest_ext_resetn = m_dest_axi_aresetn;
312320

313321
wire [ID_WIDTH-1:0] dest_address_id;
314-
wire dest_address_eot = eot_mem[dest_address_id];
315-
wire dest_response_eot = eot_mem[dest_response_id];
322+
wire dest_address_eot = eot_mem_dest[dest_address_id];
323+
wire dest_response_eot = eot_mem_dest[dest_response_id];
316324

317325
assign dbg_dest_address_id = dest_address_id;
318326
assign dbg_dest_data_id = dest_data_response_id;
@@ -442,8 +450,8 @@ assign dest_ext_resetn = 1'b1;
442450

443451
wire [ID_WIDTH-1:0] data_id;
444452

445-
wire data_eot = eot_mem[data_id];
446-
wire response_eot = eot_mem[dest_response_id];
453+
wire data_eot = eot_mem_dest[data_id];
454+
wire response_eot = eot_mem_dest[dest_response_id];
447455

448456
assign dest_data_request_id = dest_request_id;
449457

@@ -504,8 +512,8 @@ assign dest_ext_resetn = 1'b1;
504512

505513
wire [ID_WIDTH-1:0] data_id;
506514

507-
wire data_eot = eot_mem[data_id];
508-
wire response_eot = eot_mem[dest_response_id];
515+
wire data_eot = eot_mem_dest[data_id];
516+
wire response_eot = eot_mem_dest[dest_response_id];
509517

510518
assign dest_data_request_id = dest_request_id;
511519

@@ -560,12 +568,15 @@ end endgenerate
560568

561569
generate if (DMA_TYPE_SRC == DMA_TYPE_MM_AXI) begin
562570

571+
assign source_id = src_address_id;
572+
assign source_eot = src_address_eot;
573+
563574
assign src_clk = m_src_axi_aclk;
564575
assign src_ext_resetn = m_src_axi_aresetn;
565576

566577
wire [ID_WIDTH-1:0] src_data_id;
567578
wire [ID_WIDTH-1:0] src_address_id;
568-
wire src_address_eot = eot_mem[src_address_id];
579+
wire src_address_eot = eot_mem_src[src_address_id];
569580

570581
assign dbg_src_address_id = src_address_id;
571582
assign dbg_src_data_id = src_data_id;
@@ -644,7 +655,7 @@ if (DMA_TYPE_SRC == DMA_TYPE_STREAM_AXI) begin
644655
assign src_clk = s_axis_aclk;
645656
assign src_ext_resetn = 1'b1;
646657

647-
wire src_eot = eot_mem[src_response_id];
658+
wire src_eot = eot_mem_src[src_response_id];
648659

649660
assign dbg_src_address_id = 'h00;
650661
assign dbg_src_data_id = 'h00;
@@ -680,6 +691,9 @@ dmac_src_axi_stream #(
680691
.bl_ready(src_bl_ready),
681692
.measured_last_burst_length(src_burst_length),
682693

694+
.source_id(source_id),
695+
.source_eot(source_eot),
696+
683697
.fifo_valid(src_valid),
684698
.fifo_data(src_data),
685699
.fifo_last(src_last),
@@ -701,10 +715,13 @@ end
701715

702716
if (DMA_TYPE_SRC == DMA_TYPE_FIFO) begin
703717

718+
assign source_id = src_response_id;
719+
assign source_eot = src_eot;
720+
704721
assign src_clk = fifo_wr_clk;
705722
assign src_ext_resetn = 1'b1;
706723

707-
wire src_eot = eot_mem[src_response_id];
724+
wire src_eot = eot_mem_src[src_response_id];
708725

709726
assign dbg_src_address_id = 'h00;
710727
assign dbg_src_data_id = 'h00;

library/axi_dmac/src_axi_stream.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ module dmac_src_axi_stream #(
5454
input bl_ready,
5555
output [BEATS_PER_BURST_WIDTH-1:0] measured_last_burst_length,
5656

57+
output [ID_WIDTH-1:0] source_id,
58+
output source_eot,
59+
5760
output s_axis_ready,
5861
input s_axis_valid,
5962
input [S_AXIS_DATA_WIDTH-1:0] s_axis_data,
@@ -93,6 +96,9 @@ dmac_data_mover # (
9396
.bl_ready(bl_ready),
9497
.measured_last_burst_length(measured_last_burst_length),
9598

99+
.source_id(source_id),
100+
.source_eot(source_eot),
101+
96102
.req_valid(req_valid),
97103
.req_ready(req_ready),
98104
.req_last_burst_length(req_last_burst_length),

0 commit comments

Comments
 (0)