OpenCores
URL https://opencores.org/ocsvn/usbhostslave/usbhostslave/trunk

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [serialInterfaceEngine/] [readUSBWireData.v] - Diff between revs 5 and 9

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 5 Rev 9
Line 39... Line 39...
//// Public License along with this source; if not, download it   ////
//// Public License along with this source; if not, download it   ////
//// from <http://www.opencores.org/lgpl.shtml>                   ////
//// from <http://www.opencores.org/lgpl.shtml>                   ////
////                                                              ////
////                                                              ////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// $Id: readUSBWireData.v,v 1.2 2004-12-18 14:36:16 sfielding Exp $
 
//
 
// CVS Revision History
 
//
 
// $Log: not supported by cvs2svn $
 
// Revision 1.1.1.1  2004/10/11 04:01:01  sfielding
 
// Created
 
//
 
//
 
 
 
`timescale 1ns / 1ps
`timescale 1ns / 1ps
`include "usbSerialInterfaceEngine_h.v"
`include "usbSerialInterfaceEngine_h.v"
 
 
module readUSBWireData (RxBitsIn, RxDataInTick, RxBitsOut, SIERxRdyIn, SIERxWEn, fullSpeedRate, disableWireRead, clk, rst);
module readUSBWireData (RxBitsIn, RxDataInTick, RxBitsOut, SIERxRdyIn, SIERxWEn, fullSpeedRate, TxWireActiveDrive, clk, rst, noActivityTimeOut);
input   [1:0] RxBitsIn;
input   [1:0] RxBitsIn;
output  RxDataInTick;
output  RxDataInTick;
input   SIERxRdyIn;
input   SIERxRdyIn;
input   clk;
input   clk;
input   fullSpeedRate;
input   fullSpeedRate;
input   rst;
input   rst;
input   disableWireRead;
input   TxWireActiveDrive;
output  [1:0] RxBitsOut;
output  [1:0] RxBitsOut;
output  SIERxWEn;
output  SIERxWEn;
 
output noActivityTimeOut;
 
 
wire   [1:0] RxBitsIn;
wire   [1:0] RxBitsIn;
reg    RxDataInTick;
reg    RxDataInTick;
wire   SIERxRdyIn;
wire   SIERxRdyIn;
wire   clk;
wire   clk;
wire   fullSpeedRate;
wire   fullSpeedRate;
wire   rst;
wire   rst;
reg    [1:0] RxBitsOut;
reg    [1:0] RxBitsOut;
reg    SIERxWEn;
reg    SIERxWEn;
 
reg    noActivityTimeOut;
 
 
// local registers
// local registers
reg  [1:0]buffer0;
reg  [1:0]buffer0;
reg  [1:0]buffer1;
reg  [1:0]buffer1;
reg  [1:0]buffer2;
reg  [1:0]buffer2;
Line 85... Line 77...
reg decBufferCnt;
reg decBufferCnt;
reg  [4:0]i;
reg  [4:0]i;
reg incBufferCnt;
reg incBufferCnt;
reg  [1:0]oldRxBitsIn;
reg  [1:0]oldRxBitsIn;
reg [1:0] RxBitsInReg;
reg [1:0] RxBitsInReg;
 
reg [15:0] timeOutCnt;
 
reg RxWireActive;
 
 
// buffer output state machine state codes:
// buffer output state machine state codes:
`define WAIT_BUFFER_NOT_EMPTY 2'b00
`define WAIT_BUFFER_NOT_EMPTY 2'b00
`define WAIT_SIE_RX_READY 2'b01
`define WAIT_SIE_RX_READY 2'b01
`define SIE_RX_WRITE 2'b10
`define SIE_RX_WRITE 2'b10
Line 122... Line 116...
    buffer0 <= 2'b00;
    buffer0 <= 2'b00;
    buffer1 <= 2'b00;
    buffer1 <= 2'b00;
    buffer2 <= 2'b00;
    buffer2 <= 2'b00;
    buffer3 <= 2'b00;
    buffer3 <= 2'b00;
    RxDataInTick <= 1'b0;
    RxDataInTick <= 1'b0;
 
    RxWireActive <= 1'b0;
  end
  end
  else begin
  else begin
    RxBitsInReg <= RxBitsIn;      //sync to local clock to avoid metastability issues
    RxBitsInReg <= RxBitsIn;      //sync to local clock to avoid metastability issues
    incBufferCnt <= 1'b0;         //default value
    incBufferCnt <= 1'b0;         //default value
    oldRxBitsIn <= RxBitsInReg;
    oldRxBitsIn <= RxBitsInReg;
    if (oldRxBitsIn != RxBitsInReg)  //if edge detected then
    if (oldRxBitsIn != RxBitsInReg) begin  //if edge detected then
      i <= 5'b00000;              //reset the counter
      i <= 5'b00000;              //reset the counter
    else
      RxWireActive <= 1'b1;       // flag receive activity
 
    end
 
    else begin
      i <= i + 1'b1;
      i <= i + 1'b1;
 
      RxWireActive <= 1'b0;
 
    end
    if ( (fullSpeedRate == 1'b1 && i[1:0] == 2'b01) || (fullSpeedRate == 1'b0 && i == 5'b10000) )
    if ( (fullSpeedRate == 1'b1 && i[1:0] == 2'b01) || (fullSpeedRate == 1'b0 && i == 5'b10000) )
    begin
    begin
      RxDataInTick <= !RxDataInTick;
      RxDataInTick <= !RxDataInTick;
      if (disableWireRead != 1'b1)  //do not read wire data when transmitter is active
      if (TxWireActiveDrive != 1'b1)  //do not read wire data when transmitter is active
      begin
      begin
        incBufferCnt <= 1'b1;
        incBufferCnt <= 1'b1;
        bufferInIndex <= bufferInIndex + 1'b1;
        bufferInIndex <= bufferInIndex + 1'b1;
        case (bufferInIndex)
        case (bufferInIndex)
          2'b00 : buffer0 <= RxBitsInReg;
          2'b00 : buffer0 <= RxBitsInReg;
Line 194... Line 193...
      end
      end
    endcase
    endcase
  end
  end
end
end
 
 
 
//generate time out flag if no tx or rx activity
 
always @(posedge clk) begin
 
  if (rst) begin
 
    timeOutCnt <= 16'h0000;
 
    noActivityTimeOut <= 1'b0;
 
  end
 
  else begin
 
    if (TxWireActiveDrive == 1'b1 || RxWireActive == 1'b1)
 
      timeOutCnt <= 16'h0000;
 
    else
 
      timeOutCnt <= timeOutCnt + 1'b1;
 
    //if (timeOutCnt == `RX_PACKET_TOUT * `OVER_SAMPLE_RATE)
 
    if ( (fullSpeedRate == 1'b1 && timeOutCnt == `RX_PACKET_TOUT * `FS_OVER_SAMPLE_RATE)
 
          || (fullSpeedRate == 1'b0 && timeOutCnt == `RX_PACKET_TOUT * `LS_OVER_SAMPLE_RATE) )
 
    //if (timeOutCnt == 16'h200)  //temporary hack
 
      noActivityTimeOut <= 1'b1;
 
    else
 
      noActivityTimeOut <= 1'b0;
 
  end
 
end
 
 
 
 
 
 
 
 
endmodule
endmodule
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.