updated wiki url
[debian/gnuradio] / usrp2 / fpga / serdes / serdes_fc_rx.v
1
2
3 module serdes_fc_rx
4   #(parameter LWMARK = 64,
5     parameter HWMARK = 320)
6     (input clk, input rst,
7      input [15:0] fifo_space, 
8      output reg send_xon,
9      output reg send_xoff,
10      input sent);
11     
12    reg [15:0]     countdown;
13    reg            send_xon_int, send_xoff_int;
14    
15    always @(posedge clk)
16      if(rst)
17        begin
18           send_xon_int <= 0;
19           send_xoff_int <= 0;
20           countdown <= 0;
21        end
22      else 
23        begin
24           send_xon_int <= 0;
25           send_xoff_int <= 0;
26           if(countdown == 0)
27             if(fifo_space < LWMARK)
28               begin
29                  send_xoff_int <= 1;
30                  countdown <= 240;
31               end
32             else
33               ;
34           else
35             if(fifo_space > HWMARK)
36               begin
37                  send_xon_int <= 1;
38                  countdown <= 0;
39               end
40             else
41               countdown <= countdown - 1;
42        end // else: !if(rst)
43
44    // If we are between the high and low water marks, we let the countdown expire
45
46    always @(posedge clk)
47      if(rst)
48        send_xon <= 0;
49      else if(send_xon_int)
50        send_xon <= 1;
51      else if(sent)
52        send_xon <= 0;
53
54    always @(posedge clk)
55      if(rst)
56        send_xoff <= 0;
57      else if(send_xoff_int)
58        send_xoff <= 1;
59      else if(sent)
60        send_xoff <= 0;
61    
62 endmodule // serdes_fc_rx