mirror of
https://github.com/alexforencich/verilog-ethernet.git
synced 2025-01-14 06:43:18 +08:00
Mask tdata with tkeep
This commit is contained in:
parent
1d5a4db0d5
commit
e0a1a73ce0
@ -111,6 +111,8 @@ reg store_last_word;
|
||||
|
||||
reg [15:0] frame_ptr_reg = 16'd0, frame_ptr_next;
|
||||
|
||||
reg [DATA_WIDTH-1:0] s_axis_tdata_masked;
|
||||
|
||||
// frame length counters
|
||||
reg [15:0] short_counter_reg = 16'd0, short_counter_next = 16'd0;
|
||||
reg [15:0] long_counter_reg = 16'd0, long_counter_next = 16'd0;
|
||||
@ -175,13 +177,21 @@ always @* begin
|
||||
status_frame_length_next = status_frame_length_reg;
|
||||
status_frame_original_length_next = status_frame_original_length_reg;
|
||||
|
||||
if (KEEP_ENABLE) begin
|
||||
for (i = 0; i < KEEP_WIDTH; i = i + 1) begin
|
||||
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}};
|
||||
end
|
||||
end else begin
|
||||
s_axis_tdata_masked = s_axis_tdata;
|
||||
end
|
||||
|
||||
case (state_reg)
|
||||
STATE_IDLE: begin
|
||||
// idle state
|
||||
// accept data next cycle if output register ready next cycle
|
||||
s_axis_tready_next = m_axis_tready_int_early && (!status_valid_reg || status_ready);
|
||||
|
||||
m_axis_tdata_int = s_axis_tdata;
|
||||
m_axis_tdata_int = s_axis_tdata_masked;
|
||||
m_axis_tkeep_int = s_axis_tkeep;
|
||||
m_axis_tvalid_int = s_axis_tvalid;
|
||||
m_axis_tlast_int = s_axis_tlast;
|
||||
@ -279,7 +289,7 @@ always @* begin
|
||||
// accept data next cycle if output register ready next cycle
|
||||
s_axis_tready_next = m_axis_tready_int_early;
|
||||
|
||||
m_axis_tdata_int = s_axis_tdata;
|
||||
m_axis_tdata_int = s_axis_tdata_masked;
|
||||
m_axis_tkeep_int = s_axis_tkeep;
|
||||
m_axis_tvalid_int = s_axis_tvalid;
|
||||
m_axis_tlast_int = s_axis_tlast;
|
||||
|
Loading…
x
Reference in New Issue
Block a user