[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r7071 - usrp2/trunk/fpga/serdes,
matt <=