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

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [hostController/] [hostcontroller.v] - Diff between revs 18 and 22

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

Rev 18 Rev 22
Line 1... Line 1...
 
 
 
// File        : ../RTL/hostController/hostcontroller.v
 
// Generated   : 10/06/06 19:35:25
 
// From        : ../RTL/hostController/hostcontroller.asf
 
// By          : FSM2VHDL ver. 5.0.0.9
 
 
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////                                                              ////
////                                                              ////
//// hostController
//// hostController
////                                                              ////
////                                                              ////
//// This file is part of the usbhostslave opencores effort.
//// This file is part of the usbhostslave opencores effort.
Line 40... Line 45...
//// 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                     ////
////                                                              ////
////                                                              ////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
`timescale 1ns / 1ps
`include "timescale.v"
`include "usbHostControl_h.v"
`include "usbHostControl_h.v"
`include "usbConstants_h.v"
`include "usbConstants_h.v"
 
 
 
 
module hostcontroller (clearTXReq, clk, getPacketRdy, getPacketREn, isoEn, rst, RXStatus, sendPacketArbiterGnt, sendPacketArbiterReq, sendPacketPID, sendPacketRdy, sendPacketWEn, transDone, transReq, transType);
module hostcontroller (RXStatus, clearTXReq, clk, getPacketREn, getPacketRdy, isoEn, rst, sendPacketArbiterGnt, sendPacketArbiterReq, sendPacketPID, sendPacketRdy, sendPacketWEn, transDone, transReq, transType);
 
input   [7:0] RXStatus;
input   clk;
input   clk;
input   getPacketRdy;
input   getPacketRdy;
input   isoEn;
input   isoEn;
input   rst;
input   rst;
input   [7:0]RXStatus;
 
input   sendPacketArbiterGnt;
input   sendPacketArbiterGnt;
input   sendPacketRdy;
input   sendPacketRdy;
input   transReq;
input   transReq;
input   [1:0]transType;
input   [1:0]transType;
output  clearTXReq;
output  clearTXReq;
Line 62... Line 67...
output  sendPacketArbiterReq;
output  sendPacketArbiterReq;
output  [3:0]sendPacketPID;
output  [3:0]sendPacketPID;
output  sendPacketWEn;
output  sendPacketWEn;
output  transDone;
output  transDone;
 
 
 
wire    [7:0] RXStatus;
reg     clearTXReq, next_clearTXReq;
reg     clearTXReq, next_clearTXReq;
wire    clk;
wire    clk;
wire    getPacketRdy;
 
reg     getPacketREn, next_getPacketREn;
reg     getPacketREn, next_getPacketREn;
 
wire    getPacketRdy;
wire    isoEn;
wire    isoEn;
wire    rst;
wire    rst;
wire    [7:0]RXStatus;
 
wire    sendPacketArbiterGnt;
wire    sendPacketArbiterGnt;
reg     sendPacketArbiterReq, next_sendPacketArbiterReq;
reg     sendPacketArbiterReq, next_sendPacketArbiterReq;
reg     [3:0]sendPacketPID, next_sendPacketPID;
reg     [3:0]sendPacketPID, next_sendPacketPID;
wire    sendPacketRdy;
wire    sendPacketRdy;
reg     sendPacketWEn, next_sendPacketWEn;
reg     sendPacketWEn, next_sendPacketWEn;
Line 116... Line 121...
`define OUT1_CLR_WEN2 6'b011111
`define OUT1_CLR_WEN2 6'b011111
`define OUT0_CHK_ISO 6'b100000
`define OUT0_CHK_ISO 6'b100000
`define DEL1 6'b100001
`define DEL1 6'b100001
`define DEL2 6'b100010
`define DEL2 6'b100010
 
 
reg [5:0]CurrState_hstCntrl, NextState_hstCntrl;
reg [5:0] CurrState_hstCntrl;
 
reg [5:0] NextState_hstCntrl;
 
 
 
 
 
//--------------------------------------------------------------------
// Machine: hstCntrl
// Machine: hstCntrl
 
