mirror of
https://github.com/fpganinja/taxi.git
synced 2026-05-26 09:20:58 -07:00
eth: Remove padding logic from 10G/25G MAC TX modules
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -21,9 +21,7 @@ module taxi_axis_baser_tx_32 #
|
|||||||
parameter HDR_W = 2,
|
parameter HDR_W = 2,
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter PTP_TS_W = 96,
|
parameter PTP_TS_W = 96,
|
||||||
parameter logic TX_CPL_CTRL_IN_TUSER = 1'b1
|
parameter logic TX_CPL_CTRL_IN_TUSER = 1'b1
|
||||||
@@ -84,7 +82,6 @@ localparam USER_W = TX_CPL_CTRL_IN_TUSER ? 2 : 1;
|
|||||||
localparam TX_TAG_W = s_axis_tx.ID_W;
|
localparam TX_TAG_W = s_axis_tx.ID_W;
|
||||||
|
|
||||||
localparam EMPTY_W = $clog2(KEEP_W);
|
localparam EMPTY_W = $clog2(KEEP_W);
|
||||||
localparam MIN_LEN_W = $clog2(MIN_FRAME_LEN-4-KEEP_W+1);
|
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (DATA_W != 32)
|
if (DATA_W != 32)
|
||||||
@@ -162,7 +159,6 @@ typedef enum logic [3:0] {
|
|||||||
STATE_IDLE,
|
STATE_IDLE,
|
||||||
STATE_PREAMBLE,
|
STATE_PREAMBLE,
|
||||||
STATE_PAYLOAD,
|
STATE_PAYLOAD,
|
||||||
STATE_PAD,
|
|
||||||
STATE_FCS_1,
|
STATE_FCS_1,
|
||||||
STATE_FCS_2,
|
STATE_FCS_2,
|
||||||
STATE_FCS_3,
|
STATE_FCS_3,
|
||||||
@@ -191,7 +187,6 @@ logic extra_cycle;
|
|||||||
logic frame_reg = 1'b0, frame_next;
|
logic frame_reg = 1'b0, frame_next;
|
||||||
logic frame_error_reg = 1'b0, frame_error_next;
|
logic frame_error_reg = 1'b0, frame_error_next;
|
||||||
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
||||||
logic [MIN_LEN_W-1:0] frame_min_count_reg = '0, frame_min_count_next;
|
|
||||||
logic [2:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
logic [2:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
||||||
logic is_mcast_reg = 1'b0, is_mcast_next;
|
logic is_mcast_reg = 1'b0, is_mcast_next;
|
||||||
logic is_bcast_reg = 1'b0, is_bcast_next;
|
logic is_bcast_reg = 1'b0, is_bcast_next;
|
||||||
@@ -355,7 +350,6 @@ always_comb begin
|
|||||||
frame_next = frame_reg;
|
frame_next = frame_reg;
|
||||||
frame_error_next = frame_error_reg;
|
frame_error_next = frame_error_reg;
|
||||||
frame_oversize_next = frame_oversize_reg;
|
frame_oversize_next = frame_oversize_reg;
|
||||||
frame_min_count_next = frame_min_count_reg;
|
|
||||||
hdr_ptr_next = hdr_ptr_reg;
|
hdr_ptr_next = hdr_ptr_reg;
|
||||||
is_mcast_next = is_mcast_reg;
|
is_mcast_next = is_mcast_reg;
|
||||||
is_bcast_next = is_bcast_reg;
|
is_bcast_next = is_bcast_reg;
|
||||||
@@ -415,13 +409,6 @@ always_comb begin
|
|||||||
state_next = state_reg;
|
state_next = state_reg;
|
||||||
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
||||||
end else begin
|
end else begin
|
||||||
// counter for min frame length enforcement
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
frame_min_count_next = MIN_LEN_W'(frame_min_count_reg - KEEP_W);
|
|
||||||
end else begin
|
|
||||||
frame_min_count_next = 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// counter to measure frame length
|
// counter to measure frame length
|
||||||
if (&frame_len_reg[15:2] == 0) begin
|
if (&frame_len_reg[15:2] == 0) begin
|
||||||
frame_len_next = frame_len_reg + 16'(KEEP_W);
|
frame_len_next = frame_len_reg + 16'(KEEP_W);
|
||||||
@@ -468,7 +455,6 @@ always_comb begin
|
|||||||
// idle state - wait for data
|
// idle state - wait for data
|
||||||
frame_error_next = 1'b0;
|
frame_error_next = 1'b0;
|
||||||
frame_oversize_next = 1'b0;
|
frame_oversize_next = 1'b0;
|
||||||
frame_min_count_next = MIN_LEN_W'(MIN_FRAME_LEN-4);
|
|
||||||
hdr_ptr_next = 0;
|
hdr_ptr_next = 0;
|
||||||
frame_len_next = 0;
|
frame_len_next = 0;
|
||||||
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len;
|
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len;
|
||||||
@@ -538,50 +524,17 @@ always_comb begin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0) begin
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
s_empty_next = 0;
|
|
||||||
end else if (keep2empty(s_axis_tx.tkeep) > 2'(KEEP_W-frame_min_count_reg)) begin
|
|
||||||
s_empty_next = 2'(KEEP_W-frame_min_count_reg);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
||||||
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
||||||
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0 && frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
state_next = STATE_FCS_1;
|
state_next = STATE_FCS_1;
|
||||||
end
|
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
STATE_PAD: begin
|
|
||||||
// pad frame to MIN_FRAME_LEN
|
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
|
||||||
|
|
||||||
output_data_next = s_tdata_reg;
|
|
||||||
output_type_next = OUTPUT_TYPE_DATA;
|
|
||||||
|
|
||||||
s_tdata_next = 32'd0;
|
|
||||||
s_empty_next = 0;
|
|
||||||
|
|
||||||
stat_tx_byte_next = 3'(KEEP_W);
|
|
||||||
|
|
||||||
update_crc = 1'b1;
|
|
||||||
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
s_empty_next = 2'(KEEP_W-frame_min_count_reg);
|
|
||||||
state_next = STATE_FCS_1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_FCS_1: begin
|
STATE_FCS_1: begin
|
||||||
// last cycle
|
// last cycle
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
@@ -720,7 +673,6 @@ always_ff @(posedge clk) begin
|
|||||||
frame_reg <= frame_next;
|
frame_reg <= frame_next;
|
||||||
frame_error_reg <= frame_error_next;
|
frame_error_reg <= frame_error_next;
|
||||||
frame_oversize_reg <= frame_oversize_next;
|
frame_oversize_reg <= frame_oversize_next;
|
||||||
frame_min_count_reg <= frame_min_count_next;
|
|
||||||
hdr_ptr_reg <= hdr_ptr_next;
|
hdr_ptr_reg <= hdr_ptr_next;
|
||||||
is_mcast_reg <= is_mcast_next;
|
is_mcast_reg <= is_mcast_next;
|
||||||
is_bcast_reg <= is_bcast_next;
|
is_bcast_reg <= is_bcast_next;
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ module taxi_axis_baser_tx_64 #
|
|||||||
parameter HDR_W = 2,
|
parameter HDR_W = 2,
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||||
@@ -85,7 +83,6 @@ localparam USER_W = TX_CPL_CTRL_IN_TUSER ? 2 : 1;
|
|||||||
localparam TX_TAG_W = s_axis_tx.ID_W;
|
localparam TX_TAG_W = s_axis_tx.ID_W;
|
||||||
|
|
||||||
localparam EMPTY_W = $clog2(KEEP_W);
|
localparam EMPTY_W = $clog2(KEEP_W);
|
||||||
localparam MIN_LEN_W = $clog2(MIN_FRAME_LEN-4-KEEP_W+1);
|
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (DATA_W != 64)
|
if (DATA_W != 64)
|
||||||
@@ -167,7 +164,6 @@ typedef enum logic [3:0] {
|
|||||||
typedef enum logic [2:0] {
|
typedef enum logic [2:0] {
|
||||||
STATE_IDLE,
|
STATE_IDLE,
|
||||||
STATE_PAYLOAD,
|
STATE_PAYLOAD,
|
||||||
STATE_PAD,
|
|
||||||
STATE_FCS_1,
|
STATE_FCS_1,
|
||||||
STATE_FCS_2,
|
STATE_FCS_2,
|
||||||
STATE_ERR,
|
STATE_ERR,
|
||||||
@@ -200,7 +196,6 @@ logic frame_start_reg = 1'b0, frame_start_next;
|
|||||||
logic frame_reg = 1'b0, frame_next;
|
logic frame_reg = 1'b0, frame_next;
|
||||||
logic frame_error_reg = 1'b0, frame_error_next;
|
logic frame_error_reg = 1'b0, frame_error_next;
|
||||||
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
||||||
logic [MIN_LEN_W-1:0] frame_min_count_reg = '0, frame_min_count_next;
|
|
||||||
logic [1:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
logic [1:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
||||||
logic is_mcast_reg = 1'b0, is_mcast_next;
|
logic is_mcast_reg = 1'b0, is_mcast_next;
|
||||||
logic is_bcast_reg = 1'b0, is_bcast_next;
|
logic is_bcast_reg = 1'b0, is_bcast_next;
|
||||||
@@ -399,7 +394,6 @@ always_comb begin
|
|||||||
frame_next = frame_reg;
|
frame_next = frame_reg;
|
||||||
frame_error_next = frame_error_reg;
|
frame_error_next = frame_error_reg;
|
||||||
frame_oversize_next = frame_oversize_reg;
|
frame_oversize_next = frame_oversize_reg;
|
||||||
frame_min_count_next = frame_min_count_reg;
|
|
||||||
hdr_ptr_next = hdr_ptr_reg;
|
hdr_ptr_next = hdr_ptr_reg;
|
||||||
is_mcast_next = is_mcast_reg;
|
is_mcast_next = is_mcast_reg;
|
||||||
is_bcast_next = is_bcast_reg;
|
is_bcast_next = is_bcast_reg;
|
||||||
@@ -445,13 +439,6 @@ always_comb begin
|
|||||||
frame_start_next = frame_start_reg;
|
frame_start_next = frame_start_reg;
|
||||||
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
||||||
end else begin
|
end else begin
|
||||||
// counter for min frame length enforcement
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
frame_min_count_next = MIN_LEN_W'(frame_min_count_reg - KEEP_W);
|
|
||||||
end else begin
|
|
||||||
frame_min_count_next = 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// counter to measure frame length
|
// counter to measure frame length
|
||||||
if (&frame_len_reg[15:3] == 0) begin
|
if (&frame_len_reg[15:3] == 0) begin
|
||||||
frame_len_next = frame_len_reg + 16'(KEEP_W);
|
frame_len_next = frame_len_reg + 16'(KEEP_W);
|
||||||
@@ -503,7 +490,6 @@ always_comb begin
|
|||||||
// idle state - wait for data
|
// idle state - wait for data
|
||||||
frame_error_next = 1'b0;
|
frame_error_next = 1'b0;
|
||||||
frame_oversize_next = 1'b0;
|
frame_oversize_next = 1'b0;
|
||||||
frame_min_count_next = MIN_LEN_W'(MIN_FRAME_LEN-4-KEEP_W);
|
|
||||||
hdr_ptr_next = 0;
|
hdr_ptr_next = 0;
|
||||||
frame_len_next = 0;
|
frame_len_next = 0;
|
||||||
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len ^ 4;
|
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len ^ 4;
|
||||||
@@ -559,58 +545,21 @@ always_comb begin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0) begin
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
s_empty_next = 0;
|
|
||||||
end else if (keep2empty(s_axis_tx.tkeep) > 3'(KEEP_W-frame_min_count_reg)) begin
|
|
||||||
s_empty_next = 3'(KEEP_W-frame_min_count_reg);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
||||||
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
||||||
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0 && frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
if (frame_error_next) begin
|
if (frame_error_next) begin
|
||||||
state_next = STATE_ERR;
|
state_next = STATE_ERR;
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_FCS_1;
|
state_next = STATE_FCS_1;
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
STATE_PAD: begin
|
|
||||||
// pad frame to MIN_FRAME_LEN
|
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
|
||||||
|
|
||||||
output_data_next = s_tdata_reg;
|
|
||||||
output_type_next = OUTPUT_TYPE_DATA;
|
|
||||||
|
|
||||||
s_tdata_next = 64'd0;
|
|
||||||
s_empty_next = 0;
|
|
||||||
|
|
||||||
stat_tx_byte_next = 4'(KEEP_W);
|
|
||||||
|
|
||||||
update_crc = 1'b1;
|
|
||||||
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(KEEP_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
s_empty_next = 3'(KEEP_W-frame_min_count_reg);
|
|
||||||
if (frame_error_reg) begin
|
|
||||||
state_next = STATE_ERR;
|
|
||||||
end else begin
|
|
||||||
state_next = STATE_FCS_1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_FCS_1: begin
|
STATE_FCS_1: begin
|
||||||
// last cycle
|
// last cycle
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
@@ -762,7 +711,6 @@ always_ff @(posedge clk) begin
|
|||||||
frame_reg <= frame_next;
|
frame_reg <= frame_next;
|
||||||
frame_error_reg <= frame_error_next;
|
frame_error_reg <= frame_error_next;
|
||||||
frame_oversize_reg <= frame_oversize_next;
|
frame_oversize_reg <= frame_oversize_next;
|
||||||
frame_min_count_reg <= frame_min_count_next;
|
|
||||||
hdr_ptr_reg <= hdr_ptr_next;
|
hdr_ptr_reg <= hdr_ptr_next;
|
||||||
is_mcast_reg <= is_mcast_next;
|
is_mcast_reg <= is_mcast_next;
|
||||||
is_bcast_reg <= is_bcast_next;
|
is_bcast_reg <= is_bcast_next;
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ module taxi_axis_xgmii_tx_32 #
|
|||||||
parameter CTRL_W = (DATA_W/8),
|
parameter CTRL_W = (DATA_W/8),
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter PTP_TS_W = 96,
|
parameter PTP_TS_W = 96,
|
||||||
parameter logic TX_CPL_CTRL_IN_TUSER = 1'b1
|
parameter logic TX_CPL_CTRL_IN_TUSER = 1'b1
|
||||||
@@ -83,7 +81,6 @@ localparam USER_W = TX_CPL_CTRL_IN_TUSER ? 2 : 1;
|
|||||||
localparam TX_TAG_W = s_axis_tx.ID_W;
|
localparam TX_TAG_W = s_axis_tx.ID_W;
|
||||||
|
|
||||||
localparam EMPTY_W = $clog2(KEEP_W);
|
localparam EMPTY_W = $clog2(KEEP_W);
|
||||||
localparam MIN_LEN_W = $clog2(MIN_FRAME_LEN-4-CTRL_W+1);
|
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (DATA_W != 32)
|
if (DATA_W != 32)
|
||||||
@@ -123,7 +120,6 @@ typedef enum logic [3:0] {
|
|||||||
STATE_IDLE,
|
STATE_IDLE,
|
||||||
STATE_PREAMBLE,
|
STATE_PREAMBLE,
|
||||||
STATE_PAYLOAD,
|
STATE_PAYLOAD,
|
||||||
STATE_PAD,
|
|
||||||
STATE_FCS_1,
|
STATE_FCS_1,
|
||||||
STATE_FCS_2,
|
STATE_FCS_2,
|
||||||
STATE_FCS_3,
|
STATE_FCS_3,
|
||||||
@@ -152,7 +148,6 @@ logic extra_cycle;
|
|||||||
logic frame_reg = 1'b0, frame_next;
|
logic frame_reg = 1'b0, frame_next;
|
||||||
logic frame_error_reg = 1'b0, frame_error_next;
|
logic frame_error_reg = 1'b0, frame_error_next;
|
||||||
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
||||||
logic [MIN_LEN_W-1:0] frame_min_count_reg = '0, frame_min_count_next;
|
|
||||||
logic [2:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
logic [2:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
||||||
logic is_mcast_reg = 1'b0, is_mcast_next;
|
logic is_mcast_reg = 1'b0, is_mcast_next;
|
||||||
logic is_bcast_reg = 1'b0, is_bcast_next;
|
logic is_bcast_reg = 1'b0, is_bcast_next;
|
||||||
@@ -309,7 +304,6 @@ always_comb begin
|
|||||||
frame_next = frame_reg;
|
frame_next = frame_reg;
|
||||||
frame_error_next = frame_error_reg;
|
frame_error_next = frame_error_reg;
|
||||||
frame_oversize_next = frame_oversize_reg;
|
frame_oversize_next = frame_oversize_reg;
|
||||||
frame_min_count_next = frame_min_count_reg;
|
|
||||||
hdr_ptr_next = hdr_ptr_reg;
|
hdr_ptr_next = hdr_ptr_reg;
|
||||||
is_mcast_next = is_mcast_reg;
|
is_mcast_next = is_mcast_reg;
|
||||||
is_bcast_next = is_bcast_reg;
|
is_bcast_next = is_bcast_reg;
|
||||||
@@ -371,13 +365,6 @@ always_comb begin
|
|||||||
// frame_start_next = frame_start_reg;
|
// frame_start_next = frame_start_reg;
|
||||||
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
||||||
end else begin
|
end else begin
|
||||||
// counter for min frame length enforcement
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
frame_min_count_next = MIN_LEN_W'(frame_min_count_reg - CTRL_W);
|
|
||||||
end else begin
|
|
||||||
frame_min_count_next = 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// counter to measure frame length
|
// counter to measure frame length
|
||||||
if (&frame_len_reg[15:2] == 0) begin
|
if (&frame_len_reg[15:2] == 0) begin
|
||||||
frame_len_next = frame_len_reg + 16'(CTRL_W);
|
frame_len_next = frame_len_reg + 16'(CTRL_W);
|
||||||
@@ -424,7 +411,6 @@ always_comb begin
|
|||||||
// idle state - wait for data
|
// idle state - wait for data
|
||||||
frame_error_next = 1'b0;
|
frame_error_next = 1'b0;
|
||||||
frame_oversize_next = 1'b0;
|
frame_oversize_next = 1'b0;
|
||||||
frame_min_count_next = MIN_LEN_W'(MIN_FRAME_LEN-4);
|
|
||||||
hdr_ptr_next = 0;
|
hdr_ptr_next = 0;
|
||||||
frame_len_next = 0;
|
frame_len_next = 0;
|
||||||
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len;
|
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len;
|
||||||
@@ -495,50 +481,17 @@ always_comb begin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0) begin
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
s_empty_next = 0;
|
|
||||||
end else if (keep2empty(s_axis_tx.tkeep) > 2'(CTRL_W-frame_min_count_reg)) begin
|
|
||||||
s_empty_next = 2'(CTRL_W-frame_min_count_reg);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
||||||
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
||||||
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0 && frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
state_next = STATE_FCS_1;
|
state_next = STATE_FCS_1;
|
||||||
end
|
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
STATE_PAD: begin
|
|
||||||
// pad frame to MIN_FRAME_LEN
|
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
|
||||||
|
|
||||||
xgmii_txd_next = s_tdata_reg;
|
|
||||||
xgmii_txc_next = {CTRL_W{1'b0}};
|
|
||||||
|
|
||||||
s_tdata_next = 32'd0;
|
|
||||||
s_empty_next = 0;
|
|
||||||
|
|
||||||
stat_tx_byte_next = 3'(CTRL_W);
|
|
||||||
|
|
||||||
update_crc = 1'b1;
|
|
||||||
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
s_empty_next = 2'(CTRL_W-frame_min_count_reg);
|
|
||||||
state_next = STATE_FCS_1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_FCS_1: begin
|
STATE_FCS_1: begin
|
||||||
// last cycle
|
// last cycle
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
@@ -679,7 +632,6 @@ always_ff @(posedge clk) begin
|
|||||||
frame_reg <= frame_next;
|
frame_reg <= frame_next;
|
||||||
frame_error_reg <= frame_error_next;
|
frame_error_reg <= frame_error_next;
|
||||||
frame_oversize_reg <= frame_oversize_next;
|
frame_oversize_reg <= frame_oversize_next;
|
||||||
frame_min_count_reg <= frame_min_count_next;
|
|
||||||
hdr_ptr_reg <= hdr_ptr_next;
|
hdr_ptr_reg <= hdr_ptr_next;
|
||||||
is_mcast_reg <= is_mcast_next;
|
is_mcast_reg <= is_mcast_next;
|
||||||
is_bcast_reg <= is_bcast_next;
|
is_bcast_reg <= is_bcast_next;
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ module taxi_axis_xgmii_tx_64 #
|
|||||||
parameter CTRL_W = (DATA_W/8),
|
parameter CTRL_W = (DATA_W/8),
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||||
@@ -84,7 +82,6 @@ localparam USER_W = TX_CPL_CTRL_IN_TUSER ? 2 : 1;
|
|||||||
localparam TX_TAG_W = s_axis_tx.ID_W;
|
localparam TX_TAG_W = s_axis_tx.ID_W;
|
||||||
|
|
||||||
localparam EMPTY_W = $clog2(KEEP_W);
|
localparam EMPTY_W = $clog2(KEEP_W);
|
||||||
localparam MIN_LEN_W = $clog2(MIN_FRAME_LEN-4-CTRL_W+1);
|
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (DATA_W != 64)
|
if (DATA_W != 64)
|
||||||
@@ -123,7 +120,6 @@ typedef enum logic [7:0] {
|
|||||||
typedef enum logic [2:0] {
|
typedef enum logic [2:0] {
|
||||||
STATE_IDLE,
|
STATE_IDLE,
|
||||||
STATE_PAYLOAD,
|
STATE_PAYLOAD,
|
||||||
STATE_PAD,
|
|
||||||
STATE_FCS_1,
|
STATE_FCS_1,
|
||||||
STATE_FCS_2,
|
STATE_FCS_2,
|
||||||
STATE_ERR,
|
STATE_ERR,
|
||||||
@@ -154,7 +150,6 @@ logic frame_start_reg = 1'b0, frame_start_next;
|
|||||||
logic frame_reg = 1'b0, frame_next;
|
logic frame_reg = 1'b0, frame_next;
|
||||||
logic frame_error_reg = 1'b0, frame_error_next;
|
logic frame_error_reg = 1'b0, frame_error_next;
|
||||||
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
logic frame_oversize_reg = 1'b0, frame_oversize_next;
|
||||||
logic [MIN_LEN_W-1:0] frame_min_count_reg = '0, frame_min_count_next;
|
|
||||||
logic [1:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
logic [1:0] hdr_ptr_reg = '0, hdr_ptr_next;
|
||||||
logic is_mcast_reg = 1'b0, is_mcast_next;
|
logic is_mcast_reg = 1'b0, is_mcast_next;
|
||||||
logic is_bcast_reg = 1'b0, is_bcast_next;
|
logic is_bcast_reg = 1'b0, is_bcast_next;
|
||||||
@@ -348,7 +343,6 @@ always_comb begin
|
|||||||
frame_next = frame_reg;
|
frame_next = frame_reg;
|
||||||
frame_error_next = frame_error_reg;
|
frame_error_next = frame_error_reg;
|
||||||
frame_oversize_next = frame_oversize_reg;
|
frame_oversize_next = frame_oversize_reg;
|
||||||
frame_min_count_next = frame_min_count_reg;
|
|
||||||
hdr_ptr_next = hdr_ptr_reg;
|
hdr_ptr_next = hdr_ptr_reg;
|
||||||
is_mcast_next = is_mcast_reg;
|
is_mcast_next = is_mcast_reg;
|
||||||
is_bcast_next = is_bcast_reg;
|
is_bcast_next = is_bcast_reg;
|
||||||
@@ -395,13 +389,6 @@ always_comb begin
|
|||||||
frame_start_next = frame_start_reg;
|
frame_start_next = frame_start_reg;
|
||||||
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
s_axis_tx_tready_next = s_axis_tx_tready_reg;
|
||||||
end else begin
|
end else begin
|
||||||
// counter for min frame length enforcement
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
frame_min_count_next = MIN_LEN_W'(frame_min_count_reg - CTRL_W);
|
|
||||||
end else begin
|
|
||||||
frame_min_count_next = 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// counter to measure frame length
|
// counter to measure frame length
|
||||||
if (&frame_len_reg[15:3] == 0) begin
|
if (&frame_len_reg[15:3] == 0) begin
|
||||||
frame_len_next = frame_len_reg + 16'(CTRL_W);
|
frame_len_next = frame_len_reg + 16'(CTRL_W);
|
||||||
@@ -453,7 +440,6 @@ always_comb begin
|
|||||||
// idle state - wait for data
|
// idle state - wait for data
|
||||||
frame_error_next = 1'b0;
|
frame_error_next = 1'b0;
|
||||||
frame_oversize_next = 1'b0;
|
frame_oversize_next = 1'b0;
|
||||||
frame_min_count_next = MIN_LEN_W'(MIN_FRAME_LEN-4-CTRL_W);
|
|
||||||
hdr_ptr_next = 0;
|
hdr_ptr_next = 0;
|
||||||
frame_len_next = 0;
|
frame_len_next = 0;
|
||||||
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len ^ 4;
|
{frame_len_lim_cyc_next, frame_len_lim_last_next} = cfg_tx_max_pkt_len ^ 4;
|
||||||
@@ -510,58 +496,21 @@ always_comb begin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0) begin
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
s_empty_next = 0;
|
|
||||||
end else if (keep2empty(s_axis_tx.tkeep) > 3'(CTRL_W-frame_min_count_reg)) begin
|
|
||||||
s_empty_next = 3'(CTRL_W-frame_min_count_reg);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
if (!s_axis_tx.tvalid || s_axis_tx.tlast || frame_oversize_next) begin
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
frame_error_next = !s_axis_tx.tvalid || s_axis_tx.tuser[0] || frame_oversize_next;
|
||||||
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
stat_tx_err_user_next = s_axis_tx.tuser[0];
|
||||||
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
stat_tx_err_underflow_next = !s_axis_tx.tvalid;
|
||||||
|
|
||||||
if (PADDING_EN && frame_min_count_reg != 0 && frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
if (frame_error_next) begin
|
if (frame_error_next) begin
|
||||||
state_next = STATE_ERR;
|
state_next = STATE_ERR;
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_FCS_1;
|
state_next = STATE_FCS_1;
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
STATE_PAD: begin
|
|
||||||
// pad frame to MIN_FRAME_LEN
|
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
|
||||||
|
|
||||||
xgmii_txd_next = s_tdata_reg;
|
|
||||||
xgmii_txc_next = {CTRL_W{1'b0}};
|
|
||||||
|
|
||||||
s_tdata_next = 64'd0;
|
|
||||||
s_empty_next = 0;
|
|
||||||
|
|
||||||
stat_tx_byte_next = 4'(CTRL_W);
|
|
||||||
|
|
||||||
update_crc = 1'b1;
|
|
||||||
|
|
||||||
if (frame_min_count_reg > MIN_LEN_W'(CTRL_W)) begin
|
|
||||||
state_next = STATE_PAD;
|
|
||||||
end else begin
|
|
||||||
s_empty_next = 3'(CTRL_W-frame_min_count_reg);
|
|
||||||
if (frame_error_reg) begin
|
|
||||||
state_next = STATE_ERR;
|
|
||||||
end else begin
|
|
||||||
state_next = STATE_FCS_1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_FCS_1: begin
|
STATE_FCS_1: begin
|
||||||
// last cycle
|
// last cycle
|
||||||
s_axis_tx_tready_next = frame_next; // drop frame
|
s_axis_tx_tready_next = frame_next; // drop frame
|
||||||
@@ -711,7 +660,6 @@ always_ff @(posedge clk) begin
|
|||||||
frame_reg <= frame_next;
|
frame_reg <= frame_next;
|
||||||
frame_error_reg <= frame_error_next;
|
frame_error_reg <= frame_error_next;
|
||||||
frame_oversize_reg <= frame_oversize_next;
|
frame_oversize_reg <= frame_oversize_next;
|
||||||
frame_min_count_reg <= frame_min_count_next;
|
|
||||||
hdr_ptr_reg <= hdr_ptr_next;
|
hdr_ptr_reg <= hdr_ptr_next;
|
||||||
is_mcast_reg <= is_mcast_next;
|
is_mcast_reg <= is_mcast_next;
|
||||||
is_bcast_reg <= is_bcast_next;
|
is_bcast_reg <= is_bcast_next;
|
||||||
|
|||||||
@@ -445,7 +445,6 @@ if (DATA_W == 64) begin
|
|||||||
.CTRL_W(CTRL_W),
|
.CTRL_W(CTRL_W),
|
||||||
.GBX_IF_EN(TX_GBX_IF_EN),
|
.GBX_IF_EN(TX_GBX_IF_EN),
|
||||||
.GBX_CNT(GBX_CNT),
|
.GBX_CNT(GBX_CNT),
|
||||||
.PADDING_EN(1'b0),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||||
@@ -566,7 +565,6 @@ end else if (DATA_W == 32) begin
|
|||||||
.CTRL_W(CTRL_W),
|
.CTRL_W(CTRL_W),
|
||||||
.GBX_IF_EN(TX_GBX_IF_EN),
|
.GBX_IF_EN(TX_GBX_IF_EN),
|
||||||
.GBX_CNT(GBX_CNT),
|
.GBX_CNT(GBX_CNT),
|
||||||
.PADDING_EN(1'b0),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_W(PTP_TS_W),
|
.PTP_TS_W(PTP_TS_W),
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ if (DATA_W == 64) begin
|
|||||||
.HDR_W(HDR_W),
|
.HDR_W(HDR_W),
|
||||||
.GBX_IF_EN(GBX_IF_EN),
|
.GBX_IF_EN(GBX_IF_EN),
|
||||||
.GBX_CNT(1),
|
.GBX_CNT(1),
|
||||||
.PADDING_EN(1'b0),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||||
@@ -204,7 +203,6 @@ end else begin
|
|||||||
.HDR_W(HDR_W),
|
.HDR_W(HDR_W),
|
||||||
.GBX_IF_EN(GBX_IF_EN),
|
.GBX_IF_EN(GBX_IF_EN),
|
||||||
.GBX_CNT(1),
|
.GBX_CNT(1),
|
||||||
.PADDING_EN(1'b0),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_W(PTP_TS_W),
|
.PTP_TS_W(PTP_TS_W),
|
||||||
|
|||||||
@@ -38,9 +38,7 @@ export PARAM_DATA_W := 32
|
|||||||
export PARAM_HDR_W := 2
|
export PARAM_HDR_W := 2
|
||||||
export PARAM_GBX_IF_EN := 1
|
export PARAM_GBX_IF_EN := 1
|
||||||
export PARAM_GBX_CNT := 1
|
export PARAM_GBX_CNT := 1
|
||||||
export PARAM_PADDING_EN := 1
|
|
||||||
export PARAM_DIC_EN := 1
|
export PARAM_DIC_EN := 1
|
||||||
export PARAM_MIN_FRAME_LEN := 64
|
|
||||||
export PARAM_PTP_TS_EN := 1
|
export PARAM_PTP_TS_EN := 1
|
||||||
export PARAM_PTP_TS_FMT_TOD := 1
|
export PARAM_PTP_TS_FMT_TOD := 1
|
||||||
export PARAM_PTP_TS_W := $(if $(filter-out 1,$(PARAM_PTP_TS_FMT_TOD)),64,96)
|
export PARAM_PTP_TS_W := $(if $(filter-out 1,$(PARAM_PTP_TS_FMT_TOD)),64,96)
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
|
|||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
||||||
total_bytes += max(len(test_data), 60)+4
|
total_bytes += len(test_data)+4
|
||||||
total_pkts += 1
|
total_pkts += 1
|
||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
@@ -151,7 +151,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
|
|||||||
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
||||||
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
||||||
|
|
||||||
assert rx_frame.get_payload() == test_data.ljust(60, b'\x00')
|
assert rx_frame.get_payload() == test_data
|
||||||
assert rx_frame.check_fcs()
|
assert rx_frame.check_fcs()
|
||||||
assert rx_frame.ctrl is None
|
assert rx_frame.ctrl is None
|
||||||
if gbx_cfg is None:
|
if gbx_cfg is None:
|
||||||
@@ -224,8 +224,8 @@ async def run_test_underrun(dut, gbx_cfg=None, ifg=12):
|
|||||||
for stat, val in tb.stats.items():
|
for stat, val in tb.stats.items():
|
||||||
tb.log.info("%s: %d", stat, val)
|
tb.log.info("%s: %d", stat, val)
|
||||||
|
|
||||||
assert tb.stats["stat_tx_byte"] > 64*2 + 32
|
assert tb.stats["stat_tx_byte"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 32
|
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
||||||
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
||||||
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
||||||
@@ -465,9 +465,7 @@ def test_taxi_axis_baser_tx_32(request, gbx_en, dic_en):
|
|||||||
parameters['HDR_W'] = 2
|
parameters['HDR_W'] = 2
|
||||||
parameters['GBX_IF_EN'] = gbx_en
|
parameters['GBX_IF_EN'] = gbx_en
|
||||||
parameters['GBX_CNT'] = 1
|
parameters['GBX_CNT'] = 1
|
||||||
parameters['PADDING_EN'] = 1
|
|
||||||
parameters['DIC_EN'] = dic_en
|
parameters['DIC_EN'] = dic_en
|
||||||
parameters['MIN_FRAME_LEN'] = 64
|
|
||||||
parameters['PTP_TS_EN'] = 1
|
parameters['PTP_TS_EN'] = 1
|
||||||
parameters['PTP_TS_FMT_TOD'] = 1
|
parameters['PTP_TS_FMT_TOD'] = 1
|
||||||
parameters['PTP_TS_W'] = 96 if parameters['PTP_TS_FMT_TOD'] else 64
|
parameters['PTP_TS_W'] = 96 if parameters['PTP_TS_FMT_TOD'] else 64
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ module test_taxi_axis_baser_tx_32 #
|
|||||||
parameter HDR_W = 2,
|
parameter HDR_W = 2,
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||||
@@ -73,9 +71,7 @@ taxi_axis_baser_tx_32 #(
|
|||||||
.DATA_W(DATA_W),
|
.DATA_W(DATA_W),
|
||||||
.HDR_W(HDR_W),
|
.HDR_W(HDR_W),
|
||||||
.GBX_IF_EN(GBX_IF_EN),
|
.GBX_IF_EN(GBX_IF_EN),
|
||||||
.PADDING_EN(PADDING_EN),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_W(PTP_TS_W),
|
.PTP_TS_W(PTP_TS_W),
|
||||||
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
||||||
|
|||||||
@@ -38,9 +38,7 @@ export PARAM_DATA_W := 64
|
|||||||
export PARAM_HDR_W := 2
|
export PARAM_HDR_W := 2
|
||||||
export PARAM_GBX_IF_EN := 1
|
export PARAM_GBX_IF_EN := 1
|
||||||
export PARAM_GBX_CNT := 1
|
export PARAM_GBX_CNT := 1
|
||||||
export PARAM_PADDING_EN := 1
|
|
||||||
export PARAM_DIC_EN := 1
|
export PARAM_DIC_EN := 1
|
||||||
export PARAM_MIN_FRAME_LEN := 64
|
|
||||||
export PARAM_PTP_TS_EN := 1
|
export PARAM_PTP_TS_EN := 1
|
||||||
export PARAM_PTP_TS_FMT_TOD := 1
|
export PARAM_PTP_TS_FMT_TOD := 1
|
||||||
export PARAM_PTP_TS_W := $(if $(filter-out 1,$(PARAM_PTP_TS_FMT_TOD)),64,96)
|
export PARAM_PTP_TS_W := $(if $(filter-out 1,$(PARAM_PTP_TS_FMT_TOD)),64,96)
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
|
|||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
||||||
total_bytes += max(len(test_data), 60)+4
|
total_bytes += len(test_data)+4
|
||||||
total_pkts += 1
|
total_pkts += 1
|
||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
@@ -151,7 +151,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
|
|||||||
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
||||||
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
||||||
|
|
||||||
assert rx_frame.get_payload() == test_data.ljust(60, b'\x00')
|
assert rx_frame.get_payload() == test_data
|
||||||
assert rx_frame.check_fcs()
|
assert rx_frame.check_fcs()
|
||||||
assert rx_frame.ctrl is None
|
assert rx_frame.ctrl is None
|
||||||
if gbx_cfg is None:
|
if gbx_cfg is None:
|
||||||
@@ -337,8 +337,8 @@ async def run_test_underrun(dut, gbx_cfg=None, ifg=12):
|
|||||||
for stat, val in tb.stats.items():
|
for stat, val in tb.stats.items():
|
||||||
tb.log.info("%s: %d", stat, val)
|
tb.log.info("%s: %d", stat, val)
|
||||||
|
|
||||||
assert tb.stats["stat_tx_byte"] > 64*2 + 32
|
assert tb.stats["stat_tx_byte"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 32
|
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
||||||
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
||||||
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
||||||
@@ -584,9 +584,7 @@ def test_taxi_axis_baser_tx_64(request, gbx_en, dic_en):
|
|||||||
parameters['HDR_W'] = 2
|
parameters['HDR_W'] = 2
|
||||||
parameters['GBX_IF_EN'] = gbx_en
|
parameters['GBX_IF_EN'] = gbx_en
|
||||||
parameters['GBX_CNT'] = 1
|
parameters['GBX_CNT'] = 1
|
||||||
parameters['PADDING_EN'] = 1
|
|
||||||
parameters['DIC_EN'] = dic_en
|
parameters['DIC_EN'] = dic_en
|
||||||
parameters['MIN_FRAME_LEN'] = 64
|
|
||||||
parameters['PTP_TS_EN'] = 1
|
parameters['PTP_TS_EN'] = 1
|
||||||
parameters['PTP_TS_FMT_TOD'] = 1
|
parameters['PTP_TS_FMT_TOD'] = 1
|
||||||
parameters['PTP_TS_W'] = 96 if parameters['PTP_TS_FMT_TOD'] else 64
|
parameters['PTP_TS_W'] = 96 if parameters['PTP_TS_FMT_TOD'] else 64
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ module test_taxi_axis_baser_tx_64 #
|
|||||||
parameter HDR_W = 2,
|
parameter HDR_W = 2,
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||||
@@ -73,9 +71,7 @@ taxi_axis_baser_tx_64 #(
|
|||||||
.DATA_W(DATA_W),
|
.DATA_W(DATA_W),
|
||||||
.HDR_W(HDR_W),
|
.HDR_W(HDR_W),
|
||||||
.GBX_IF_EN(GBX_IF_EN),
|
.GBX_IF_EN(GBX_IF_EN),
|
||||||
.PADDING_EN(PADDING_EN),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_W(PTP_TS_W),
|
.PTP_TS_W(PTP_TS_W),
|
||||||
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
||||||
|
|||||||
@@ -37,9 +37,7 @@ VERILOG_SOURCES := $(call uniq_base,$(call process_f_files,$(VERILOG_SOURCES)))
|
|||||||
export PARAM_DATA_W := 32
|
export PARAM_DATA_W := 32
|
||||||
export PARAM_GBX_IF_EN := 0
|
export PARAM_GBX_IF_EN := 0
|
||||||
export PARAM_GBX_CNT := 1
|
export PARAM_GBX_CNT := 1
|
||||||
export PARAM_PADDING_EN := 1
|
|
||||||
export PARAM_DIC_EN := 1
|
export PARAM_DIC_EN := 1
|
||||||
export PARAM_MIN_FRAME_LEN := 64
|
|
||||||
export PARAM_PTP_TS_EN := 1
|
export PARAM_PTP_TS_EN := 1
|
||||||
export PARAM_PTP_TS_W := 96
|
export PARAM_PTP_TS_W := 96
|
||||||
export PARAM_TX_TAG_W := 16
|
export PARAM_TX_TAG_W := 16
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12):
|
|||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
||||||
total_bytes += max(len(test_data), 60)+4
|
total_bytes += len(test_data)+4
|
||||||
total_pkts += 1
|
total_pkts += 1
|
||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
@@ -117,7 +117,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12):
|
|||||||
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
||||||
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
||||||
|
|
||||||
assert rx_frame.get_payload() == test_data.ljust(60, b'\x00')
|
assert rx_frame.get_payload() == test_data
|
||||||
assert rx_frame.check_fcs()
|
assert rx_frame.check_fcs()
|
||||||
assert rx_frame.ctrl is None
|
assert rx_frame.ctrl is None
|
||||||
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 3.2) < 0.01
|
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 3.2) < 0.01
|
||||||
@@ -292,8 +292,8 @@ async def run_test_underrun(dut, ifg=12):
|
|||||||
tb.log.info("%s: %d", stat, val)
|
tb.log.info("%s: %d", stat, val)
|
||||||
|
|
||||||
assert tb.stats["tx_start_packet"] == 3
|
assert tb.stats["tx_start_packet"] == 3
|
||||||
assert tb.stats["stat_tx_byte"] > 64*2 + 32
|
assert tb.stats["stat_tx_byte"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 32
|
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
||||||
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
||||||
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
||||||
@@ -522,9 +522,7 @@ def test_taxi_axis_xgmii_tx_32(request, dic_en):
|
|||||||
parameters['DATA_W'] = 32
|
parameters['DATA_W'] = 32
|
||||||
parameters['GBX_IF_EN'] = 0
|
parameters['GBX_IF_EN'] = 0
|
||||||
parameters['GBX_CNT'] = 1
|
parameters['GBX_CNT'] = 1
|
||||||
parameters['PADDING_EN'] = 1
|
|
||||||
parameters['DIC_EN'] = dic_en
|
parameters['DIC_EN'] = dic_en
|
||||||
parameters['MIN_FRAME_LEN'] = 64
|
|
||||||
parameters['PTP_TS_EN'] = 1
|
parameters['PTP_TS_EN'] = 1
|
||||||
parameters['PTP_TS_W'] = 96
|
parameters['PTP_TS_W'] = 96
|
||||||
parameters['TX_TAG_W'] = 16
|
parameters['TX_TAG_W'] = 16
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ module test_taxi_axis_xgmii_tx_32 #
|
|||||||
parameter DATA_W = 32,
|
parameter DATA_W = 32,
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter PTP_TS_W = 96,
|
parameter PTP_TS_W = 96,
|
||||||
parameter TX_TAG_W = 16,
|
parameter TX_TAG_W = 16,
|
||||||
@@ -72,9 +70,7 @@ taxi_axis_xgmii_tx_32 #(
|
|||||||
.CTRL_W(CTRL_W),
|
.CTRL_W(CTRL_W),
|
||||||
.GBX_IF_EN(GBX_IF_EN),
|
.GBX_IF_EN(GBX_IF_EN),
|
||||||
.GBX_CNT(GBX_CNT),
|
.GBX_CNT(GBX_CNT),
|
||||||
.PADDING_EN(PADDING_EN),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_W(PTP_TS_W),
|
.PTP_TS_W(PTP_TS_W),
|
||||||
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
||||||
|
|||||||
@@ -37,9 +37,7 @@ VERILOG_SOURCES := $(call uniq_base,$(call process_f_files,$(VERILOG_SOURCES)))
|
|||||||
export PARAM_DATA_W := 64
|
export PARAM_DATA_W := 64
|
||||||
export PARAM_GBX_IF_EN := 0
|
export PARAM_GBX_IF_EN := 0
|
||||||
export PARAM_GBX_CNT := 1
|
export PARAM_GBX_CNT := 1
|
||||||
export PARAM_PADDING_EN := 1
|
|
||||||
export PARAM_DIC_EN := 1
|
export PARAM_DIC_EN := 1
|
||||||
export PARAM_MIN_FRAME_LEN := 64
|
|
||||||
export PARAM_PTP_TS_EN := 1
|
export PARAM_PTP_TS_EN := 1
|
||||||
export PARAM_PTP_TS_FMT_TOD := 1
|
export PARAM_PTP_TS_FMT_TOD := 1
|
||||||
export PARAM_PTP_TS_W := $(if $(filter-out 1,$(PARAM_PTP_TS_FMT_TOD)),64,96)
|
export PARAM_PTP_TS_W := $(if $(filter-out 1,$(PARAM_PTP_TS_FMT_TOD)),64,96)
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12):
|
|||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
await tb.source.send(AxiStreamFrame(test_data, tid=0, tuser=0))
|
||||||
total_bytes += max(len(test_data), 60)+4
|
total_bytes += len(test_data)+4
|
||||||
total_pkts += 1
|
total_pkts += 1
|
||||||
|
|
||||||
for test_data in test_frames:
|
for test_data in test_frames:
|
||||||
@@ -120,7 +120,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12):
|
|||||||
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
|
||||||
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
|
||||||
|
|
||||||
assert rx_frame.get_payload() == test_data.ljust(60, b'\x00')
|
assert rx_frame.get_payload() == test_data
|
||||||
assert rx_frame.check_fcs()
|
assert rx_frame.check_fcs()
|
||||||
assert rx_frame.ctrl is None
|
assert rx_frame.ctrl is None
|
||||||
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 6.4) < 0.01
|
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 6.4) < 0.01
|
||||||
@@ -296,8 +296,8 @@ async def run_test_underrun(dut, ifg=12):
|
|||||||
for stat, val in tb.stats.items():
|
for stat, val in tb.stats.items():
|
||||||
tb.log.info("%s: %d", stat, val)
|
tb.log.info("%s: %d", stat, val)
|
||||||
|
|
||||||
assert tb.stats["stat_tx_byte"] > 64*2 + 32
|
assert tb.stats["stat_tx_byte"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 32
|
assert tb.stats["stat_tx_pkt_len"] > 64*2 + 8
|
||||||
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
assert tb.stats["stat_tx_pkt_ucast"] == 3
|
||||||
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
assert tb.stats["stat_tx_pkt_mcast"] == 0
|
||||||
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
assert tb.stats["stat_tx_pkt_bcast"] == 0
|
||||||
@@ -524,9 +524,7 @@ def test_taxi_axis_xgmii_tx_64(request, enable_dic):
|
|||||||
parameters['DATA_W'] = 64
|
parameters['DATA_W'] = 64
|
||||||
parameters['GBX_IF_EN'] = 0
|
parameters['GBX_IF_EN'] = 0
|
||||||
parameters['GBX_CNT'] = 1
|
parameters['GBX_CNT'] = 1
|
||||||
parameters['PADDING_EN'] = 1
|
|
||||||
parameters['DIC_EN'] = enable_dic
|
parameters['DIC_EN'] = enable_dic
|
||||||
parameters['MIN_FRAME_LEN'] = 64
|
|
||||||
parameters['PTP_TS_EN'] = 1
|
parameters['PTP_TS_EN'] = 1
|
||||||
parameters['PTP_TS_FMT_TOD'] = 1
|
parameters['PTP_TS_FMT_TOD'] = 1
|
||||||
parameters['PTP_TS_W'] = 96 if parameters['PTP_TS_FMT_TOD'] else 64
|
parameters['PTP_TS_W'] = 96 if parameters['PTP_TS_FMT_TOD'] else 64
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ module test_taxi_axis_xgmii_tx_64 #
|
|||||||
parameter DATA_W = 64,
|
parameter DATA_W = 64,
|
||||||
parameter logic GBX_IF_EN = 1'b0,
|
parameter logic GBX_IF_EN = 1'b0,
|
||||||
parameter GBX_CNT = 1,
|
parameter GBX_CNT = 1,
|
||||||
parameter logic PADDING_EN = 1'b1,
|
|
||||||
parameter logic DIC_EN = 1'b1,
|
parameter logic DIC_EN = 1'b1,
|
||||||
parameter MIN_FRAME_LEN = 64,
|
|
||||||
parameter logic PTP_TS_EN = 1'b0,
|
parameter logic PTP_TS_EN = 1'b0,
|
||||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||||
@@ -73,9 +71,7 @@ taxi_axis_xgmii_tx_64 #(
|
|||||||
.CTRL_W(CTRL_W),
|
.CTRL_W(CTRL_W),
|
||||||
.GBX_IF_EN(GBX_IF_EN),
|
.GBX_IF_EN(GBX_IF_EN),
|
||||||
.GBX_CNT(GBX_CNT),
|
.GBX_CNT(GBX_CNT),
|
||||||
.PADDING_EN(PADDING_EN),
|
|
||||||
.DIC_EN(DIC_EN),
|
.DIC_EN(DIC_EN),
|
||||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
|
||||||
.PTP_TS_EN(PTP_TS_EN),
|
.PTP_TS_EN(PTP_TS_EN),
|
||||||
.PTP_TS_W(PTP_TS_W),
|
.PTP_TS_W(PTP_TS_W),
|
||||||
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
.TX_CPL_CTRL_IN_TUSER(TX_CPL_CTRL_IN_TUSER)
|
||||||
|
|||||||
Reference in New Issue
Block a user