summaryrefslogtreecommitdiffstats
path: root/udp/fifo19_rxrealign.v
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-01-05 14:39:52 -0800
committerJosh Blum <josh@joshknows.com>2010-01-05 14:39:52 -0800
commit6b0dc91d66eb56bb682295d07c97caf0f07da8b1 (patch)
tree940850e3f2a8695eba30b73a43d589558bfc7ff8 /udp/fifo19_rxrealign.v
parentf238468d299312ed562c6f711150f04b070818ed (diff)
parent5c2e94296991891d973ad7bd99ee59cded3a5418 (diff)
downloaduhd-6b0dc91d66eb56bb682295d07c97caf0f07da8b1.tar.gz
uhd-6b0dc91d66eb56bb682295d07c97caf0f07da8b1.tar.bz2
uhd-6b0dc91d66eb56bb682295d07c97caf0f07da8b1.zip
Merge branch 'udp' of http://gnuradio.org/git/matt into wip/usrp2
Conflicts: usrp2/fpga/top/u2_rev3/Makefile
Diffstat (limited to 'udp/fifo19_rxrealign.v')
-rw-r--r--udp/fifo19_rxrealign.v42
1 files changed, 42 insertions, 0 deletions
diff --git a/udp/fifo19_rxrealign.v b/udp/fifo19_rxrealign.v
new file mode 100644
index 000000000..35ad90951
--- /dev/null
+++ b/udp/fifo19_rxrealign.v
@@ -0,0 +1,42 @@
+
+
+// Adds a junk line at the beginning of every packet, which the
+// following stages should ignore. This gives us proper alignment due
+// to the 14 byte ethernet header
+
+// Bit 18 -- odd length
+// Bit 17 -- eof
+// Bit 16 -- sof
+// Bit 15:0 -- data
+
+module fifo19_rxrealign
+ (input clk, input reset, input clear,
+ input [18:0] datain, input src_rdy_i, output dst_rdy_o,
+ output [18:0] dataout, output src_rdy_o, input dst_rdy_i);
+
+ reg rxre_state;
+ localparam RXRE_DUMMY = 0;
+ localparam RXRE_PKT = 1;
+
+ assign dataout[18] = datain[18];
+ assign dataout[17] = datain[17];
+ assign dataout[16] = (rxre_state==RXRE_DUMMY) | (datain[17] & datain[16]); // allows for passing error signal
+ assign dataout[15:0] = datain[15:0];
+
+ always @(posedge clk)
+ if(reset | clear)
+ rxre_state <= RXRE_DUMMY;
+ else if(src_rdy_i & dst_rdy_i)
+ case(rxre_state)
+ RXRE_DUMMY :
+ rxre_state <= RXRE_PKT;
+ RXRE_PKT :
+ if(datain[17]) // if eof or error
+ rxre_state <= RXRE_DUMMY;
+ endcase // case (rxre_state)
+
+ assign src_rdy_o = src_rdy_i & dst_rdy_i; // Send anytime both sides are ready
+ assign dst_rdy_o = src_rdy_i & dst_rdy_i & (rxre_state == RXRE_PKT); // Only consume after the dummy
+
+endmodule // fifo19_rxrealign
+