mirror of
https://github.com/fpganinja/taxi.git
synced 2025-12-07 16:28:40 -08:00
zircon: Add TX buffer module
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
135
src/zircon/rtl/zircon_ip_tx_buffer.sv
Normal file
135
src/zircon/rtl/zircon_ip_tx_buffer.sv
Normal file
@@ -0,0 +1,135 @@
|
||||
// SPDX-License-Identifier: CERN-OHL-S-2.0
|
||||
/*
|
||||
|
||||
Copyright (c) 2025 FPGA Ninja, LLC
|
||||
|
||||
Authors:
|
||||
- Alex Forencich
|
||||
|
||||
*/
|
||||
|
||||
`resetall
|
||||
`timescale 1ns / 1ps
|
||||
`default_nettype none
|
||||
|
||||
/*
|
||||
* Zircon IP stack - TX packet buffer
|
||||
*/
|
||||
module zircon_ip_tx_buffer #
|
||||
(
|
||||
parameter N_UI = 4,
|
||||
parameter TX_RAM_SIZE = 32768
|
||||
)
|
||||
(
|
||||
input wire logic clk,
|
||||
input wire logic rst,
|
||||
|
||||
/*
|
||||
* Packet data input
|
||||
*/
|
||||
taxi_axis_if.snk s_axis_pkt_ui[N_UI],
|
||||
|
||||
/*
|
||||
* Metadata output
|
||||
*/
|
||||
taxi_axis_if.src m_axis_meta_len,
|
||||
|
||||
/*
|
||||
* Transfer command input and packet data output
|
||||
*/
|
||||
taxi_axis_if.src m_axis_pkt
|
||||
);
|
||||
|
||||
localparam DATA_W = m_axis_pkt.DATA_W;
|
||||
localparam TX_USER_W = m_axis_pkt.USER_W;
|
||||
localparam TX_TAG_W = m_axis_pkt.ID_W;
|
||||
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .USER_EN(1), .USER_W(TX_USER_W), .ID_EN(1), .ID_W(TX_TAG_W)) axis_pkt_1();
|
||||
taxi_axis_if #(.DATA_W(DATA_W), .USER_EN(1), .USER_W(TX_USER_W), .ID_EN(1), .ID_W(TX_TAG_W)) axis_pkt_2();
|
||||
|
||||
taxi_axis_arb_mux #(
|
||||
.S_COUNT(N_UI),
|
||||
.UPDATE_TID(1'b0),
|
||||
.ARB_ROUND_ROBIN(1'b1),
|
||||
.ARB_LSB_HIGH_PRIO(1'b1)
|
||||
)
|
||||
mux_inst (
|
||||
.clk(clk),
|
||||
.rst(rst),
|
||||
|
||||
/*
|
||||
* AXI4-Stream inputs (sink)
|
||||
*/
|
||||
.s_axis(s_axis_pkt_ui),
|
||||
|
||||
/*
|
||||
* AXI4-Stream output (source)
|
||||
*/
|
||||
.m_axis(axis_pkt_1)
|
||||
);
|
||||
|
||||
zircon_ip_len_cksum #(
|
||||
.START_OFFSET(0)
|
||||
)
|
||||
tx_len_cksum_inst (
|
||||
.clk(clk),
|
||||
.rst(rst),
|
||||
|
||||
/*
|
||||
* Packet passthrough
|
||||
*/
|
||||
.s_axis_pkt(axis_pkt_1),
|
||||
.m_axis_pkt(axis_pkt_2),
|
||||
|
||||
/*
|
||||
* Packet metadata output
|
||||
*/
|
||||
.m_axis_meta(m_axis_meta_len)
|
||||
);
|
||||
|
||||
taxi_axis_fifo #(
|
||||
.DEPTH(TX_RAM_SIZE),
|
||||
.RAM_PIPELINE(1),
|
||||
.OUTPUT_FIFO_EN(1'b0),
|
||||
.FRAME_FIFO(1'b0),
|
||||
.USER_BAD_FRAME_VALUE(1'b1),
|
||||
.USER_BAD_FRAME_MASK(1'b1),
|
||||
.DROP_OVERSIZE_FRAME(1'b0),
|
||||
.DROP_BAD_FRAME(1'b0),
|
||||
.DROP_WHEN_FULL(1'b0),
|
||||
.MARK_WHEN_FULL(1'b0),
|
||||
.PAUSE_EN(1'b0)
|
||||
)
|
||||
tx_fifo_inst (
|
||||
.clk(clk),
|
||||
.rst(rst),
|
||||
|
||||
/*
|
||||
* AXI4-Stream input (sink)
|
||||
*/
|
||||
.s_axis(axis_pkt_2),
|
||||
|
||||
/*
|
||||
* AXI4-Stream output (source)
|
||||
*/
|
||||
.m_axis(m_axis_pkt),
|
||||
|
||||
/*
|
||||
* Pause
|
||||
*/
|
||||
.pause_req(1'b0),
|
||||
.pause_ack(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.status_depth(),
|
||||
.status_depth_commit(),
|
||||
.status_overflow(),
|
||||
.status_bad_frame(),
|
||||
.status_good_frame()
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
`resetall
|
||||
Reference in New Issue
Block a user