Revision 7c50d20e usrp2/vrt/vita_rx_framer.v
| b/usrp2/vrt/vita_rx_framer.v | ||
|---|---|---|
| 99 | 99 |
localparam VITA_ERR_TICS = 12; |
| 100 | 100 |
localparam VITA_ERR_TICS2 = 13; |
| 101 | 101 |
localparam VITA_ERR_PAYLOAD = 14; |
| 102 |
localparam VITA_ERR_TRAILER = 15; |
|
| 102 |
localparam VITA_ERR_TRAILER = 15; // Extension context packets have no trailer
|
|
| 103 | 103 |
|
| 104 | 104 |
always @(posedge clk) |
| 105 | 105 |
if(reset | clear_pkt_count) |
| ... | ... | |
| 107 | 107 |
else if((vita_state == VITA_TRAILER) & pkt_fifo_rdy) |
| 108 | 108 |
pkt_count <= pkt_count + 1; |
| 109 | 109 |
|
| 110 |
wire has_streamid = vita_header[28]; |
|
| 111 |
wire has_trailer = vita_header[26]; |
|
| 112 |
reg trl_eob; |
|
| 113 |
|
|
| 110 | 114 |
always @* |
| 111 | 115 |
case(vita_state) |
| 112 |
VITA_HEADER, VITA_ERR_HEADER : pkt_fifo_line <= {2'b01,vita_header[31:20],pkt_count,vita_pkt_len};
|
|
| 113 |
VITA_STREAMID, VITA_ERR_STREAMID : pkt_fifo_line <= {2'b00,vita_streamid};
|
|
| 114 |
VITA_SECS, VITA_ERR_SECS : pkt_fifo_line <= {2'b00,vita_time_fifo_o[63:32]};
|
|
| 115 |
VITA_TICS, VITA_ERR_TICS : pkt_fifo_line <= {2'b00,32'd0};
|
|
| 116 |
VITA_TICS2, VITA_ERR_TICS2 : pkt_fifo_line <= {2'b00,vita_time_fifo_o[31:0]};
|
|
| 116 |
// Data packets are IF Data packets with or w/o streamid, no classid, with trailer |
|
| 117 |
VITA_HEADER : pkt_fifo_line <= {2'b01,3'b000,vita_header[28],2'b01,vita_header[25:20],pkt_count,vita_pkt_len};
|
|
| 118 |
VITA_STREAMID : pkt_fifo_line <= {2'b00,vita_streamid};
|
|
| 119 |
VITA_SECS : pkt_fifo_line <= {2'b00,vita_time_fifo_o[63:32]};
|
|
| 120 |
VITA_TICS : pkt_fifo_line <= {2'b00,32'd0};
|
|
| 121 |
VITA_TICS2 : pkt_fifo_line <= {2'b00,vita_time_fifo_o[31:0]};
|
|
| 117 | 122 |
VITA_PAYLOAD : pkt_fifo_line <= {2'b00,data_fifo_o};
|
| 118 |
VITA_ERR_PAYLOAD : pkt_fifo_line <= {2'b00,28'd0,flags_fifo_o};
|
|
| 119 |
VITA_TRAILER : pkt_fifo_line <= {2'b10,vita_trailer};
|
|
| 120 |
VITA_ERR_TRAILER : pkt_fifo_line <= {2'b11,vita_trailer};
|
|
| 123 |
VITA_TRAILER : pkt_fifo_line <= {2'b10,vita_trailer[31:21],1'b1,vita_trailer[19:9],trl_eob,8'd0};
|
|
| 124 |
|
|
| 125 |
// Error packets are Extension Context packets, which have no trailer |
|
| 126 |
VITA_ERR_HEADER : pkt_fifo_line <= {2'b01,4'b0101,4'b0000,vita_header[23:20],pkt_count,16'd6};
|
|
| 127 |
VITA_ERR_STREAMID : pkt_fifo_line <= {2'b00,vita_streamid};
|
|
| 128 |
VITA_ERR_SECS : pkt_fifo_line <= {2'b00,vita_time_fifo_o[63:32]};
|
|
| 129 |
VITA_ERR_TICS : pkt_fifo_line <= {2'b00,32'd0};
|
|
| 130 |
VITA_ERR_TICS2 : pkt_fifo_line <= {2'b00,vita_time_fifo_o[31:0]};
|
|
| 131 |
VITA_ERR_PAYLOAD : pkt_fifo_line <= {2'b11,28'd0,flags_fifo_o};
|
|
| 132 |
//VITA_ERR_TRAILER : pkt_fifo_line <= {2'b11,vita_trailer};
|
|
| 133 |
|
|
| 121 | 134 |
default : pkt_fifo_line <= 34'h0_FFFF_FFFF; |
| 122 | 135 |
endcase // case (vita_state) |
| 123 | 136 |
|
| ... | ... | |
| 141 | 154 |
end |
| 142 | 155 |
else if(pkt_fifo_rdy) |
| 143 | 156 |
case(vita_state) |
| 157 |
VITA_HEADER : |
|
| 158 |
if(has_streamid) |
|
| 159 |
vita_state <= VITA_STREAMID; |
|
| 160 |
else |
|
| 161 |
vita_state <= VITA_SECS; |
|
| 144 | 162 |
VITA_PAYLOAD : |
| 145 | 163 |
if(sample_fifo_src_rdy_i) |
| 146 | 164 |
begin |
| ... | ... | |
| 148 | 166 |
begin |
| 149 | 167 |
sample_phase <= 0; |
| 150 | 168 |
sample_ctr <= sample_ctr + 1; |
| 169 |
trl_eob <= flags_fifo_o[0]; |
|
| 151 | 170 |
if(sample_ctr == samples_per_packet) |
| 152 | 171 |
vita_state <= VITA_TRAILER; |
| 153 | 172 |
if(|flags_fifo_o) // end early if any flag is set |
| ... | ... | |
| 155 | 174 |
end |
| 156 | 175 |
else |
| 157 | 176 |
sample_phase <= sample_phase + 1; |
| 158 |
end |
|
| 159 |
VITA_TRAILER, VITA_ERR_TRAILER : |
|
| 177 |
end // if (sample_fifo_src_rdy_i) |
|
| 178 |
VITA_ERR_PAYLOAD : |
|
| 179 |
vita_state <= VITA_IDLE; |
|
| 180 |
VITA_TRAILER : |
|
| 160 | 181 |
vita_state <= VITA_IDLE; |
| 161 | 182 |
default : |
| 162 | 183 |
vita_state <= vita_state + 1; |
Also available in: Unified diff