//--------------------------------------------------------------------
// NextState logic (combinatorial)
//----------------------------------
always @ (transReq or transType or getPacketRdy or isoEn or RXStatus or sendPacketArbiterGnt or sendPacketRdy or transDone or clearTXReq or getPacketREn or sendPacketArbiterReq or sendPacketPID or sendPacketWEn or CurrState_hstCntrl)
// Next State Logic (combinatorial)
begin
//----------------------------------
 
always @ (transReq or transType or sendPacketArbiterGnt or getPacketRdy or sendPacketRdy or isoEn or RXStatus or sendPacketArbiterReq or transDone or clearTXReq or sendPacketWEn or getPacketREn or sendPacketPID or CurrState_hstCntrl)
 
begin : hstCntrl_NextState
  NextState_hstCntrl <= CurrState_hstCntrl;
  NextState_hstCntrl <= CurrState_hstCntrl;
  // Set default values for outputs and signals
  // Set default values for outputs and signals
 
        next_sendPacketArbiterReq <= sendPacketArbiterReq;
  next_transDone <= transDone;
  next_transDone <= transDone;
  next_clearTXReq <= clearTXReq;
  next_clearTXReq <= clearTXReq;
 
        next_sendPacketWEn <= sendPacketWEn;
  next_getPacketREn <= getPacketREn;
  next_getPacketREn <= getPacketREn;
  next_sendPacketArbiterReq <= sendPacketArbiterReq;
 
  next_sendPacketPID <= sendPacketPID;
  next_sendPacketPID <= sendPacketPID;
  next_sendPacketWEn <= sendPacketWEn;
        case (CurrState_hstCntrl)
  case (CurrState_hstCntrl)  // synopsys parallel_case full_case
 
    `START_HC:
    `START_HC:
    begin
 
      NextState_hstCntrl <= `TX_REQ;
      NextState_hstCntrl <= `TX_REQ;
    end
 
    `TX_REQ:
    `TX_REQ:
    begin
 
      if (transReq == 1'b1)
      if (transReq == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `WAIT_GNT;
        NextState_hstCntrl <= `WAIT_GNT;
        next_sendPacketArbiterReq <= 1'b1;
        next_sendPacketArbiterReq <= 1'b1;
      end
      end
    end
 
    `CHK_TYPE:
    `CHK_TYPE:
    begin
                        if (transType == `IN_TRANS)
      if (transType == `OUTDATA0_TRANS)
 
      begin
 
        NextState_hstCntrl <= `OUT0_WAIT_SP_RDY1;
 
      end
 
      else if (transType == `IN_TRANS)
 
      begin
 
        NextState_hstCntrl <= `IN_WAIT_SP_RDY1;
        NextState_hstCntrl <= `IN_WAIT_SP_RDY1;
      end
                        else if (transType == `OUTDATA0_TRANS)
      else if (transType == `SETUP_TRANS)
                                NextState_hstCntrl <= `OUT0_WAIT_SP_RDY1;
      begin
 
        NextState_hstCntrl <= `SETUP_HC_WAIT_RDY;
 
      end
 
      else if (transType == `OUTDATA1_TRANS)
      else if (transType == `OUTDATA1_TRANS)
      begin
 
        NextState_hstCntrl <= `OUT1_WAIT_SP_RDY1;
        NextState_hstCntrl <= `OUT1_WAIT_SP_RDY1;
      end
                        else if (transType == `SETUP_TRANS)
    end
                                NextState_hstCntrl <= `SETUP_HC_WAIT_RDY;
    `FLAG:
    `FLAG:
    begin
    begin
      next_transDone <= 1'b1;
      next_transDone <= 1'b1;
      next_clearTXReq <= 1'b1;
      next_clearTXReq <= 1'b1;
      next_sendPacketArbiterReq <= 1'b0;
      next_sendPacketArbiterReq <= 1'b0;
Line 179... Line 174...
      next_transDone <= 1'b0;
      next_transDone <= 1'b0;
      //now wait for 'transReq' to clear
      //now wait for 'transReq' to clear
      NextState_hstCntrl <= `DEL1;
      NextState_hstCntrl <= `DEL1;
    end
    end
    `WAIT_GNT:
    `WAIT_GNT:
    begin
 
      if (sendPacketArbiterGnt == 1'b1)
      if (sendPacketArbiterGnt == 1'b1)
      begin
 
        NextState_hstCntrl <= `CHK_TYPE;
        NextState_hstCntrl <= `CHK_TYPE;
      end
 
    end
 
    `DEL1:
    `DEL1:
    begin
 
      NextState_hstCntrl <= `DEL2;
      NextState_hstCntrl <= `DEL2;
    end
 
    `DEL2:
    `DEL2:
    begin
 
      NextState_hstCntrl <= `TX_REQ;
      NextState_hstCntrl <= `TX_REQ;
    end
 
    `SETUP_CLR_SP_WEN1:
    `SETUP_CLR_SP_WEN1:
    begin
    begin
      next_sendPacketWEn <= 1'b0;
      next_sendPacketWEn <= 1'b0;
      NextState_hstCntrl <= `SETUP_WAIT_SETUP_SENT;
      NextState_hstCntrl <= `SETUP_WAIT_SETUP_SENT;
    end
    end
Line 207... Line 194...
    end
    end
    `SETUP_WAIT_PKT_RXED:
    `SETUP_WAIT_PKT_RXED:
    begin
    begin
      next_getPacketREn <= 1'b0;
      next_getPacketREn <= 1'b0;
      if (getPacketRdy == 1'b1)
      if (getPacketRdy == 1'b1)
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
      end
    end
 
    `SETUP_HC_WAIT_RDY:
    `SETUP_HC_WAIT_RDY:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `SETUP_CLR_SP_WEN1;
        NextState_hstCntrl <= `SETUP_CLR_SP_WEN1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `SETUP;
        next_sendPacketPID <= `SETUP;
      end
      end
    end
 
    `SETUP_WAIT_SETUP_SENT:
    `SETUP_WAIT_SETUP_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `SETUP_CLR_SP_WEN2;
        NextState_hstCntrl <= `SETUP_CLR_SP_WEN2;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `DATA0;
        next_sendPacketPID <= `DATA0;
      end
      end
    end
 
    `SETUP_WAIT_DATA_SENT:
    `SETUP_WAIT_DATA_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `SETUP_WAIT_PKT_RXED;
        NextState_hstCntrl <= `SETUP_WAIT_PKT_RXED;
        next_getPacketREn <= 1'b1;
        next_getPacketREn <= 1'b1;
      end
      end
    end
 
    `IN_WAIT_DATA_RXED:
    `IN_WAIT_DATA_RXED:
    begin
    begin
      next_getPacketREn <= 1'b0;
      next_getPacketREn <= 1'b0;
      if (getPacketRdy == 1'b1)
      if (getPacketRdy == 1'b1)
      begin
 
        NextState_hstCntrl <= `IN_CHK_FOR_ERROR;
        NextState_hstCntrl <= `IN_CHK_FOR_ERROR;
      end
      end
    end
 
    `IN_CHK_FOR_ERROR:
    `IN_CHK_FOR_ERROR:
    begin
 
      if (isoEn == 1'b1)
      if (isoEn == 1'b1)
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
 
      else if (RXStatus [`HC_CRC_ERROR_BIT] == 1'b0 &&
      else if (RXStatus [`HC_CRC_ERROR_BIT] == 1'b0 &&
        RXStatus [`HC_BIT_STUFF_ERROR_BIT] == 1'b0 &&
        RXStatus [`HC_BIT_STUFF_ERROR_BIT] == 1'b0 &&
        RXStatus [`HC_RX_OVERFLOW_BIT] == 1'b0 &&
        RXStatus [`HC_RX_OVERFLOW_BIT] == 1'b0 &&
        RXStatus [`HC_NAK_RXED_BIT] == 1'b0 &&
        RXStatus [`HC_NAK_RXED_BIT] == 1'b0 &&
        RXStatus [`HC_STALL_RXED_BIT] == 1'b0 &&
        RXStatus [`HC_STALL_RXED_BIT] == 1'b0 &&
        RXStatus [`HC_RX_TIME_OUT_BIT] == 1'b0)
        RXStatus [`HC_RX_TIME_OUT_BIT] == 1'b0)
      begin
 
        NextState_hstCntrl <= `IN_WAIT_SP_RDY2;
        NextState_hstCntrl <= `IN_WAIT_SP_RDY2;
      end
 
      else
      else
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
 
    end
 
    `IN_CLR_SP_WEN2:
    `IN_CLR_SP_WEN2:
    begin
    begin
      next_sendPacketWEn <= 1'b0;
      next_sendPacketWEn <= 1'b0;
      NextState_hstCntrl <= `IN_WAIT_ACK_SENT;
      NextState_hstCntrl <= `IN_WAIT_ACK_SENT;
    end
    end
    `IN_WAIT_IN_SENT:
    `IN_WAIT_IN_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `IN_WAIT_DATA_RXED;
        NextState_hstCntrl <= `IN_WAIT_DATA_RXED;
        next_getPacketREn <= 1'b1;
        next_getPacketREn <= 1'b1;
      end
      end
    end
 
    `IN_WAIT_SP_RDY1:
    `IN_WAIT_SP_RDY1:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `IN_CLR_SP_WEN1;
        NextState_hstCntrl <= `IN_CLR_SP_WEN1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `IN;
        next_sendPacketPID <= `IN;
      end
      end
    end
 
    `IN_WAIT_SP_RDY2:
    `IN_WAIT_SP_RDY2:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `IN_CLR_SP_WEN2;
        NextState_hstCntrl <= `IN_CLR_SP_WEN2;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `ACK;
        next_sendPacketPID <= `ACK;
      end
      end
    end
 
    `IN_CLR_SP_WEN1:
    `IN_CLR_SP_WEN1:
    begin
    begin
      next_sendPacketWEn <= 1'b0;
      next_sendPacketWEn <= 1'b0;
      NextState_hstCntrl <= `IN_WAIT_IN_SENT;
      NextState_hstCntrl <= `IN_WAIT_IN_SENT;
    end
    end
    `IN_WAIT_ACK_SENT:
    `IN_WAIT_ACK_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
 
    end
 
    `OUT0_WAIT_RX_DATA:
    `OUT0_WAIT_RX_DATA:
    begin
    begin
      next_getPacketREn <= 1'b0;
      next_getPacketREn <= 1'b0;
      if (getPacketRdy == 1'b1)
      if (getPacketRdy == 1'b1)
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
      end
    end
 
    `OUT0_WAIT_DATA0_SENT:
    `OUT0_WAIT_DATA0_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
 
        NextState_hstCntrl <= `OUT0_CHK_ISO;
        NextState_hstCntrl <= `OUT0_CHK_ISO;
      end
 
    end
 
    `OUT0_WAIT_OUT_SENT:
    `OUT0_WAIT_OUT_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `OUT0_CLR_WEN2;
        NextState_hstCntrl <= `OUT0_CLR_WEN2;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `DATA0;
        next_sendPacketPID <= `DATA0;
      end
      end
    end
 
    `OUT0_WAIT_SP_RDY1:
    `OUT0_WAIT_SP_RDY1:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `OUT0_CLR_WEN1;
        NextState_hstCntrl <= `OUT0_CLR_WEN1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `OUT;
        next_sendPacketPID <= `OUT;
      end
      end
    end
 
    `OUT0_CLR_WEN1:
    `OUT0_CLR_WEN1:
    begin
    begin
      next_sendPacketWEn <= 1'b0;
      next_sendPacketWEn <= 1'b0;
      NextState_hstCntrl <= `OUT0_WAIT_OUT_SENT;
      NextState_hstCntrl <= `OUT0_WAIT_OUT_SENT;
    end
    end
Line 352... Line 301...
    begin
    begin
      next_sendPacketWEn <= 1'b0;
      next_sendPacketWEn <= 1'b0;
      NextState_hstCntrl <= `OUT0_WAIT_DATA0_SENT;
      NextState_hstCntrl <= `OUT0_WAIT_DATA0_SENT;
    end
    end
    `OUT0_CHK_ISO:
    `OUT0_CHK_ISO:
    begin
 
      if (isoEn == 1'b0)
      if (isoEn == 1'b0)
      begin
      begin
        NextState_hstCntrl <= `OUT0_WAIT_RX_DATA;
        NextState_hstCntrl <= `OUT0_WAIT_RX_DATA;
        next_getPacketREn <= 1'b1;
        next_getPacketREn <= 1'b1;
      end
      end
      else
      else
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
 
    end
 
    `OUT1_WAIT_RX_DATA:
    `OUT1_WAIT_RX_DATA:
    begin
    begin
      next_getPacketREn <= 1'b0;
      next_getPacketREn <= 1'b0;
      if (getPacketRdy == 1'b1)
      if (getPacketRdy == 1'b1)
      begin
 
        NextState_hstCntrl <= `FLAG;
        NextState_hstCntrl <= `FLAG;
      end
      end
    end
 
    `OUT1_WAIT_OUT_SENT:
    `OUT1_WAIT_OUT_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `OUT1_CLR_WEN2;
        NextState_hstCntrl <= `OUT1_CLR_WEN2;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `DATA1;
        next_sendPacketPID <= `DATA1;
      end
      end
    end
 
    `OUT1_WAIT_DATA1_SENT:
    `OUT1_WAIT_DATA1_SENT:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `OUT1_WAIT_RX_DATA;
        NextState_hstCntrl <= `OUT1_WAIT_RX_DATA;
        next_getPacketREn <= 1'b1;
        next_getPacketREn <= 1'b1;
      end
      end
    end
 
    `OUT1_WAIT_SP_RDY1:
    `OUT1_WAIT_SP_RDY1:
    begin
 
      if (sendPacketRdy == 1'b1)
      if (sendPacketRdy == 1'b1)
      begin
      begin
        NextState_hstCntrl <= `OUT1_CLR_WEN1;
        NextState_hstCntrl <= `OUT1_CLR_WEN1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketWEn <= 1'b1;
        next_sendPacketPID <= `OUT;
        next_sendPacketPID <= `OUT;
      end
      end
    end
 
    `OUT1_CLR_WEN1:
    `OUT1_CLR_WEN1:
    begin
    begin
      next_sendPacketWEn <= 1'b0;
      next_sendPacketWEn <= 1'b0;
      NextState_hstCntrl <= `OUT1_WAIT_OUT_SENT;
      NextState_hstCntrl <= `OUT1_WAIT_OUT_SENT;
    end
    end
Line 410... Line 347...
      NextState_hstCntrl <= `OUT1_WAIT_DATA1_SENT;
      NextState_hstCntrl <= `OUT1_WAIT_DATA1_SENT;
    end
    end
  endcase
  endcase
end
end
 
 
 
//----------------------------------
// Current State Logic (sequential)
// Current State Logic (sequential)
 
//----------------------------------
always @ (posedge clk)
always @ (posedge clk)
begin
begin : hstCntrl_CurrentState
  if (rst)
  if (rst)
    CurrState_hstCntrl <= `START_HC;
    CurrState_hstCntrl <= `START_HC;
  else
  else
    CurrState_hstCntrl <= NextState_hstCntrl;
    CurrState_hstCntrl <= NextState_hstCntrl;
end
end
 
 
 
//----------------------------------
// Registered outputs logic
// Registered outputs logic
 
//----------------------------------
always @ (posedge clk)
always @ (posedge clk)
begin
begin : hstCntrl_RegOutput
  if (rst)
  if (rst)
  begin
  begin
    transDone <= 1'b0;
    transDone <= 1'b0;
    clearTXReq <= 1'b0;
    clearTXReq <= 1'b0;
    getPacketREn <= 1'b0;
    getPacketREn <= 1'b0;
    sendPacketArbiterReq <= 1'b0;
    sendPacketArbiterReq <= 1'b0;
    sendPacketPID <= 4'b0;
 
    sendPacketWEn <= 1'b0;
    sendPacketWEn <= 1'b0;
 
                sendPacketPID <= 4'b0;
  end
  end
  else
  else
  begin
  begin
    transDone <= next_transDone;
    transDone <= next_transDone;
    clearTXReq <= next_clearTXReq;
    clearTXReq <= next_clearTXReq;
    getPacketREn <= next_getPacketREn;
    getPacketREn <= next_getPacketREn;
    sendPacketArbiterReq <= next_sendPacketArbiterReq;
    sendPacketArbiterReq <= next_sendPacketArbiterReq;
    sendPacketPID <= next_sendPacketPID;
 
    sendPacketWEn <= next_sendPacketWEn;
    sendPacketWEn <= next_sendPacketWEn;
 
                sendPacketPID <= next_sendPacketPID;
  end
  end
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.