commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r7071 - usrp2/trunk/fpga/serdes


From: matt
Subject: [Commit-gnuradio] r7071 - usrp2/trunk/fpga/serdes
Date: Tue, 4 Dec 2007 16:44:13 -0700 (MST)

Author: matt
Date: 2007-12-04 16:44:13 -0700 (Tue, 04 Dec 2007)
New Revision: 7071

Modified:
   usrp2/trunk/fpga/serdes/serdes_tx.v
Log:
send xon and xoff when requested


Modified: usrp2/trunk/fpga/serdes/serdes_tx.v
===================================================================
--- usrp2/trunk/fpga/serdes/serdes_tx.v 2007-12-04 23:25:08 UTC (rev 7070)
+++ usrp2/trunk/fpga/serdes/serdes_tx.v 2007-12-04 23:44:13 UTC (rev 7071)
@@ -46,11 +46,12 @@
      output sent
      );
 
-   assign   sent = 0;
    localparam K_COMMA = 8'b101_11100;     // 0xBC K28.5
    localparam K_IDLE = 8'b001_11100;      // 0x3C K28.1
    localparam K_PKT_START = 8'b110_11100; // 0xDC K28.6
    localparam K_PKT_END = 8'b100_11100;   // 0x9C K28.4
+   localparam K_XON = 8'b010_11100;       // 0x5C K28.2
+   localparam K_XOFF = 8'b011_11100;      // 0x7C K28.3
    localparam K_LOS = 8'b111_11111;       // 0xFF K31.7
    localparam K_ERROR = 8'b000_00000;     // 0x00 K00.0
    
@@ -100,7 +101,8 @@
    reg [15:0]  second_word;
    reg [33:0]  pipeline;
    
-   assign      read = (state==RUN2) | ((state==IDLE) & ~empty & ~sop_o);  
+   assign      read = (~send_xon & ~send_xoff & (state==RUN2)) | 
((state==IDLE) & ~empty & ~sop_o);
+   assign      sent = send_xon | send_xoff;
    // 2nd half of above probably not necessary.  Just in case we get junk 
between packets
    
    always @(posedge clk)
@@ -110,53 +112,58 @@
          {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_COMMA,K_COMMA};
        end
      else
-       case(state)
-        IDLE :
-          begin
-             if(sop_o & ~empty & ~inhibit_tx)
-               begin
-                  {ser_tkmsb,ser_tklsb,ser_t} <= 
{2'b11,K_PKT_START,K_PKT_START};
-                  state <= RUN1;
-               end
-             else
+       if(send_xon)
+        {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_XON,K_XON};
+       else if(send_xoff)
+        {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_XOFF,K_XOFF};
+       else
+        case(state)
+          IDLE :
+            begin
+               if(sop_o & ~empty & ~inhibit_tx)
+                 begin
+                    {ser_tkmsb,ser_tklsb,ser_t} <= 
{2'b11,K_PKT_START,K_PKT_START};
+                    state <= RUN1;
+                 end
+               else
+                 {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_COMMA,K_COMMA};
+            end
+          RUN1 :
+            begin
+               if(empty | inhibit_tx)
+                 {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_COMMA,K_COMMA};
+               else
+                 begin
+                    {ser_tkmsb,ser_tklsb,ser_t} <= {2'b00,data_o[15:0]};
+                    state <= RUN2;
+                 end
+            end
+          RUN2 :
+            begin
+               {ser_tkmsb,ser_tklsb,ser_t} <= {2'b00,data_o[31:16]};
+               if(eop_o)
+                 state <= DONE;
+               else
+                 state <= RUN1;
+            end
+          DONE :
+            begin
+               {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_PKT_END,K_PKT_END};
+               state <= SENDCRC;
+            end
+          SENDCRC :
+            begin
+               {ser_tkmsb,ser_tklsb,ser_t} <= {2'b00,CRC};
+               state <= WAIT;
+            end
+          WAIT :
+            begin
                {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_COMMA,K_COMMA};
-          end
-        RUN1 :
-          begin
-             if(empty | inhibit_tx)
-               {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_COMMA,K_COMMA};
-             else
-               begin
-                  {ser_tkmsb,ser_tklsb,ser_t} <= {2'b00,data_o[15:0]};
-                  state <= RUN2;
-               end
-          end
-        RUN2 :
-          begin
-             {ser_tkmsb,ser_tklsb,ser_t} <= {2'b00,data_o[31:16]};
-             if(eop_o)
-               state <= DONE;
-             else
-               state <= RUN1;
-          end
-        DONE :
-          begin
-             {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_PKT_END,K_PKT_END};
-             state <= SENDCRC;
-          end
-        SENDCRC :
-          begin
-             {ser_tkmsb,ser_tklsb,ser_t} <= {2'b00,CRC};
-             state <= WAIT;
-          end
-        WAIT :
-          begin
-             {ser_tkmsb,ser_tklsb,ser_t} <= {2'b11,K_COMMA,K_COMMA};
-             state <= IDLE;
-          end
-        default
-          state <= IDLE;
-       endcase // case(state)
+               state <= IDLE;
+            end
+          default
+            state <= IDLE;
+        endcase // case(state)
    
    always @(posedge clk)
      if(rst)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]