diff options
author | Matt Ettus <matt@ettus.com> | 2011-03-28 16:51:02 -0700 |
---|---|---|
committer | Matt Ettus <matt@ettus.com> | 2011-05-26 17:31:22 -0700 |
commit | b51ef6e5a461dd4d1c42252e902bdbedfa5dc8a7 (patch) | |
tree | a836452f7065ef6bd13895821ecdb5a3cf093983 /usrp2/gpif/packet_splitter.v | |
parent | d0bfde4213dcab7fe3c5db404ef0f01354d56f67 (diff) | |
download | uhd-b51ef6e5a461dd4d1c42252e902bdbedfa5dc8a7.tar.gz uhd-b51ef6e5a461dd4d1c42252e902bdbedfa5dc8a7.tar.bz2 uhd-b51ef6e5a461dd4d1c42252e902bdbedfa5dc8a7.zip |
should split and reframe packets properly
Diffstat (limited to 'usrp2/gpif/packet_splitter.v')
-rw-r--r-- | usrp2/gpif/packet_splitter.v | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/usrp2/gpif/packet_splitter.v b/usrp2/gpif/packet_splitter.v index 43515dd8b..f8028a4df 100644 --- a/usrp2/gpif/packet_splitter.v +++ b/usrp2/gpif/packet_splitter.v @@ -19,6 +19,8 @@ module packet_splitter localparam PS_FRAME = 1; localparam PS_NEW_FRAME = 2; localparam PS_PAD = 3; + + wire eof_i = data_i[17]; always @(posedge clk) if(reset | clear) @@ -34,30 +36,33 @@ module packet_splitter end PS_FRAME : if(src_rdy_i & dst_rdy_i) - if(frame_len == 0) - if(length == 0) - state <= PS_IDLE; - else - begin - state <= PS_NEW_FRAME; - frame_len <= FRAME_LEN; - length <= length - 1; - end + if((frame_len == 2) & ((length == 2) | eof_i)) + state <= PS_IDLE; + else if(frame_len == 2) + begin + state <= PS_NEW_FRAME; + length <= length - 1; + end + else if((length == 2)|eof_i) + begin + frame_len <= frame_len - 1; + state <= PS_PAD; + end else - if(length == 0) - begin - frame_len <= frame_len - 1; - state <= PS_PAD; - end + begin + frame_len <= frame_len - 1; + length <= length - 1; + end PS_NEW_FRAME : if(src_rdy_i & dst_rdy_i) begin - frame_len <= frame_len - 1; + frame_len <= FRAME_LEN; state <= PS_FRAME; + length <= length - 1; end PS_PAD : if(dst_rdy_i) - if(frame_len == 0) + if(frame_len == 2) state <= PS_IDLE; else frame_len <= frame_len - 1; @@ -70,7 +75,7 @@ module packet_splitter assign src_rdy_o = src_rdy_i | (state == PS_PAD); wire occ_out = 0; - wire eof_out = (frame_len == 0) & (state != PS_IDLE); + wire eof_out = (frame_len == 2) & (state != PS_IDLE) & (state != PS_NEW_FRAME); wire sof_out = (state == PS_IDLE) | (state == PS_NEW_FRAME); wire [15:0] data_out = data_i[15:0]; |