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

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [hostController/] [hctxportarbiter.v] - Diff between revs 2 and 5

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

Rev 2 Rev 5
Line 1... Line 1...
//--------------------------------------------------------------------------------------------------
 
//
//////////////////////////////////////////////////////////////////////
// Title       : No Title
////                                                              ////
// Design      : usbhostslave
//// hctxPortArbiter
// Author      : Steve
////                                                              ////
// Company     : Base2Designs
//// This file is part of the usbhostslave opencores effort.
//
//// http://www.opencores.org/cores/usbhostslave/                 ////
//-------------------------------------------------------------------------------------------------
////                                                              ////
 
//// Module Description:                                          ////
 
//// 
 
////                                                              ////
 
//// To Do:                                                       ////
 
//// 
 
////                                                              ////
 
//// Author(s):                                                   ////
 
//// - Steve Fielding, sfielding@base2designs.com                 ////
 
////                                                              ////
 
//////////////////////////////////////////////////////////////////////
 
////                                                              ////
 
//// Copyright (C) 2004 Steve Fielding and OPENCORES.ORG          ////
 
////                                                              ////
 
//// This source file may be used and distributed without         ////
 
//// restriction provided that this copyright statement is not    ////
 
//// removed from the file and that any derivative work contains  ////
 
//// the original copyright notice and the associated disclaimer. ////
 
////                                                              ////
 
//// This source file is free software; you can redistribute it   ////
 
//// and/or modify it under the terms of the GNU Lesser General   ////
 
//// Public License as published by the Free Software Foundation; ////
 
//// either version 2.1 of the License, or (at your option) any   ////
 
//// later version.                                               ////
 
////                                                              ////
 
//// This source is distributed in the hope that it will be       ////
 
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
 
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
 
//// PURPOSE. See the GNU Lesser General Public License for more  ////
 
//// details.                                                     ////
 
////                                                              ////
 
//// You should have received a copy of the GNU Lesser General    ////
 
//// Public License along with this source; if not, download it   ////
 
//// from http://www.opencores.org/lgpl.shtml                     ////
 
////                                                              ////
 
//////////////////////////////////////////////////////////////////////
//
//
// File        : c:\projects\USBHostSlave\Aldec\usbhostslave\usbhostslave\compile\hctxportarbiter.v
// $Id: hctxportarbiter.v,v 1.2 2004-12-18 14:36:09 sfielding Exp $
// Generated   : 09/10/04 20:20:21
 
// From        : c:\projects\USBHostSlave\RTL\hostController\hctxportarbiter.asf
 
// By          : FSM2VHDL ver. 4.0.3.8
 
//
//
//-------------------------------------------------------------------------------------------------
// CVS Revision History
//
//
// Description : 
// $Log: not supported by cvs2svn $
//
//
//-------------------------------------------------------------------------------------------------
 
 
 
`timescale 1ns / 1ps
`timescale 1ns / 1ps
 
 
module HCTxPortArbiter (HCTxPortCntl, HCTxPortData, HCTxPortWEnable, SOFCntlCntl, SOFCntlData, SOFCntlGnt, SOFCntlReq, SOFCntlWEn, clk, directCntlCntl, directCntlData, directCntlGnt, directCntlReq, directCntlWEn, rst, sendPacketCntl, sendPacketData, sendPacketGnt, sendPacketReq, sendPacketWEn);
module HCTxPortArbiter (clk, directCntlCntl, directCntlData, directCntlGnt, directCntlReq, directCntlWEn, HCTxPortCntl, HCTxPortData, HCTxPortWEnable, rst, sendPacketCntl, sendPacketData, sendPacketGnt, sendPacketReq, sendPacketWEn, SOFCntlCntl, SOFCntlData, SOFCntlGnt, SOFCntlReq, SOFCntlWEn);
input   [7:0] SOFCntlCntl;
 
input   [7:0] SOFCntlData;
 
input   SOFCntlReq;
 
input   SOFCntlWEn;
 
input   clk;
input   clk;
input   [7:0] directCntlCntl;
input   [7:0] directCntlCntl;
input   [7:0] directCntlData;
input   [7:0] directCntlData;
input   directCntlReq;
input   directCntlReq;
input   directCntlWEn;
input   directCntlWEn;
input   rst;
input   rst;
input   [7:0] sendPacketCntl;
input   [7:0] sendPacketCntl;
input   [7:0] sendPacketData;
input   [7:0] sendPacketData;
input   sendPacketReq;
input   sendPacketReq;
input   sendPacketWEn;
input   sendPacketWEn;
 
input   [7:0]SOFCntlCntl;
 
input   [7:0]SOFCntlData;
 
input   SOFCntlReq;
 
input   SOFCntlWEn;
 
output  directCntlGnt;
output  [7:0] HCTxPortCntl;
output  [7:0] HCTxPortCntl;
output  [7:0] HCTxPortData;
output  [7:0] HCTxPortData;
output  HCTxPortWEnable;
output  HCTxPortWEnable;
output  SOFCntlGnt;
 
