Skip to content

Commit e0a1a73

Browse files
committed
Mask tdata with tkeep
1 parent 1d5a4db commit e0a1a73

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

rtl/axis_frame_length_adjust.v

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ reg store_last_word;
111111

112112
reg [15:0] frame_ptr_reg = 16'd0, frame_ptr_next;
113113

114+
reg [DATA_WIDTH-1:0] s_axis_tdata_masked;
115+
114116
// frame length counters
115117
reg [15:0] short_counter_reg = 16'd0, short_counter_next = 16'd0;
116118
reg [15:0] long_counter_reg = 16'd0, long_counter_next = 16'd0;
@@ -175,13 +177,21 @@ always @* begin
175177
status_frame_length_next = status_frame_length_reg;
176178
status_frame_original_length_next = status_frame_original_length_reg;
177179

180+
if (KEEP_ENABLE) begin
181+
for (i = 0; i < KEEP_WIDTH; i = i + 1) begin
182+
s_axis_tdata_masked[i*DATA_WORD_WIDTH +: DATA_WORD_WIDTH] = s_axis_tkeep[i] ? s_axis_tdata[i*DATA_WORD_WIDTH +: DATA_WORD_WIDTH] : {DATA_WORD_WIDTH{1'b0}};
183+
end
184+
end else begin
185+
s_axis_tdata_masked = s_axis_tdata;
186+
end
187+
178188
case (state_reg)
179189
STATE_IDLE: begin
180190
// idle state
181191
// accept data next cycle if output register ready next cycle
182192
s_axis_tready_next = m_axis_tready_int_early && (!status_valid_reg || status_ready);
183193

184-
m_axis_tdata_int = s_axis_tdata;
194+
m_axis_tdata_int = s_axis_tdata_masked;
185195
m_axis_tkeep_int = s_axis_tkeep;
186196
m_axis_tvalid_int = s_axis_tvalid;
187197
m_axis_tlast_int = s_axis_tlast;
@@ -279,7 +289,7 @@ always @* begin
279289
// accept data next cycle if output register ready next cycle
280290
s_axis_tready_next = m_axis_tready_int_early;
281291

282-
m_axis_tdata_int = s_axis_tdata;
292+
m_axis_tdata_int = s_axis_tdata_masked;
283293
m_axis_tkeep_int = s_axis_tkeep;
284294
m_axis_tvalid_int = s_axis_tvalid;
285295
m_axis_tlast_int = s_axis_tlast;

0 commit comments

Comments
 (0)