mirror of
https://github.com/fpganinja/taxi.git
synced 2026-02-28 22:15:08 -08:00
eth: Integrate PTP TD leaf clock into MACs
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -584,10 +584,13 @@ always_ff @(posedge clk) begin
|
||||
|
||||
if (PTP_TS_EN && PTP_TS_FMT_TOD) begin
|
||||
// ns field rollover
|
||||
// workaround for verilator lint bug: unreachable by parameter value
|
||||
/* verilator lint_off SELRANGE */
|
||||
ptp_ts_adj_reg[15:0] <= ptp_ts_reg[15:0];
|
||||
{ptp_ts_borrow_reg, ptp_ts_adj_reg[45:16]} <= $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000);
|
||||
ptp_ts_adj_reg[47:46] <= 0;
|
||||
ptp_ts_adj_reg[95:48] <= ptp_ts_reg[95:48] + 1;
|
||||
/* verilator lint_on SELRANGE */
|
||||
end
|
||||
|
||||
// lane swapping and termination character detection
|
||||
@@ -807,8 +810,11 @@ always_ff @(posedge clk) begin
|
||||
if (input_start_swap_reg) begin
|
||||
start_packet_reg <= 2'b10;
|
||||
if (PTP_TS_FMT_TOD) begin
|
||||
// workaround for verilator lint bug: unreachable by parameter value
|
||||
/* verilator lint_off SELRANGE */
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + 46'(ts_inc_reg >> 1);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
/* verilator lint_on SELRANGE */
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + PTP_TS_W'(ts_inc_reg >> 1);
|
||||
end
|
||||
|
||||
@@ -788,10 +788,13 @@ always_ff @(posedge clk) begin
|
||||
|
||||
if (PTP_TS_EN && PTP_TS_FMT_TOD) begin
|
||||
m_axis_tx_cpl_valid_reg <= m_axis_tx_cpl_valid_int_reg;
|
||||
// workaround for verilator lint bug: unreachable by parameter value
|
||||
/* verilator lint_off SELRANGE */
|
||||
m_axis_tx_cpl_ts_adj_reg[15:0] <= m_axis_tx_cpl_ts_reg[15:0];
|
||||
{m_axis_tx_cpl_ts_borrow_reg, m_axis_tx_cpl_ts_adj_reg[45:16]} <= $signed({1'b0, m_axis_tx_cpl_ts_reg[45:16]}) - $signed(31'd1000000000);
|
||||
m_axis_tx_cpl_ts_adj_reg[47:46] <= 0;
|
||||
m_axis_tx_cpl_ts_adj_reg[95:48] <= m_axis_tx_cpl_ts_reg[95:48] + 1;
|
||||
/* verilator lint_on SELRANGE */
|
||||
end
|
||||
|
||||
if (GBX_IF_EN && tx_gbx_req_stall) begin
|
||||
@@ -810,8 +813,11 @@ always_ff @(posedge clk) begin
|
||||
if (swap_lanes_reg) begin
|
||||
if (PTP_TS_EN) begin
|
||||
if (PTP_TS_FMT_TOD) begin
|
||||
// workaround for verilator lint bug: unreachable by parameter value
|
||||
/* verilator lint_off SELRANGE */
|
||||
m_axis_tx_cpl_ts_reg[45:0] <= ptp_ts[45:0] + 46'(ts_inc_reg >> 1);
|
||||
m_axis_tx_cpl_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
/* verilator lint_on SELRANGE */
|
||||
end else begin
|
||||
m_axis_tx_cpl_ts_reg <= ptp_ts + PTP_TS_W'(ts_inc_reg >> 1);
|
||||
end
|
||||
|
||||
@@ -12,4 +12,5 @@ taxi_mac_pause_ctrl_rx.sv
|
||||
../lib/taxi/src/axis/rtl/taxi_axis_if.sv
|
||||
../lib/taxi/src/axis/rtl/taxi_axis_null_src.sv
|
||||
../lib/taxi/src/axis/rtl/taxi_axis_tie.sv
|
||||
../lib/taxi/src/ptp/rtl/taxi_ptp_td_leaf.sv
|
||||
../lib/taxi/src/sync/rtl/taxi_sync_signal.sv
|
||||
|
||||
@@ -26,8 +26,10 @@ module taxi_eth_mac_10g #
|
||||
parameter logic DIC_EN = 1'b1,
|
||||
parameter MIN_FRAME_LEN = 64,
|
||||
parameter logic PTP_TS_EN = 1'b0,
|
||||
parameter logic PTP_TD_EN = PTP_TS_EN,
|
||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||
parameter PTP_TD_SDI_PIPELINE = 2,
|
||||
parameter logic PFC_EN = 1'b0,
|
||||
parameter logic PAUSE_EN = PFC_EN,
|
||||
parameter logic STAT_EN = 1'b0,
|
||||
@@ -71,8 +73,18 @@ module taxi_eth_mac_10g #
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts = '0,
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts = '0,
|
||||
input wire logic ptp_clk = 1'b0,
|
||||
input wire logic ptp_rst = 1'b0,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
input wire logic ptp_td_sdi = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts_in = '0,
|
||||
output wire logic [PTP_TS_W-1:0] tx_ptp_ts_out,
|
||||
output wire logic tx_ptp_ts_step_out,
|
||||
output wire logic tx_ptp_locked,
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts_in = '0,
|
||||
output wire logic [PTP_TS_W-1:0] rx_ptp_ts_out,
|
||||
output wire logic rx_ptp_ts_step_out,
|
||||
output wire logic rx_ptp_locked,
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
@@ -216,6 +228,123 @@ if (KEEP_W*8 != DATA_W || CTRL_W*8 != DATA_W)
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .KEEP_W(KEEP_W), .USER_EN(1), .USER_W(TX_USER_W_INT), .ID_EN(1), .ID_W(TX_TAG_W)) axis_tx_int();
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .KEEP_W(KEEP_W), .USER_EN(1), .USER_W(RX_USER_W)) axis_rx_int();
|
||||
|
||||
// PTP timestamping
|
||||
if (PTP_TS_EN && PTP_TD_EN) begin : ptp
|
||||
|
||||
// TX
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts_rel;
|
||||
wire tx_ptp_ts_rel_step;
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts_tod;
|
||||
wire tx_ptp_ts_tod_step;
|
||||
|
||||
taxi_ptp_td_leaf #(
|
||||
.TS_REL_EN(!PTP_TS_FMT_TOD),
|
||||
.TS_TOD_EN(PTP_TS_FMT_TOD),
|
||||
.TS_FNS_W(16),
|
||||
.TS_REL_NS_W(PTP_TS_FMT_TOD ? 48 : PTP_TS_W-16),
|
||||
.TS_TOD_S_W(PTP_TS_FMT_TOD ? PTP_TS_W-32-16 : 48),
|
||||
.TS_REL_W(PTP_TS_W),
|
||||
.TS_TOD_W(PTP_TS_W),
|
||||
.TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE)
|
||||
)
|
||||
tx_leaf_inst (
|
||||
.clk(tx_clk),
|
||||
.rst(tx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
|
||||
/*
|
||||
* PTP clock interface
|
||||
*/
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
|
||||
/*
|
||||
* Timestamp output
|
||||
*/
|
||||
.output_ts_rel(tx_ptp_ts_rel),
|
||||
.output_ts_rel_step(tx_ptp_ts_rel_step),
|
||||
.output_ts_tod(tx_ptp_ts_tod),
|
||||
.output_ts_tod_step(tx_ptp_ts_tod_step),
|
||||
|
||||
/*
|
||||
* PPS output (ToD format only)
|
||||
*/
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.locked(tx_ptp_locked)
|
||||
);
|
||||
|
||||
assign tx_ptp_ts_out = PTP_TS_FMT_TOD ? tx_ptp_ts_tod : tx_ptp_ts_rel;
|
||||
assign tx_ptp_ts_step_out = PTP_TS_FMT_TOD ? tx_ptp_ts_tod_step : tx_ptp_ts_rel_step;
|
||||
|
||||
// RX
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts_rel;
|
||||
wire rx_ptp_ts_rel_step;
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts_tod;
|
||||
wire rx_ptp_ts_tod_step;
|
||||
|
||||
taxi_ptp_td_leaf #(
|
||||
.TS_REL_EN(!PTP_TS_FMT_TOD),
|
||||
.TS_TOD_EN(PTP_TS_FMT_TOD),
|
||||
.TS_FNS_W(16),
|
||||
.TS_REL_NS_W(PTP_TS_FMT_TOD ? 48 : PTP_TS_W-16),
|
||||
.TS_TOD_S_W(PTP_TS_FMT_TOD ? PTP_TS_W-32-16 : 48),
|
||||
.TS_REL_W(PTP_TS_W),
|
||||
.TS_TOD_W(PTP_TS_W),
|
||||
.TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE)
|
||||
)
|
||||
rx_leaf_inst (
|
||||
.clk(rx_clk),
|
||||
.rst(rx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
|
||||
/*
|
||||
* PTP clock interface
|
||||
*/
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
|
||||
/*
|
||||
* Timestamp output
|
||||
*/
|
||||
.output_ts_rel(rx_ptp_ts_rel),
|
||||
.output_ts_rel_step(rx_ptp_ts_rel_step),
|
||||
.output_ts_tod(rx_ptp_ts_tod),
|
||||
.output_ts_tod_step(rx_ptp_ts_tod_step),
|
||||
|
||||
/*
|
||||
* PPS output (ToD format only)
|
||||
*/
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.locked(rx_ptp_locked)
|
||||
);
|
||||
|
||||
assign rx_ptp_ts_out = PTP_TS_FMT_TOD ? rx_ptp_ts_tod : rx_ptp_ts_rel;
|
||||
assign rx_ptp_ts_step_out = PTP_TS_FMT_TOD ? rx_ptp_ts_tod_step : rx_ptp_ts_rel_step;
|
||||
|
||||
end else begin
|
||||
|
||||
assign tx_ptp_ts_out = tx_ptp_ts_in;
|
||||
assign tx_ptp_ts_step_out = 1'b0;
|
||||
assign rx_ptp_ts_out = rx_ptp_ts_in;
|
||||
assign rx_ptp_ts_step_out = 1'b0;
|
||||
|
||||
assign tx_ptp_locked = 1'b0;
|
||||
assign rx_ptp_locked = 1'b0;
|
||||
|
||||
end
|
||||
|
||||
if (DATA_W == 64) begin
|
||||
|
||||
taxi_axis_xgmii_rx_64 #(
|
||||
@@ -245,7 +374,7 @@ if (DATA_W == 64) begin
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.ptp_ts(rx_ptp_ts),
|
||||
.ptp_ts(rx_ptp_ts_out),
|
||||
|
||||
/*
|
||||
* Configuration
|
||||
@@ -310,7 +439,7 @@ if (DATA_W == 64) begin
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.ptp_ts(tx_ptp_ts),
|
||||
.ptp_ts(tx_ptp_ts_out),
|
||||
|
||||
/*
|
||||
* Configuration
|
||||
@@ -364,7 +493,7 @@ end else if (DATA_W == 32) begin
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.ptp_ts(rx_ptp_ts),
|
||||
.ptp_ts(rx_ptp_ts_out),
|
||||
|
||||
/*
|
||||
* Configuration
|
||||
@@ -431,7 +560,7 @@ end else if (DATA_W == 32) begin
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.ptp_ts(tx_ptp_ts),
|
||||
.ptp_ts(tx_ptp_ts_out),
|
||||
|
||||
/*
|
||||
* Configuration
|
||||
|
||||
@@ -26,8 +26,10 @@ module taxi_eth_mac_10g_fifo #
|
||||
parameter logic DIC_EN = 1'b1,
|
||||
parameter MIN_FRAME_LEN = 64,
|
||||
parameter logic PTP_TS_EN = 1'b0,
|
||||
parameter logic PTP_TD_EN = PTP_TS_EN,
|
||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||
parameter PTP_TD_SDI_PIPELINE = 2,
|
||||
parameter logic STAT_EN = 1'b0,
|
||||
parameter STAT_TX_LEVEL = 1,
|
||||
parameter STAT_RX_LEVEL = 1,
|
||||
@@ -56,7 +58,6 @@ module taxi_eth_mac_10g_fifo #
|
||||
input wire logic tx_rst,
|
||||
input wire logic logic_clk,
|
||||
input wire logic logic_rst,
|
||||
input wire logic ptp_sample_clk,
|
||||
|
||||
/*
|
||||
* AXI4-Stream input (sink)
|
||||
@@ -85,8 +86,18 @@ module taxi_eth_mac_10g_fifo #
|
||||
/*
|
||||
* PTP clock
|
||||
*/
|
||||
input wire logic [PTP_TS_W-1:0] ptp_ts = '0,
|
||||
input wire logic ptp_ts_step = 1'b0,
|
||||
input wire logic ptp_clk = 1'b0,
|
||||
input wire logic ptp_rst = 1'b0,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
input wire logic ptp_td_sdi = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] ptp_ts_in = '0,
|
||||
input wire logic ptp_ts_step_in = 1'b0,
|
||||
output wire logic [PTP_TS_W-1:0] tx_ptp_ts_out,
|
||||
output wire logic tx_ptp_ts_step_out,
|
||||
output wire logic tx_ptp_locked,
|
||||
output wire logic [PTP_TS_W-1:0] rx_ptp_ts_out,
|
||||
output wire logic rx_ptp_ts_step_out,
|
||||
output wire logic rx_ptp_locked,
|
||||
|
||||
/*
|
||||
* Statistics
|
||||
@@ -127,12 +138,6 @@ taxi_axis_if #(.DATA_W(DATA_W), .KEEP_W(KEEP_W), .USER_EN(1), .USER_W(TX_USER_W)
|
||||
taxi_axis_if #(.DATA_W(PTP_TS_W), .KEEP_W(1), .ID_EN(1), .ID_W(TX_TAG_W)) axis_tx_cpl_int();
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .KEEP_W(KEEP_W), .USER_EN(1), .USER_W(RX_USER_W)) axis_rx_int();
|
||||
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts;
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts;
|
||||
|
||||
wire tx_ptp_locked;
|
||||
wire rx_ptp_locked;
|
||||
|
||||
// synchronize MAC status signals into logic clock domain
|
||||
wire tx_error_underflow_int;
|
||||
|
||||
@@ -195,7 +200,14 @@ always_ff @(posedge logic_clk or posedge logic_rst) begin
|
||||
end
|
||||
|
||||
// PTP timestamping
|
||||
if (PTP_TS_EN) begin : ptp
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts_int;
|
||||
wire tx_ptp_ts_step_int;
|
||||
wire tx_ptp_locked_int;
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts_int;
|
||||
wire rx_ptp_ts_step_int;
|
||||
wire rx_ptp_locked_int;
|
||||
|
||||
if (PTP_TS_EN && !PTP_TD_EN) begin : ptp
|
||||
|
||||
taxi_ptp_clock_cdc #(
|
||||
.TS_W(PTP_TS_W),
|
||||
@@ -207,10 +219,10 @@ if (PTP_TS_EN) begin : ptp
|
||||
.output_clk(tx_clk),
|
||||
.output_rst(tx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
.input_ts(ptp_ts),
|
||||
.input_ts_step(ptp_ts_step),
|
||||
.output_ts(tx_ptp_ts),
|
||||
.output_ts_step(),
|
||||
.input_ts(ptp_ts_in),
|
||||
.input_ts_step(ptp_ts_step_in),
|
||||
.output_ts(tx_ptp_ts_int),
|
||||
.output_ts_step(tx_ptp_ts_step_out),
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
.locked(tx_ptp_locked)
|
||||
@@ -226,10 +238,10 @@ if (PTP_TS_EN) begin : ptp
|
||||
.output_clk(rx_clk),
|
||||
.output_rst(rx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
.input_ts(ptp_ts),
|
||||
.input_ts_step(ptp_ts_step),
|
||||
.output_ts(rx_ptp_ts),
|
||||
.output_ts_step(),
|
||||
.input_ts(ptp_ts_in),
|
||||
.input_ts_step(ptp_ts_step_in),
|
||||
.output_ts(rx_ptp_ts_int),
|
||||
.output_ts_step(rx_ptp_ts_step_out),
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
.locked(rx_ptp_locked)
|
||||
@@ -237,11 +249,13 @@ if (PTP_TS_EN) begin : ptp
|
||||
|
||||
end else begin
|
||||
|
||||
assign tx_ptp_ts = '0;
|
||||
assign rx_ptp_ts = '0;
|
||||
assign tx_ptp_ts_int = '0;
|
||||
assign tx_ptp_ts_step_out = tx_ptp_ts_step_int;
|
||||
assign rx_ptp_ts_int = '0;
|
||||
assign rx_ptp_ts_step_out = rx_ptp_ts_step_int;
|
||||
|
||||
assign tx_ptp_locked = 1'b0;
|
||||
assign rx_ptp_locked = 1'b0;
|
||||
assign tx_ptp_locked = tx_ptp_locked_int;
|
||||
assign rx_ptp_locked = rx_ptp_locked_int;
|
||||
|
||||
end
|
||||
|
||||
@@ -257,8 +271,10 @@ taxi_eth_mac_10g #(
|
||||
.DIC_EN(DIC_EN),
|
||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
||||
.PTP_TS_EN(PTP_TS_EN),
|
||||
.PTP_TD_EN(PTP_TD_EN),
|
||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||
.PTP_TS_W(PTP_TS_W),
|
||||
.PTP_TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE),
|
||||
.PFC_EN(1'b0),
|
||||
.PAUSE_EN(1'b0),
|
||||
.STAT_EN(STAT_EN),
|
||||
@@ -302,8 +318,18 @@ eth_mac_10g_inst (
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.tx_ptp_ts(tx_ptp_ts),
|
||||
.rx_ptp_ts(rx_ptp_ts),
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_sample_clk(ptp_sample_clk),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
.tx_ptp_ts_in(tx_ptp_ts_int),
|
||||
.tx_ptp_ts_out(tx_ptp_ts_out),
|
||||
.tx_ptp_ts_step_out(tx_ptp_ts_step_int),
|
||||
.tx_ptp_locked(tx_ptp_locked_int),
|
||||
.rx_ptp_ts_in(rx_ptp_ts_int),
|
||||
.rx_ptp_ts_out(rx_ptp_ts_out),
|
||||
.rx_ptp_ts_step_out(rx_ptp_ts_step_int),
|
||||
.rx_ptp_locked(rx_ptp_locked_int),
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
|
||||
@@ -8,4 +8,5 @@ taxi_mac_pause_ctrl_tx.sv
|
||||
taxi_mac_pause_ctrl_rx.sv
|
||||
../lib/taxi/src/axis/rtl/taxi_axis_null_src.sv
|
||||
../lib/taxi/src/axis/rtl/taxi_axis_tie.sv
|
||||
../lib/taxi/src/ptp/rtl/taxi_ptp_td_leaf.sv
|
||||
../lib/taxi/src/sync/rtl/taxi_sync_signal.sv
|
||||
|
||||
@@ -25,8 +25,10 @@ module taxi_eth_mac_phy_10g #
|
||||
parameter logic DIC_EN = 1'b1,
|
||||
parameter MIN_FRAME_LEN = 64,
|
||||
parameter logic PTP_TS_EN = 1'b0,
|
||||
parameter logic PTP_TD_EN = PTP_TS_EN,
|
||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||
parameter PTP_TD_SDI_PIPELINE = 2,
|
||||
parameter logic BIT_REVERSE = 1'b0,
|
||||
parameter logic SCRAMBLER_DISABLE = 1'b0,
|
||||
parameter logic PRBS31_EN = 1'b0,
|
||||
@@ -82,8 +84,18 @@ module taxi_eth_mac_phy_10g #
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts,
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts,
|
||||
input wire logic ptp_clk = 1'b0,
|
||||
input wire logic ptp_rst = 1'b0,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
input wire logic ptp_td_sdi = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts_in = '0,
|
||||
output wire logic [PTP_TS_W-1:0] tx_ptp_ts_out,
|
||||
output wire logic tx_ptp_ts_step_out,
|
||||
output wire logic tx_ptp_locked,
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts_in = '0,
|
||||
output wire logic [PTP_TS_W-1:0] rx_ptp_ts_out,
|
||||
output wire logic rx_ptp_ts_step_out,
|
||||
output wire logic rx_ptp_locked,
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
@@ -226,6 +238,123 @@ localparam TX_USER_W_INT = (MAC_CTRL_EN ? 1 : 0) + TX_USER_W;
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .USER_EN(1), .USER_W(TX_USER_W_INT), .ID_EN(1), .ID_W(TX_TAG_W)) axis_tx_int();
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .USER_EN(1), .USER_W(RX_USER_W)) axis_rx_int();
|
||||
|
||||
// PTP timestamping
|
||||
if (PTP_TS_EN && PTP_TD_EN) begin : ptp
|
||||
|
||||
// TX
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts_rel;
|
||||
wire tx_ptp_ts_rel_step;
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts_tod;
|
||||
wire tx_ptp_ts_tod_step;
|
||||
|
||||
taxi_ptp_td_leaf #(
|
||||
.TS_REL_EN(!PTP_TS_FMT_TOD),
|
||||
.TS_TOD_EN(PTP_TS_FMT_TOD),
|
||||
.TS_FNS_W(16),
|
||||
.TS_REL_NS_W(PTP_TS_FMT_TOD ? 48 : PTP_TS_W-16),
|
||||
.TS_TOD_S_W(PTP_TS_FMT_TOD ? PTP_TS_W-32-16 : 48),
|
||||
.TS_REL_W(PTP_TS_W),
|
||||
.TS_TOD_W(PTP_TS_W),
|
||||
.TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE)
|
||||
)
|
||||
tx_leaf_inst (
|
||||
.clk(tx_clk),
|
||||
.rst(tx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
|
||||
/*
|
||||
* PTP clock interface
|
||||
*/
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
|
||||
/*
|
||||
* Timestamp output
|
||||
*/
|
||||
.output_ts_rel(tx_ptp_ts_rel),
|
||||
.output_ts_rel_step(tx_ptp_ts_rel_step),
|
||||
.output_ts_tod(tx_ptp_ts_tod),
|
||||
.output_ts_tod_step(tx_ptp_ts_tod_step),
|
||||
|
||||
/*
|
||||
* PPS output (ToD format only)
|
||||
*/
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.locked(tx_ptp_locked)
|
||||
);
|
||||
|
||||
assign tx_ptp_ts_out = PTP_TS_FMT_TOD ? tx_ptp_ts_tod : tx_ptp_ts_rel;
|
||||
assign tx_ptp_ts_step_out = PTP_TS_FMT_TOD ? tx_ptp_ts_tod_step : tx_ptp_ts_rel_step;
|
||||
|
||||
// RX
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts_rel;
|
||||
wire rx_ptp_ts_rel_step;
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts_tod;
|
||||
wire rx_ptp_ts_tod_step;
|
||||
|
||||
taxi_ptp_td_leaf #(
|
||||
.TS_REL_EN(!PTP_TS_FMT_TOD),
|
||||
.TS_TOD_EN(PTP_TS_FMT_TOD),
|
||||
.TS_FNS_W(16),
|
||||
.TS_REL_NS_W(PTP_TS_FMT_TOD ? 48 : PTP_TS_W-16),
|
||||
.TS_TOD_S_W(PTP_TS_FMT_TOD ? PTP_TS_W-32-16 : 48),
|
||||
.TS_REL_W(PTP_TS_W),
|
||||
.TS_TOD_W(PTP_TS_W),
|
||||
.TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE)
|
||||
)
|
||||
rx_leaf_inst (
|
||||
.clk(rx_clk),
|
||||
.rst(rx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
|
||||
/*
|
||||
* PTP clock interface
|
||||
*/
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
|
||||
/*
|
||||
* Timestamp output
|
||||
*/
|
||||
.output_ts_rel(rx_ptp_ts_rel),
|
||||
.output_ts_rel_step(rx_ptp_ts_rel_step),
|
||||
.output_ts_tod(rx_ptp_ts_tod),
|
||||
.output_ts_tod_step(rx_ptp_ts_tod_step),
|
||||
|
||||
/*
|
||||
* PPS output (ToD format only)
|
||||
*/
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.locked(rx_ptp_locked)
|
||||
);
|
||||
|
||||
assign rx_ptp_ts_out = PTP_TS_FMT_TOD ? rx_ptp_ts_tod : rx_ptp_ts_rel;
|
||||
assign rx_ptp_ts_step_out = PTP_TS_FMT_TOD ? rx_ptp_ts_tod_step : rx_ptp_ts_rel_step;
|
||||
|
||||
end else begin
|
||||
|
||||
assign tx_ptp_ts_out = tx_ptp_ts_in;
|
||||
assign tx_ptp_ts_step_out = 1'b0;
|
||||
assign rx_ptp_ts_out = rx_ptp_ts_in;
|
||||
assign rx_ptp_ts_step_out = 1'b0;
|
||||
|
||||
assign tx_ptp_locked = 1'b0;
|
||||
assign rx_ptp_locked = 1'b0;
|
||||
|
||||
end
|
||||
|
||||
taxi_eth_mac_phy_10g_rx #(
|
||||
.DATA_W(DATA_W),
|
||||
.HDR_W(HDR_W),
|
||||
@@ -263,7 +392,7 @@ eth_mac_phy_10g_rx_inst (
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.ptp_ts(rx_ptp_ts),
|
||||
.ptp_ts(rx_ptp_ts_out),
|
||||
|
||||
/*
|
||||
* Status
|
||||
@@ -337,7 +466,7 @@ eth_mac_phy_10g_tx_inst (
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.ptp_ts(tx_ptp_ts),
|
||||
.ptp_ts(tx_ptp_ts_out),
|
||||
|
||||
/*
|
||||
* Status
|
||||
|
||||
@@ -25,8 +25,10 @@ module taxi_eth_mac_phy_10g_fifo #
|
||||
parameter logic DIC_EN = 1'b1,
|
||||
parameter MIN_FRAME_LEN = 64,
|
||||
parameter logic PTP_TS_EN = 1'b0,
|
||||
parameter logic PTP_TD_EN = PTP_TS_EN,
|
||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||
parameter PTP_TD_SDI_PIPELINE = 2,
|
||||
parameter logic BIT_REVERSE = 1'b0,
|
||||
parameter logic SCRAMBLER_DISABLE = 1'b0,
|
||||
parameter logic PRBS31_EN = 1'b0,
|
||||
@@ -63,7 +65,6 @@ module taxi_eth_mac_phy_10g_fifo #
|
||||
input wire logic tx_rst,
|
||||
input wire logic logic_clk,
|
||||
input wire logic logic_rst,
|
||||
input wire logic ptp_sample_clk,
|
||||
|
||||
/*
|
||||
* Transmit interface (AXI stream)
|
||||
@@ -96,8 +97,18 @@ module taxi_eth_mac_phy_10g_fifo #
|
||||
/*
|
||||
* PTP clock
|
||||
*/
|
||||
input wire logic [PTP_TS_W-1:0] ptp_ts = '0,
|
||||
input wire logic ptp_ts_step = 1'b0,
|
||||
input wire logic ptp_clk = 1'b0,
|
||||
input wire logic ptp_rst = 1'b0,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
input wire logic ptp_td_sdi = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] ptp_ts_in = '0,
|
||||
input wire logic ptp_ts_step_in = 1'b0,
|
||||
output wire logic [PTP_TS_W-1:0] tx_ptp_ts_out,
|
||||
output wire logic tx_ptp_ts_step_out,
|
||||
output wire logic tx_ptp_locked,
|
||||
output wire logic [PTP_TS_W-1:0] rx_ptp_ts_out,
|
||||
output wire logic rx_ptp_ts_step_out,
|
||||
output wire logic rx_ptp_locked,
|
||||
|
||||
/*
|
||||
* Statistics
|
||||
@@ -145,12 +156,6 @@ taxi_axis_if #(.DATA_W(DATA_W), .KEEP_W(KEEP_W), .USER_EN(1), .USER_W(TX_USER_W)
|
||||
taxi_axis_if #(.DATA_W(PTP_TS_W), .KEEP_W(1), .ID_EN(1), .ID_W(TX_TAG_W)) axis_tx_cpl_int();
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .KEEP_W(KEEP_W), .USER_EN(1), .USER_W(RX_USER_W)) axis_rx_int();
|
||||
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts;
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts;
|
||||
|
||||
wire tx_ptp_locked;
|
||||
wire rx_ptp_locked;
|
||||
|
||||
// synchronize MAC status signals into logic clock domain
|
||||
wire tx_error_underflow_int;
|
||||
|
||||
@@ -229,8 +234,15 @@ always_ff @(posedge logic_clk or posedge logic_rst) begin
|
||||
end
|
||||
|
||||
// PTP timestamping
|
||||
if (PTP_TS_EN) begin : ptp
|
||||
|
||||
wire [PTP_TS_W-1:0] tx_ptp_ts_int;
|
||||
wire tx_ptp_ts_step_int;
|
||||
wire tx_ptp_locked_int;
|
||||
wire [PTP_TS_W-1:0] rx_ptp_ts_int;
|
||||
wire rx_ptp_ts_step_int;
|
||||
wire rx_ptp_locked_int;
|
||||
|
||||
if (PTP_TS_EN && !PTP_TD_EN) begin : ptp
|
||||
|
||||
taxi_ptp_clock_cdc #(
|
||||
.TS_W(PTP_TS_W),
|
||||
.NS_W(6)
|
||||
@@ -241,10 +253,10 @@ if (PTP_TS_EN) begin : ptp
|
||||
.output_clk(tx_clk),
|
||||
.output_rst(tx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
.input_ts(ptp_ts),
|
||||
.input_ts_step(ptp_ts_step),
|
||||
.output_ts(tx_ptp_ts),
|
||||
.output_ts_step(),
|
||||
.input_ts(ptp_ts_in),
|
||||
.input_ts_step(ptp_ts_step_in),
|
||||
.output_ts(tx_ptp_ts_int),
|
||||
.output_ts_step(tx_ptp_ts_step_out),
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
.locked(tx_ptp_locked)
|
||||
@@ -260,10 +272,10 @@ if (PTP_TS_EN) begin : ptp
|
||||
.output_clk(rx_clk),
|
||||
.output_rst(rx_rst),
|
||||
.sample_clk(ptp_sample_clk),
|
||||
.input_ts(ptp_ts),
|
||||
.input_ts_step(ptp_ts_step),
|
||||
.output_ts(rx_ptp_ts),
|
||||
.output_ts_step(),
|
||||
.input_ts(ptp_ts_in),
|
||||
.input_ts_step(ptp_ts_step_in),
|
||||
.output_ts(rx_ptp_ts_int),
|
||||
.output_ts_step(rx_ptp_ts_step_out),
|
||||
.output_pps(),
|
||||
.output_pps_str(),
|
||||
.locked(rx_ptp_locked)
|
||||
@@ -271,11 +283,13 @@ if (PTP_TS_EN) begin : ptp
|
||||
|
||||
end else begin
|
||||
|
||||
assign tx_ptp_ts = '0;
|
||||
assign rx_ptp_ts = '0;
|
||||
assign tx_ptp_ts_int = '0;
|
||||
assign tx_ptp_ts_step_out = tx_ptp_ts_step_int;
|
||||
assign rx_ptp_ts_int = '0;
|
||||
assign rx_ptp_ts_step_out = rx_ptp_ts_step_int;
|
||||
|
||||
assign tx_ptp_locked = 1'b0;
|
||||
assign rx_ptp_locked = 1'b0;
|
||||
assign tx_ptp_locked = tx_ptp_locked_int;
|
||||
assign rx_ptp_locked = rx_ptp_locked_int;
|
||||
|
||||
end
|
||||
|
||||
@@ -290,8 +304,10 @@ taxi_eth_mac_phy_10g #(
|
||||
.DIC_EN(DIC_EN),
|
||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
||||
.PTP_TS_EN(PTP_TS_EN),
|
||||
.PTP_TD_EN(PTP_TD_EN),
|
||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||
.PTP_TS_W(PTP_TS_W),
|
||||
.PTP_TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE),
|
||||
.BIT_REVERSE(BIT_REVERSE),
|
||||
.SCRAMBLER_DISABLE(SCRAMBLER_DISABLE),
|
||||
.PRBS31_EN(PRBS31_EN),
|
||||
@@ -345,8 +361,18 @@ eth_mac_phy_10g_inst (
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.tx_ptp_ts(tx_ptp_ts),
|
||||
.rx_ptp_ts(rx_ptp_ts),
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_sample_clk(ptp_sample_clk),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
.tx_ptp_ts_in(tx_ptp_ts_int),
|
||||
.tx_ptp_ts_out(tx_ptp_ts_out),
|
||||
.tx_ptp_ts_step_out(tx_ptp_ts_step_int),
|
||||
.tx_ptp_locked(tx_ptp_locked_int),
|
||||
.rx_ptp_ts_in(rx_ptp_ts_int),
|
||||
.rx_ptp_ts_out(rx_ptp_ts_out),
|
||||
.rx_ptp_ts_step_out(rx_ptp_ts_step_int),
|
||||
.rx_ptp_locked(rx_ptp_locked_int),
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
|
||||
@@ -58,8 +58,10 @@ module taxi_eth_mac_25g_us #
|
||||
parameter logic DIC_EN = 1'b1,
|
||||
parameter MIN_FRAME_LEN = 64,
|
||||
parameter logic PTP_TS_EN = 1'b0,
|
||||
parameter logic PTP_TD_EN = PTP_TS_EN,
|
||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||
parameter PTP_TD_SDI_PIPELINE = 2,
|
||||
parameter logic PRBS31_EN = 1'b0,
|
||||
parameter TX_SERDES_PIPELINE = 1,
|
||||
parameter RX_SERDES_PIPELINE = 1,
|
||||
@@ -121,7 +123,6 @@ module taxi_eth_mac_25g_us #
|
||||
output wire logic tx_clk[CNT],
|
||||
input wire logic tx_rst_in[CNT] = '{CNT{1'b0}},
|
||||
output wire logic tx_rst_out[CNT],
|
||||
input wire logic ptp_sample_clk[CNT] = '{CNT{1'b0}},
|
||||
|
||||
/*
|
||||
* Transmit interface (AXI stream)
|
||||
@@ -137,10 +138,18 @@ module taxi_eth_mac_25g_us #
|
||||
/*
|
||||
* PTP clock
|
||||
*/
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts[CNT] = '{CNT{'0}},
|
||||
input wire logic tx_ptp_ts_step[CNT] = '{CNT{1'b0}},
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts[CNT] = '{CNT{'0}},
|
||||
input wire logic rx_ptp_ts_step[CNT] = '{CNT{1'b0}},
|
||||
input wire logic ptp_clk = 1'b0,
|
||||
input wire logic ptp_rst = 1'b0,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
input wire logic ptp_td_sdi = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts_in[CNT] = '{CNT{'0}},
|
||||
output wire logic [PTP_TS_W-1:0] tx_ptp_ts_out[CNT],
|
||||
output wire logic tx_ptp_ts_step_out[CNT],
|
||||
output wire logic tx_ptp_locked[CNT],
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts_in[CNT] = '{CNT{'0}},
|
||||
output wire logic [PTP_TS_W-1:0] rx_ptp_ts_out[CNT],
|
||||
output wire logic rx_ptp_ts_step_out[CNT],
|
||||
output wire logic rx_ptp_locked[CNT],
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
@@ -420,8 +429,10 @@ for (genvar n = 0; n < CNT; n = n + 1) begin : ch
|
||||
.DIC_EN(DIC_EN),
|
||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
||||
.PTP_TS_EN(PTP_TS_EN),
|
||||
.PTP_TD_EN(PTP_TD_EN),
|
||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||
.PTP_TS_W(PTP_TS_W),
|
||||
.PTP_TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE),
|
||||
.PRBS31_EN(PRBS31_EN),
|
||||
.TX_SERDES_PIPELINE(TX_SERDES_PIPELINE),
|
||||
.RX_SERDES_PIPELINE(RX_SERDES_PIPELINE),
|
||||
@@ -497,7 +508,6 @@ for (genvar n = 0; n < CNT; n = n + 1) begin : ch
|
||||
.tx_clk(tx_clk[n]),
|
||||
.tx_rst_in(tx_rst_in[n]),
|
||||
.tx_rst_out(tx_rst_out[n]),
|
||||
.ptp_sample_clk(ptp_sample_clk[n]),
|
||||
|
||||
/*
|
||||
* Transmit interface (AXI stream)
|
||||
@@ -513,10 +523,18 @@ for (genvar n = 0; n < CNT; n = n + 1) begin : ch
|
||||
/*
|
||||
* PTP clock
|
||||
*/
|
||||
.tx_ptp_ts(tx_ptp_ts[n]),
|
||||
.tx_ptp_ts_step(tx_ptp_ts_step[n]),
|
||||
.rx_ptp_ts(rx_ptp_ts[n]),
|
||||
.rx_ptp_ts_step(rx_ptp_ts_step[n]),
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_sample_clk(ptp_sample_clk),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
.tx_ptp_ts_in(tx_ptp_ts_in[n]),
|
||||
.tx_ptp_ts_out(tx_ptp_ts_out[n]),
|
||||
.tx_ptp_ts_step_out(tx_ptp_ts_step_out[n]),
|
||||
.tx_ptp_locked(tx_ptp_locked[n]),
|
||||
.rx_ptp_ts_in(rx_ptp_ts_in[n]),
|
||||
.rx_ptp_ts_out(rx_ptp_ts_out[n]),
|
||||
.rx_ptp_ts_step_out(rx_ptp_ts_step_out[n]),
|
||||
.rx_ptp_locked(rx_ptp_locked[n]),
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
|
||||
@@ -57,8 +57,10 @@ module taxi_eth_mac_25g_us_ch #
|
||||
parameter logic DIC_EN = 1'b1,
|
||||
parameter MIN_FRAME_LEN = 64,
|
||||
parameter logic PTP_TS_EN = 1'b0,
|
||||
parameter logic PTP_TD_EN = PTP_TS_EN,
|
||||
parameter logic PTP_TS_FMT_TOD = 1'b1,
|
||||
parameter PTP_TS_W = PTP_TS_FMT_TOD ? 96 : 64,
|
||||
parameter PTP_TD_SDI_PIPELINE = 2,
|
||||
parameter logic PRBS31_EN = 1'b0,
|
||||
parameter TX_SERDES_PIPELINE = 1,
|
||||
parameter RX_SERDES_PIPELINE = 1,
|
||||
@@ -134,7 +136,6 @@ module taxi_eth_mac_25g_us_ch #
|
||||
output wire logic tx_clk,
|
||||
input wire logic tx_rst_in = 1'b0,
|
||||
output wire logic tx_rst_out,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
|
||||
/*
|
||||
* Transmit interface (AXI stream)
|
||||
@@ -150,10 +151,18 @@ module taxi_eth_mac_25g_us_ch #
|
||||
/*
|
||||
* PTP clock
|
||||
*/
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts = '0,
|
||||
input wire logic tx_ptp_ts_step = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts = '0,
|
||||
input wire logic rx_ptp_ts_step = 1'b0,
|
||||
input wire logic ptp_clk = 1'b0,
|
||||
input wire logic ptp_rst = 1'b0,
|
||||
input wire logic ptp_sample_clk = 1'b0,
|
||||
input wire logic ptp_td_sdi = 1'b0,
|
||||
input wire logic [PTP_TS_W-1:0] tx_ptp_ts_in = '0,
|
||||
output wire logic [PTP_TS_W-1:0] tx_ptp_ts_out,
|
||||
output wire logic tx_ptp_ts_step_out,
|
||||
output wire logic tx_ptp_locked,
|
||||
input wire logic [PTP_TS_W-1:0] rx_ptp_ts_in = '0,
|
||||
output wire logic [PTP_TS_W-1:0] rx_ptp_ts_out,
|
||||
output wire logic rx_ptp_ts_step_out,
|
||||
output wire logic rx_ptp_locked,
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
@@ -878,8 +887,10 @@ if (COMBINED_MAC_PCS) begin : mac
|
||||
.DIC_EN(DIC_EN),
|
||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
||||
.PTP_TS_EN(PTP_TS_EN),
|
||||
.PTP_TD_EN(PTP_TD_EN),
|
||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||
.PTP_TS_W(PTP_TS_W),
|
||||
.PTP_TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE),
|
||||
.BIT_REVERSE(1'b1),
|
||||
.SCRAMBLER_DISABLE(1'b0),
|
||||
.PRBS31_EN(PRBS31_EN),
|
||||
@@ -935,8 +946,18 @@ if (COMBINED_MAC_PCS) begin : mac
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.tx_ptp_ts(tx_ptp_ts),
|
||||
.rx_ptp_ts(rx_ptp_ts),
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_sample_clk(ptp_sample_clk),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
.tx_ptp_ts_in(tx_ptp_ts_in),
|
||||
.tx_ptp_ts_out(tx_ptp_ts_out),
|
||||
.tx_ptp_ts_step_out(tx_ptp_ts_step_out),
|
||||
.tx_ptp_locked(tx_ptp_locked),
|
||||
.rx_ptp_ts_in(rx_ptp_ts_in),
|
||||
.rx_ptp_ts_out(rx_ptp_ts_out),
|
||||
.rx_ptp_ts_step_out(rx_ptp_ts_step_out),
|
||||
.rx_ptp_locked(rx_ptp_locked),
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
@@ -1160,8 +1181,10 @@ end else begin : mac
|
||||
.DIC_EN(DIC_EN),
|
||||
.MIN_FRAME_LEN(MIN_FRAME_LEN),
|
||||
.PTP_TS_EN(PTP_TS_EN),
|
||||
.PTP_TD_EN(PTP_TD_EN),
|
||||
.PTP_TS_FMT_TOD(PTP_TS_FMT_TOD),
|
||||
.PTP_TS_W(PTP_TS_W),
|
||||
.PTP_TD_SDI_PIPELINE(PTP_TD_SDI_PIPELINE),
|
||||
.PFC_EN(PFC_EN),
|
||||
.PAUSE_EN(PAUSE_EN),
|
||||
.STAT_EN(STAT_EN),
|
||||
@@ -1205,8 +1228,18 @@ end else begin : mac
|
||||
/*
|
||||
* PTP
|
||||
*/
|
||||
.tx_ptp_ts(tx_ptp_ts),
|
||||
.rx_ptp_ts(rx_ptp_ts),
|
||||
.ptp_clk(ptp_clk),
|
||||
.ptp_rst(ptp_rst),
|
||||
.ptp_sample_clk(ptp_sample_clk),
|
||||
.ptp_td_sdi(ptp_td_sdi),
|
||||
.tx_ptp_ts_in(tx_ptp_ts_in),
|
||||
.tx_ptp_ts_out(tx_ptp_ts_out),
|
||||
.tx_ptp_ts_step_out(tx_ptp_ts_step_out),
|
||||
.tx_ptp_locked(tx_ptp_locked),
|
||||
.rx_ptp_ts_in(rx_ptp_ts_in),
|
||||
.rx_ptp_ts_out(rx_ptp_ts_out),
|
||||
.rx_ptp_ts_step_out(rx_ptp_ts_step_out),
|
||||
.rx_ptp_locked(rx_ptp_locked),
|
||||
|
||||
/*
|
||||
* Link-level Flow Control (LFC) (IEEE 802.3 annex 31B PAUSE)
|
||||
|
||||
Reference in New Issue
Block a user