@@ -115,6 +115,8 @@ initial begin
115
115
end
116
116
end
117
117
118
+ wire [S_KEEP_WIDTH- 1 :0 ] s_axis_tkeep_int = S_KEEP_ENABLE ? s_axis_tkeep : {S_KEEP_WIDTH{1'b1 }};
119
+
118
120
generate
119
121
120
122
if (M_BYTE_LANES == S_BYTE_LANES) begin : bypass
@@ -123,7 +125,7 @@ if (M_BYTE_LANES == S_BYTE_LANES) begin : bypass
123
125
assign s_axis_tready = m_axis_tready;
124
126
125
127
assign m_axis_tdata = s_axis_tdata;
126
- assign m_axis_tkeep = M_KEEP_ENABLE ? s_axis_tkeep : {M_KEEP_WIDTH{1'b1 }};
128
+ assign m_axis_tkeep = ( M_KEEP_ENABLE && S_KEEP_ENABLE) ? s_axis_tkeep : {M_KEEP_WIDTH{1'b1 }};
127
129
assign m_axis_tvalid = s_axis_tvalid;
128
130
assign m_axis_tlast = s_axis_tlast;
129
131
assign m_axis_tid = ID_ENABLE ? s_axis_tid : {ID_WIDTH{1'b0 }};
@@ -175,10 +177,10 @@ end else if (M_BYTE_LANES > S_BYTE_LANES) begin : upsize
175
177
176
178
if (seg_reg == 0 ) begin
177
179
m_axis_tdata_reg[seg_reg* SEG_DATA_WIDTH + : SEG_DATA_WIDTH] <= s_axis_tvalid_reg ? s_axis_tdata_reg : s_axis_tdata;
178
- m_axis_tkeep_reg <= s_axis_tvalid_reg ? s_axis_tkeep_reg : s_axis_tkeep ;
180
+ m_axis_tkeep_reg <= s_axis_tvalid_reg ? s_axis_tkeep_reg : s_axis_tkeep_int ;
179
181
end else begin
180
182
m_axis_tdata_reg[seg_reg* SEG_DATA_WIDTH + : SEG_DATA_WIDTH] <= s_axis_tdata;
181
- m_axis_tkeep_reg[seg_reg* SEG_KEEP_WIDTH + : SEG_KEEP_WIDTH] <= s_axis_tkeep ;
183
+ m_axis_tkeep_reg[seg_reg* SEG_KEEP_WIDTH + : SEG_KEEP_WIDTH] <= s_axis_tkeep_int ;
182
184
end
183
185
m_axis_tlast_reg <= s_axis_tvalid_reg ? s_axis_tlast_reg : s_axis_tlast;
184
186
m_axis_tid_reg <= s_axis_tvalid_reg ? s_axis_tid_reg : s_axis_tid;
@@ -207,7 +209,7 @@ end else if (M_BYTE_LANES > S_BYTE_LANES) begin : upsize
207
209
end else if (s_axis_tvalid && s_axis_tready) begin
208
210
// store input data in skid buffer
209
211
s_axis_tdata_reg <= s_axis_tdata;
210
- s_axis_tkeep_reg <= s_axis_tkeep ;
212
+ s_axis_tkeep_reg <= s_axis_tkeep_int ;
211
213
s_axis_tvalid_reg <= 1'b1 ;
212
214
s_axis_tlast_reg <= s_axis_tlast;
213
215
s_axis_tid_reg <= s_axis_tid;
@@ -264,7 +266,7 @@ end else begin : downsize
264
266
// output register empty
265
267
266
268
m_axis_tdata_reg <= s_axis_tvalid_reg ? s_axis_tdata_reg : s_axis_tdata;
267
- m_axis_tkeep_reg <= s_axis_tvalid_reg ? s_axis_tkeep_reg : s_axis_tkeep ;
269
+ m_axis_tkeep_reg <= s_axis_tvalid_reg ? s_axis_tkeep_reg : s_axis_tkeep_int ;
268
270
m_axis_tlast_reg <= 1'b0 ;
269
271
m_axis_tid_reg <= s_axis_tvalid_reg ? s_axis_tid_reg : s_axis_tid;
270
272
m_axis_tdest_reg <= s_axis_tvalid_reg ? s_axis_tdest_reg : s_axis_tdest;
@@ -284,15 +286,15 @@ end else begin : downsize
284
286
end else if (s_axis_tvalid && s_axis_tready) begin
285
287
// buffer is empty; store from input
286
288
s_axis_tdata_reg <= s_axis_tdata >> SEG_DATA_WIDTH;
287
- s_axis_tkeep_reg <= s_axis_tkeep >> SEG_KEEP_WIDTH;
289
+ s_axis_tkeep_reg <= s_axis_tkeep_int >> SEG_KEEP_WIDTH;
288
290
s_axis_tlast_reg <= s_axis_tlast;
289
291
s_axis_tid_reg <= s_axis_tid;
290
292
s_axis_tdest_reg <= s_axis_tdest;
291
293
s_axis_tuser_reg <= s_axis_tuser;
292
294
293
295
m_axis_tvalid_reg <= 1'b1 ;
294
296
295
- if ((s_axis_tkeep >> SEG_KEEP_WIDTH) == 0 ) begin
297
+ if (S_KEEP_ENABLE && (s_axis_tkeep_int >> SEG_KEEP_WIDTH) == 0 ) begin
296
298
s_axis_tvalid_reg <= 1'b0 ;
297
299
m_axis_tlast_reg <= s_axis_tlast;
298
300
end else begin
@@ -302,7 +304,7 @@ end else begin : downsize
302
304
end else if (s_axis_tvalid && s_axis_tready) begin
303
305
// store input data
304
306
s_axis_tdata_reg <= s_axis_tdata;
305
- s_axis_tkeep_reg <= s_axis_tkeep ;
307
+ s_axis_tkeep_reg <= s_axis_tkeep_int ;
306
308
s_axis_tvalid_reg <= 1'b1 ;
307
309
s_axis_tlast_reg <= s_axis_tlast;
308
310
s_axis_tid_reg <= s_axis_tid;
0 commit comments