summaryrefslogtreecommitdiffstats
path: root/usrp2/fifo/packet_verifier.v
diff options
context:
space:
mode:
authorMatt Ettus <matt@ettus.com>2011-03-03 18:34:45 -0800
committerMatt Ettus <matt@ettus.com>2011-03-03 18:34:45 -0800
commite38280063a673e2f12c8196c5713c7decff7764a (patch)
tree4437cd65175b15edcfc76668a211b1375f4e19af /usrp2/fifo/packet_verifier.v
parent8e27fc0c3c1e14e23f6f66911eb2e1aaaf061484 (diff)
parent8d82fcacc459caac6b3d4ddfd3821f69cc9037ea (diff)
downloaduhd-e38280063a673e2f12c8196c5713c7decff7764a.tar.gz
uhd-e38280063a673e2f12c8196c5713c7decff7764a.tar.bz2
uhd-e38280063a673e2f12c8196c5713c7decff7764a.zip
Merge branch 'gpmc_testing' into ethfifo_reorg
* gpmc_testing: timed packet generator : Temporarily use a checksum rather than a crc to validate packet integrity. correct port names fifo36_mux now has shortfifos on the input ports as well as output timed tester : Bring out src/dst flags for rx chain for testing. u1e: hook up tester controls move declarations to before use hook up under/overruns for debug purposes e100: integrate loopback and timed testing into main image Fix endianess for packet length and sequence number for e100 timed image. put these files in the right place. newfifo is long gone.
Diffstat (limited to 'usrp2/fifo/packet_verifier.v')
-rw-r--r--usrp2/fifo/packet_verifier.v61
1 files changed, 61 insertions, 0 deletions
diff --git a/usrp2/fifo/packet_verifier.v b/usrp2/fifo/packet_verifier.v
new file mode 100644
index 000000000..21a4c136e
--- /dev/null
+++ b/usrp2/fifo/packet_verifier.v
@@ -0,0 +1,61 @@
+
+
+// Packet format --
+// Line 1 -- Length, 32 bits
+// Line 2 -- Sequence number, 32 bits
+// Last line -- CRC, 32 bits
+
+module packet_verifier
+ (input clk, input reset, input clear,
+ input [7:0] data_i, input sof_i, input eof_i, input src_rdy_i, output dst_rdy_o,
+
+ output reg [31:0] total,
+ output reg [31:0] crc_err,
+ output reg [31:0] seq_err,
+ output reg [31:0] len_err);
+
+ reg [31:0] seq_num;
+ reg [31:0] length;
+ wire first_byte, last_byte;
+ reg second_byte, last_byte_d1;
+ wire match_crc;
+ wire calc_crc = src_rdy_i & dst_rdy_o;
+
+ crc crc(.clk(clk), .reset(reset), .clear(last_byte_d1), .data(data_i),
+ .calc(calc_crc), .crc_out(), .match(match_crc));
+
+ assign first_byte = src_rdy_i & dst_rdy_o & sof_i;
+ assign last_byte = src_rdy_i & dst_rdy_o & eof_i;
+ assign dst_rdy_o = ~last_byte_d1;
+
+ // stubs for now
+ wire match_seq = 1;
+ wire match_len = 1;
+
+ always @(posedge clk)
+ if(reset | clear)
+ last_byte_d1 <= 0;
+ else
+ last_byte_d1 <= last_byte;
+
+ always @(posedge clk)
+ if(reset | clear)
+ begin
+ total <= 0;
+ crc_err <= 0;
+ seq_err <= 0;
+ len_err <= 0;
+ end
+ else
+ if(last_byte_d1)
+ begin
+ total <= total + 1;
+ if(~match_crc)
+ crc_err <= crc_err + 1;
+ else if(~match_seq)
+ seq_err <= seq_err + 1;
+ else if(~match_len)
+ seq_err <= len_err + 1;
+ end
+
+endmodule // packet_verifier