diff options
-rw-r--r-- | usrp2/vrt/vita_tx_control.v | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index 29d3041b5..f45ba73f1 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -6,8 +6,8 @@ module vita_tx_control input set_stb, input [7:0] set_addr, input [31:0] set_data, input [63:0] vita_time, - output reg [3:0] error_code, output error, + output reg [3:0] error_code, // From vita_tx_deframer input [5+64+WIDTH-1:0] sample_fifo_i, @@ -43,10 +43,8 @@ module vita_tx_control localparam IBS_IDLE = 0; localparam IBS_RUN = 1; // FIXME do we need this? localparam IBS_CONT_BURST = 2; - localparam IBS_UNDERRUN = 3; - localparam IBS_TIME_ERROR = 4; - localparam IBS_SEQ_ERROR = 5; - localparam IBS_ERROR_DONE = 7; + localparam IBS_ERROR = 3; + localparam IBS_ERROR_DONE = 4; localparam CODE_UNDERRUN = 2; localparam CODE_SEQ_ERROR = 4; @@ -67,16 +65,25 @@ module vita_tx_control IBS_IDLE : if(sample_fifo_src_rdy_i) if(seqnum_err) - ibs_state <= IBS_SEQ_ERROR; + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_SEQ_ERROR; + end else if(~send_at | now) ibs_state <= IBS_RUN; else if(late | too_early) - ibs_state <= IBS_TIME_ERROR; + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_TIME_ERROR; + end IBS_RUN : if(strobe) if(~sample_fifo_src_rdy_i) - ibs_state <= IBS_UNDERRUN; + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_UNDERRUN; + end else if(eop) if(eob) ibs_state <= IBS_IDLE; @@ -85,35 +92,29 @@ module vita_tx_control IBS_CONT_BURST : if(strobe) - ibs_state <= IBS_ERROR_DONE; + begin + ibs_state <= IBS_ERROR_DONE; + error_code <= CODE_UNDERRUN; + end else if(sample_fifo_src_rdy_i) if(seqnum_err) - ibs_state <= IBS_SEQ_ERROR; + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_SEQ_ERROR; + end else ibs_state <= IBS_RUN; - IBS_UNDERRUN : - begin - error_code <= CODE_UNDERRUN; - if(sample_fifo_src_rdy_i & eop) - ibs_state <= IBS_ERROR_DONE; - end - IBS_TIME_ERROR : - begin - error_code <= CODE_TIME_ERROR; - ibs_state <= IBS_ERROR_DONE; - end - IBS_SEQ_ERROR : - begin - error_code <= CODE_SEQ_ERROR; - ibs_state <= IBS_ERROR_DONE; - end + IBS_ERROR : + if(sample_fifo_src_rdy_i & eop) + ibs_state <= IBS_ERROR_DONE; + IBS_ERROR_DONE : ; endcase // case (ibs_state) - assign sample_fifo_dst_rdy_o = (ibs_state == IBS_UNDERRUN) | (strobe & (ibs_state == IBS_RUN)); // FIXME also cleanout + assign sample_fifo_dst_rdy_o = (ibs_state == IBS_ERROR) | (strobe & (ibs_state == IBS_RUN)); // FIXME also cleanout assign run = (ibs_state == IBS_RUN) | (ibs_state == IBS_CONT_BURST); assign error = (ibs_state == IBS_ERROR_DONE); |