@@ -111,6 +111,8 @@ reg store_last_word;
111
111
112
112
reg [15 :0 ] frame_ptr_reg = 16'd0 , frame_ptr_next;
113
113
114
+ reg [DATA_WIDTH- 1 :0 ] s_axis_tdata_masked;
115
+
114
116
// frame length counters
115
117
reg [15 :0 ] short_counter_reg = 16'd0 , short_counter_next = 16'd0 ;
116
118
reg [15 :0 ] long_counter_reg = 16'd0 , long_counter_next = 16'd0 ;
@@ -175,13 +177,21 @@ always @* begin
175
177
status_frame_length_next = status_frame_length_reg;
176
178
status_frame_original_length_next = status_frame_original_length_reg;
177
179
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
+
178
188
case (state_reg)
179
189
STATE_IDLE: begin
180
190
// idle state
181
191
// accept data next cycle if output register ready next cycle
182
192
s_axis_tready_next = m_axis_tready_int_early && (! status_valid_reg || status_ready);
183
193
184
- m_axis_tdata_int = s_axis_tdata ;
194
+ m_axis_tdata_int = s_axis_tdata_masked ;
185
195
m_axis_tkeep_int = s_axis_tkeep;
186
196
m_axis_tvalid_int = s_axis_tvalid;
187
197
m_axis_tlast_int = s_axis_tlast;
@@ -279,7 +289,7 @@ always @* begin
279
289
// accept data next cycle if output register ready next cycle
280
290
s_axis_tready_next = m_axis_tready_int_early;
281
291
282
- m_axis_tdata_int = s_axis_tdata ;
292
+ m_axis_tdata_int = s_axis_tdata_masked ;
283
293
m_axis_tkeep_int = s_axis_tkeep;
284
294
m_axis_tvalid_int = s_axis_tvalid;
285
295
m_axis_tlast_int = s_axis_tlast;
0 commit comments