diff options
author | Josh Blum <josh@joshknows.com> | 2010-01-05 14:39:52 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-01-05 14:39:52 -0800 |
commit | 6b0dc91d66eb56bb682295d07c97caf0f07da8b1 (patch) | |
tree | 940850e3f2a8695eba30b73a43d589558bfc7ff8 /udp/fifo19_rxrealign.v | |
parent | f238468d299312ed562c6f711150f04b070818ed (diff) | |
parent | 5c2e94296991891d973ad7bd99ee59cded3a5418 (diff) | |
download | uhd-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.v | 42 |
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 + |