output  directCntlGnt;
 
output  sendPacketGnt;
output  sendPacketGnt;
 
output  SOFCntlGnt;
 
 
reg     [7:0] HCTxPortCntl, next_HCTxPortCntl;
 
reg     [7:0] HCTxPortData, next_HCTxPortData;
 
reg     HCTxPortWEnable, next_HCTxPortWEnable;
 
wire    [7:0] SOFCntlCntl;
 
wire    [7:0] SOFCntlData;
 
reg     SOFCntlGnt, next_SOFCntlGnt;
 
wire    SOFCntlReq;
 
wire    SOFCntlWEn;
 
wire    clk;
wire    clk;
wire    [7:0] directCntlCntl;
wire    [7:0] directCntlCntl;
wire    [7:0] directCntlData;
wire    [7:0] directCntlData;
reg     directCntlGnt, next_directCntlGnt;
reg     directCntlGnt, next_directCntlGnt;
wire    directCntlReq;
wire    directCntlReq;
wire    directCntlWEn;
wire    directCntlWEn;
 
reg     [7:0]HCTxPortCntl, next_HCTxPortCntl;
 
reg     [7:0]HCTxPortData, next_HCTxPortData;
 
reg     HCTxPortWEnable, next_HCTxPortWEnable;
wire    rst;
wire    rst;
wire    [7:0] sendPacketCntl;
wire    [7:0] sendPacketCntl;
wire    [7:0] sendPacketData;
wire    [7:0] sendPacketData;
reg     sendPacketGnt, next_sendPacketGnt;
reg     sendPacketGnt, next_sendPacketGnt;
wire    sendPacketReq;
wire    sendPacketReq;
wire    sendPacketWEn;
wire    sendPacketWEn;
 
wire    [7:0]SOFCntlCntl;
 
wire    [7:0]SOFCntlData;
 
reg     SOFCntlGnt, next_SOFCntlGnt;
 
wire    SOFCntlReq;
 
wire    SOFCntlWEn;
 
 
 
 
// Constants
// Constants
`define DIRECT_CTRL_MUX 2'b10
`define DIRECT_CTRL_MUX 2'b10
`define SEND_PACKET_MUX 2'b00
`define SEND_PACKET_MUX 2'b00
Line 77... Line 107...
`define WAIT_REQ 3'b001
`define WAIT_REQ 3'b001
`define SEND_SOF 3'b010
`define SEND_SOF 3'b010
`define SEND_PACKET 3'b011
`define SEND_PACKET 3'b011
`define DIRECT_CONTROL 3'b100
`define DIRECT_CONTROL 3'b100
 
 
reg [2:0] CurrState_HCTxArb;
reg [2:0]CurrState_HCTxArb, NextState_HCTxArb;
reg [2:0] NextState_HCTxArb;
 
 
 
