aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/lib/fifo/axis_fifo_monitor.v
diff options
context:
space:
mode:
Diffstat (limited to 'fpga/usrp3/lib/fifo/axis_fifo_monitor.v')
-rw-r--r--fpga/usrp3/lib/fifo/axis_fifo_monitor.v66
1 files changed, 66 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/fifo/axis_fifo_monitor.v b/fpga/usrp3/lib/fifo/axis_fifo_monitor.v
new file mode 100644
index 000000000..e3bb2c633
--- /dev/null
+++ b/fpga/usrp3/lib/fifo/axis_fifo_monitor.v
@@ -0,0 +1,66 @@
+//
+// Copyright 2018 Ettus Research, a National Instruments Company
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+//
+// Description:
+// This module is instantiated in parallel with a FIFO with AXI4-STREAM interfaces.
+// It tracks how many complete packets are contained within the FIFO, and also indicates
+// when the first word of a packet is presented on the FIFO outputs.
+
+module axis_fifo_monitor #(
+ parameter COUNT_W = 32
+)(
+ // Clocks and resets
+ input wire clk,
+ input wire reset,
+ // FIFO Input
+ input wire i_tlast,
+ input wire i_tvalid,
+ input wire i_tready,
+ // FIFO Output
+ input wire o_tlast,
+ input wire o_tvalid,
+ input wire o_tready,
+ // FIFO Stats
+ output wire i_sop,
+ output wire i_eop,
+ output wire o_sop,
+ output wire o_eop,
+ output wire [COUNT_W-1:0] occupied,
+ output wire [COUNT_W-1:0] occupied_pkts
+);
+
+ wire [COUNT_W-1:0] i_pkt_count, o_pkt_count;
+ wire [COUNT_W-1:0] i_xfer_count, o_xfer_count;
+
+ axis_strm_monitor #(
+ .WIDTH(1), .COUNT_W(COUNT_W),
+ .PKT_LENGTH_EN(0), .PKT_CHKSUM_EN(0),
+ .PKT_COUNT_EN(1), .XFER_COUNT_EN(1)
+ ) input_monitor (
+ .clk(clk), .reset(reset),
+ .axis_tdata(1'b0), .axis_tlast(i_tlast), .axis_tvalid(i_tvalid), .axis_tready(i_tready),
+ .sop(i_sop), .eop(i_eop),
+ .pkt_length(), .pkt_chksum(),
+ .pkt_count(i_pkt_count), .xfer_count(i_xfer_count)
+ );
+
+ axis_strm_monitor #(
+ .WIDTH(1), .COUNT_W(COUNT_W),
+ .PKT_LENGTH_EN(0), .PKT_CHKSUM_EN(0),
+ .PKT_COUNT_EN(1), .XFER_COUNT_EN(1)
+ ) output_monitor (
+ .clk(clk), .reset(reset),
+ .axis_tdata(1'b0), .axis_tlast(o_tlast), .axis_tvalid(o_tvalid), .axis_tready(o_tready),
+ .sop(o_sop), .eop(o_eop),
+ .pkt_length(), .pkt_chksum(),
+ .pkt_count(o_pkt_count), .xfer_count(o_xfer_count)
+ );
+
+ // Count packets in FIFO.
+ // No protection on counter wrap,
+ assign occupied = (i_xfer_count - o_xfer_count);
+ assign occupied_pkts = (i_pkt_count - o_pkt_count);
+
+ endmodule \ No newline at end of file