diff options
Diffstat (limited to 'usrp2/fifo')
| -rw-r--r-- | usrp2/fifo/fifo19_pad.v | 66 | 
1 files changed, 66 insertions, 0 deletions
| diff --git a/usrp2/fifo/fifo19_pad.v b/usrp2/fifo/fifo19_pad.v new file mode 100644 index 000000000..1a40c1631 --- /dev/null +++ b/usrp2/fifo/fifo19_pad.v @@ -0,0 +1,66 @@ + +// Pads a packet out to the minimum length +//  Packets already longer than min length are unchanged + + +module fifo19_pad +  #(parameter LENGTH=16, +    parameter PAD_VALUE=0) +   (input clk, input reset, input clear, +    input [18:0] data_i, +    input src_rdy_i, +    output dst_rdy_o, +    output [18:0] data_o, +    output src_rdy_o, +    input dst_rdy_i); + +   reg [15:0] count; +   reg [1:0]  pad_state; +   localparam PAD_IDLE = 0; +   localparam PAD_TOOSHORT = 1; +   localparam PAD_LONGENOUGH = 2; +   localparam PAD_PADDING = 3; + +   always @(posedge clk) +     if(reset | clear) +       pad_state <= PAD_IDLE; +     else +       case(pad_state) +	 PAD_IDLE : +	   begin +	      count <= 1; +	      pad_state <= PAD_TOOSHORT; +	   end +	 PAD_TOOSHORT : +	   if(src_rdy_i & dst_rdy_i) +	     begin +		count <= count + 1; +		if(data_i[17]) +		  pad_state <= PAD_PADDING; +		else if(count == (LENGTH-1)) +		  pad_state <= PAD_LONGENOUGH; +	     end +	 PAD_PADDING : +	   if(dst_rdy_i) +	     begin +		count <= count + 1; +		if(count == LENGTH) +		  pad_state <= PAD_IDLE; +	     end +	 PAD_LONGENOUGH : +	   if(src_rdy_i & dst_rdy_i & data_i[17]) +	     pad_state <= PAD_IDLE; +       endcase // case (pad_state) +    +   wire passthru = (pad_state == PAD_TOOSHORT) | (pad_state == PAD_LONGENOUGH); +    +   assign dst_rdy_o = passthru ? dst_rdy_i : 1'b0; +   assign src_rdy_o = passthru ? src_rdy_i : (pad_state == PAD_PADDING); +    +   assign data_o[15:0] = (pad_state == PAD_PADDING) ? PAD_VALUE : data_i[15:0]; +   assign data_o[16] = (count == 1); +   assign data_o[17] = (pad_state == PAD_LONGENOUGH) ? data_i[17] : (count == LENGTH); +   assign data_o[18] = (pad_state == PAD_LONGENOUGH) ? data_i[18] : 1'b0; +    +          +endmodule // fifo19_pad | 
