diff options
Diffstat (limited to 'fpga/usrp3/lib/xge_interface/xge_handshake.v')
-rw-r--r-- | fpga/usrp3/lib/xge_interface/xge_handshake.v | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/xge_interface/xge_handshake.v b/fpga/usrp3/lib/xge_interface/xge_handshake.v new file mode 100644 index 000000000..251099f57 --- /dev/null +++ b/fpga/usrp3/lib/xge_interface/xge_handshake.v @@ -0,0 +1,60 @@ +// +// Copyright 2013 Ettus Research LLC +// + +// +// +// Provide required handshake to Opencores XGE MAC to initiate Rx of one available packet +// +// + + +module xge_handshake + ( + input clk, + input reset, + output reg pkt_rx_ren, + input pkt_rx_avail, + input pkt_rx_eop + ); + + localparam IDLE=0; + localparam RX=1; + + reg state; + + + always @(posedge clk) + if (reset) begin + pkt_rx_ren <= 0; + state <= IDLE; + end else begin + case (state) + // + // Wait for pkt_rx_avail to be asserted, then assert pkt_rx_ren next cycle + // + IDLE: begin + if (pkt_rx_avail) begin + pkt_rx_ren <= 1; + state <= RX; + end else begin + pkt_rx_ren <= 0; + state <= IDLE; + end + end + // + // Keep pkt_rx_ren asserted until EOF received. + // + RX: begin + if (pkt_rx_eop) begin + pkt_rx_ren <= 0; + state <= IDLE; + end else begin + pkt_rx_ren <= 1; + state <= RX; + end + end + + endcase // case(state) + end // else: !if(reset) +endmodule // xge_handshake |