aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/lib/packet_proc/axis_packet_debug.v
diff options
context:
space:
mode:
authorAshish Chaudhari <ashish@ettus.com>2014-09-24 18:45:31 -0700
committerAshish Chaudhari <ashish@ettus.com>2014-09-24 18:45:31 -0700
commit64d71dcbc5fa6790385b288de25224d386b047b0 (patch)
tree05d1048d44f5347f39b4036163a758e0a75d1ea3 /fpga/usrp3/lib/packet_proc/axis_packet_debug.v
parentecdd34c08b79117c4f739b336daeb4b9d2bc8df3 (diff)
downloaduhd-64d71dcbc5fa6790385b288de25224d386b047b0.tar.gz
uhd-64d71dcbc5fa6790385b288de25224d386b047b0.tar.bz2
uhd-64d71dcbc5fa6790385b288de25224d386b047b0.zip
fpga: Multiple X300 FPGA bugfixes and enhancements
- Fixed 10GigE firmware communication issues and sequence errors for TX - Multiple changes to help ease timing closure - Cleaned up build scripts - Switched to Xilinx ISE 14.7 as the default build tool for X300
Diffstat (limited to 'fpga/usrp3/lib/packet_proc/axis_packet_debug.v')
-rw-r--r--fpga/usrp3/lib/packet_proc/axis_packet_debug.v71
1 files changed, 71 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/packet_proc/axis_packet_debug.v b/fpga/usrp3/lib/packet_proc/axis_packet_debug.v
new file mode 100644
index 000000000..7d968e7b1
--- /dev/null
+++ b/fpga/usrp3/lib/packet_proc/axis_packet_debug.v
@@ -0,0 +1,71 @@
+//
+// Copyright 2014 Ettus Research LLC
+//
+
+module axis_packet_debug (
+ input clk,
+ input reset,
+ input clear,
+
+ //Packet In
+ input [63:0] tdata,
+ input tlast,
+ input tvalid,
+ input tready,
+
+ //Per packet info
+ output reg pkt_strobe,
+ output reg [15:0] length,
+ output reg [63:0] checksum,
+
+ //Statistics
+ output reg [31:0] pkt_count
+);
+
+ localparam ST_HEADER = 1'b0;
+ localparam ST_DATA = 1'b1;
+
+ //Packet state logic
+ reg pkt_state;
+ always @(posedge clk) begin
+ if (reset) begin
+ pkt_state <= ST_HEADER;
+ end else if (tvalid & tready) begin
+ pkt_state <= tlast ? ST_HEADER : ST_DATA;
+ end
+ end
+
+ //Trigger logic
+ always @(posedge clk)
+ if (reset)
+ pkt_strobe <= 1'b0;
+ else
+ pkt_strobe <= tvalid & tready & tlast;
+
+ //Length capture
+ always @(posedge clk)
+ if (reset || pkt_state == ST_HEADER)
+ length <= tlast ? 16'd8 : 16'd0;
+ else
+ if (tvalid & tready)
+ length <= length + 16'd8;
+
+ //Checksum capture
+ always @(posedge clk)
+ if (reset || pkt_state == ST_HEADER)
+ checksum <= 64'd0;
+ else
+ if (tvalid & tready)
+ checksum <= checksum ^ tdata;
+
+ //Counts
+ always @(posedge clk)
+ if (reset | clear) begin
+ pkt_count <= 32'd0;
+ end else begin
+ if (tvalid & tready & tlast) begin
+ pkt_count <= pkt_count + 32'd1;
+ end
+ end
+
+endmodule // cvita_packet_debug