// Diagram actions (continuous assignments allowed only: assign ...)
// Diagram actions (continuous assignments allowed only: assign ...)
// SOFController/directContol/sendPacket mux
// SOFController/directContol/sendPacket mux
always @(muxCntl or SOFCntlWEn or SOFCntlData or SOFCntlCntl or
always @(muxCntl or SOFCntlWEn or SOFCntlData or SOFCntlCntl or
                                 directCntlWEn or directCntlData or directCntlCntl or
                                 directCntlWEn or directCntlData or directCntlCntl or
Line 116... Line 145...
    end
    end
endcase
endcase
end
end
 
 
 
 
//--------------------------------------------------------------------
 
// Machine: HCTxArb
// Machine: HCTxArb
//--------------------------------------------------------------------
 
//----------------------------------
 
// NextState logic (combinatorial)
// NextState logic (combinatorial)
//----------------------------------
always @ (SOFCntlReq or sendPacketReq or directCntlReq or SOFCntlGnt or sendPacketGnt or directCntlGnt or muxCntl or CurrState_HCTxArb)
always @ (SOFCntlReq or sendPacketReq or directCntlReq or SOFCntlGnt or muxCntl or sendPacketGnt or directCntlGnt or CurrState_HCTxArb)
begin
begin : HCTxArb_NextState
  NextState_HCTxArb = CurrState_HCTxArb;
        NextState_HCTxArb <= CurrState_HCTxArb;
 
        // Set default values for outputs and signals
        // Set default values for outputs and signals
        next_SOFCntlGnt <= SOFCntlGnt;
        next_SOFCntlGnt <= SOFCntlGnt;
        next_muxCntl <= muxCntl;
 
        next_sendPacketGnt <= sendPacketGnt;
        next_sendPacketGnt <= sendPacketGnt;
        next_directCntlGnt <= directCntlGnt;
        next_directCntlGnt <= directCntlGnt;
 
  next_muxCntl <= muxCntl;
        case (CurrState_HCTxArb) // synopsys parallel_case full_case
        case (CurrState_HCTxArb) // synopsys parallel_case full_case
                `START_HARB:
                `START_HARB:
                        NextState_HCTxArb <= `WAIT_REQ;
    begin
 
      NextState_HCTxArb = `WAIT_REQ;
 
    end
                `WAIT_REQ:
                `WAIT_REQ:
 
    begin
                        if (SOFCntlReq == 1'b1)
                        if (SOFCntlReq == 1'b1)
                        begin
                        begin
                                NextState_HCTxArb <= `SEND_SOF;
        NextState_HCTxArb = `SEND_SOF;
                                next_SOFCntlGnt <= 1'b1;
                                next_SOFCntlGnt <= 1'b1;
                                next_muxCntl <= `SOF_CTRL_MUX;
                                next_muxCntl <= `SOF_CTRL_MUX;
                        end
                        end
                        else if (sendPacketReq == 1'b1)
                        else if (sendPacketReq == 1'b1)
                        begin
                        begin
                                NextState_HCTxArb <= `SEND_PACKET;
        NextState_HCTxArb = `SEND_PACKET;
                                next_sendPacketGnt <= 1'b1;
                                next_sendPacketGnt <= 1'b1;
                                next_muxCntl <= `SEND_PACKET_MUX;
                                next_muxCntl <= `SEND_PACKET_MUX;
                        end
                        end
                        else if (directCntlReq == 1'b1)
                        else if (directCntlReq == 1'b1)
                        begin
                        begin
                                NextState_HCTxArb <= `DIRECT_CONTROL;
        NextState_HCTxArb = `DIRECT_CONTROL;
                                next_directCntlGnt <= 1'b1;
                                next_directCntlGnt <= 1'b1;
                                next_muxCntl <= `DIRECT_CTRL_MUX;
                                next_muxCntl <= `DIRECT_CTRL_MUX;
                        end
                        end
 
    end
                `SEND_SOF:
                `SEND_SOF:
 
    begin
                        if (SOFCntlReq == 1'b0)
                        if (SOFCntlReq == 1'b0)
                        begin
                        begin
                                NextState_HCTxArb <= `WAIT_REQ;
        NextState_HCTxArb = `WAIT_REQ;
                                next_SOFCntlGnt <= 1'b0;
                                next_SOFCntlGnt <= 1'b0;
                        end
                        end
 
    end
                `SEND_PACKET:
                `SEND_PACKET:
 
    begin
                        if (sendPacketReq == 1'b0)
                        if (sendPacketReq == 1'b0)
                        begin
                        begin
                                NextState_HCTxArb <= `WAIT_REQ;
        NextState_HCTxArb = `WAIT_REQ;
                                next_sendPacketGnt <= 1'b0;
                                next_sendPacketGnt <= 1'b0;
                        end
                        end
 
    end
                `DIRECT_CONTROL:
                `DIRECT_CONTROL:
 
    begin
                        if (directCntlReq == 1'b0)
                        if (directCntlReq == 1'b0)
                        begin
                        begin
                                NextState_HCTxArb <= `WAIT_REQ;
        NextState_HCTxArb = `WAIT_REQ;
                                next_directCntlGnt <= 1'b0;
                                next_directCntlGnt <= 1'b0;
                        end
                        end
 
    end
        endcase
        endcase
end
end
 
 
//----------------------------------
 
// Current State Logic (sequential)
// Current State Logic (sequential)
//----------------------------------
 
always @ (posedge clk)
always @ (posedge clk)
begin : HCTxArb_CurrentState
begin
        if (rst)
        if (rst)
                CurrState_HCTxArb <= `START_HARB;
    CurrState_HCTxArb = `START_HARB;
        else
        else
                CurrState_HCTxArb <= NextState_HCTxArb;
    CurrState_HCTxArb = NextState_HCTxArb;
end
end
 
 
//----------------------------------
 
// Registered outputs logic
// Registered outputs logic
//----------------------------------
 
always @ (posedge clk)
always @ (posedge clk)
begin : HCTxArb_RegOutput
begin
        if (rst)
        if (rst)
        begin
        begin
                muxCntl <= 2'b00;
    SOFCntlGnt = 1'b0;
                SOFCntlGnt <= 1'b0;
    sendPacketGnt = 1'b0;
                sendPacketGnt <= 1'b0;
    directCntlGnt = 1'b0;
                directCntlGnt <= 1'b0;
    muxCntl = 2'b00;
        end
        end
        else
        else
        begin
        begin
                muxCntl <= next_muxCntl;
    SOFCntlGnt = next_SOFCntlGnt;
                SOFCntlGnt <= next_SOFCntlGnt;
    sendPacketGnt = next_sendPacketGnt;
                sendPacketGnt <= next_sendPacketGnt;
    directCntlGnt = next_directCntlGnt;
                directCntlGnt <= next_directCntlGnt;
    muxCntl = next_muxCntl;
        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.