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

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [hostController/] [hctxportarbiter.v] - Blame information for rev 40

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 20 sfielding
 
2 22 sfielding
// File        : ../RTL/hostController/hctxportarbiter.v
3 37 sfielding
// Generated   : 11/10/06 05:37:22
4 22 sfielding
// From        : ../RTL/hostController/hctxportarbiter.asf
5
// By          : FSM2VHDL ver. 5.0.0.9
6
 
7 20 sfielding
//////////////////////////////////////////////////////////////////////
8
////                                                              ////
9
//// hctxPortArbiter
10
////                                                              ////
11
//// This file is part of the usbhostslave opencores effort.
12
//// http://www.opencores.org/cores/usbhostslave/                 ////
13
////                                                              ////
14
//// Module Description:                                          ////
15
//// 
16
////                                                              ////
17
//// To Do:                                                       ////
18
//// 
19
////                                                              ////
20
//// Author(s):                                                   ////
21
//// - Steve Fielding, sfielding@base2designs.com                 ////
22
////                                                              ////
23
//////////////////////////////////////////////////////////////////////
24
////                                                              ////
25
//// Copyright (C) 2004 Steve Fielding and OPENCORES.ORG          ////
26
////                                                              ////
27
//// This source file may be used and distributed without         ////
28
//// restriction provided that this copyright statement is not    ////
29
//// removed from the file and that any derivative work contains  ////
30
//// the original copyright notice and the associated disclaimer. ////
31
////                                                              ////
32
//// This source file is free software; you can redistribute it   ////
33
//// and/or modify it under the terms of the GNU Lesser General   ////
34
//// Public License as published by the Free Software Foundation; ////
35
//// either version 2.1 of the License, or (at your option) any   ////
36
//// later version.                                               ////
37
////                                                              ////
38
//// This source is distributed in the hope that it will be       ////
39
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
40
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
41
//// PURPOSE. See the GNU Lesser General Public License for more  ////
42
//// details.                                                     ////
43
////                                                              ////
44
//// You should have received a copy of the GNU Lesser General    ////
45
//// Public License along with this source; if not, download it   ////
46
//// from http://www.opencores.org/lgpl.shtml                     ////
47
////                                                              ////
48
//////////////////////////////////////////////////////////////////////
49
//
50 22 sfielding
`include "timescale.v"
51 20 sfielding
 
52 22 sfielding
module HCTxPortArbiter (HCTxPortCntl, HCTxPortData, HCTxPortWEnable, SOFCntlCntl, SOFCntlData, SOFCntlGnt, SOFCntlReq, SOFCntlWEn, clk, directCntlCntl, directCntlData, directCntlGnt, directCntlReq, directCntlWEn, rst, sendPacketCntl, sendPacketData, sendPacketGnt, sendPacketReq, sendPacketWEn);
53
input   [7:0] SOFCntlCntl;
54
input   [7:0] SOFCntlData;
55
input   SOFCntlReq;
56
input   SOFCntlWEn;
57 20 sfielding
input   clk;
58 22 sfielding
input   [7:0] directCntlCntl;
59
input   [7:0] directCntlData;
60 20 sfielding
input   directCntlReq;
61
input   directCntlWEn;
62
input   rst;
63 22 sfielding
input   [7:0] sendPacketCntl;
64
input   [7:0] sendPacketData;
65 20 sfielding
input   sendPacketReq;
66
input   sendPacketWEn;
67 22 sfielding
output  [7:0] HCTxPortCntl;
68
output  [7:0] HCTxPortData;
69
output  HCTxPortWEnable;
70
output  SOFCntlGnt;
71 20 sfielding
output  directCntlGnt;
72
output  sendPacketGnt;
73
 
74 22 sfielding
reg     [7:0] HCTxPortCntl, next_HCTxPortCntl;
75
reg     [7:0] HCTxPortData, next_HCTxPortData;
76
reg     HCTxPortWEnable, next_HCTxPortWEnable;
77
wire    [7:0] SOFCntlCntl;
78
wire    [7:0] SOFCntlData;
79
reg     SOFCntlGnt, next_SOFCntlGnt;
80
wire    SOFCntlReq;
81
wire    SOFCntlWEn;
82 20 sfielding
wire    clk;
83 22 sfielding
wire    [7:0] directCntlCntl;
84
wire    [7:0] directCntlData;
85 20 sfielding
reg     directCntlGnt, next_directCntlGnt;
86
wire    directCntlReq;
87
wire    directCntlWEn;
88
wire    rst;
89 22 sfielding
wire    [7:0] sendPacketCntl;
90
wire    [7:0] sendPacketData;
91 20 sfielding
reg     sendPacketGnt, next_sendPacketGnt;
92
wire    sendPacketReq;
93
wire    sendPacketWEn;
94
 
95
 
96
// Constants
97
`define DIRECT_CTRL_MUX 2'b10
98
`define SEND_PACKET_MUX 2'b00
99
`define SOF_CTRL_MUX 2'b01
100
// diagram signals declarations
101
reg  [1:0]muxCntl, next_muxCntl;
102
 
103
// BINARY ENCODED state machine: HCTxArb
104
// State codes definitions:
105
`define START_HARB 3'b000
106
`define WAIT_REQ 3'b001
107
`define SEND_SOF 3'b010
108
`define SEND_PACKET 3'b011
109
`define DIRECT_CONTROL 3'b100
110
 
111 22 sfielding
reg [2:0] CurrState_HCTxArb;
112
reg [2:0] NextState_HCTxArb;
113 20 sfielding
 
114
// Diagram actions (continuous assignments allowed only: assign ...)
115 22 sfielding
 
116 20 sfielding
// SOFController/directContol/sendPacket mux
117
always @(muxCntl or SOFCntlWEn or SOFCntlData or SOFCntlCntl or
118 22 sfielding
                                 directCntlWEn or directCntlData or directCntlCntl or
119
                  directCntlWEn or directCntlData or directCntlCntl or
120
                                 sendPacketWEn or sendPacketData or sendPacketCntl)
121 20 sfielding
begin
122
case (muxCntl)
123 22 sfielding
    `SOF_CTRL_MUX :
124 20 sfielding
    begin
125 22 sfielding
        HCTxPortWEnable <= SOFCntlWEn;
126
        HCTxPortData <= SOFCntlData;
127
        HCTxPortCntl <= SOFCntlCntl;
128 20 sfielding
    end
129 22 sfielding
    `DIRECT_CTRL_MUX :
130 20 sfielding
    begin
131 22 sfielding
        HCTxPortWEnable <= directCntlWEn;
132
        HCTxPortData <= directCntlData;
133
        HCTxPortCntl <= directCntlCntl;
134 20 sfielding
    end
135 22 sfielding
    `SEND_PACKET_MUX :
136 20 sfielding
    begin
137 22 sfielding
        HCTxPortWEnable <= sendPacketWEn;
138
        HCTxPortData <= sendPacketData;
139
        HCTxPortCntl <= sendPacketCntl;
140 20 sfielding
    end
141 22 sfielding
    default :
142 20 sfielding
    begin
143 22 sfielding
        HCTxPortWEnable <= 1'b0;
144
        HCTxPortData <= 8'h00;
145
        HCTxPortCntl <= 8'h00;
146 20 sfielding
    end
147 22 sfielding
endcase
148 20 sfielding
end
149
 
150 22 sfielding
//--------------------------------------------------------------------
151
// Machine: HCTxArb
152
//--------------------------------------------------------------------
153
//----------------------------------
154
// Next State Logic (combinatorial)
155
//----------------------------------
156
always @ (SOFCntlReq or sendPacketReq or directCntlReq or SOFCntlGnt or muxCntl or sendPacketGnt or directCntlGnt or CurrState_HCTxArb)
157
begin : HCTxArb_NextState
158 34 sfielding
  NextState_HCTxArb <= CurrState_HCTxArb;
159
  // Set default values for outputs and signals
160
  next_SOFCntlGnt <= SOFCntlGnt;
161
  next_muxCntl <= muxCntl;
162
  next_sendPacketGnt <= sendPacketGnt;
163
  next_directCntlGnt <= directCntlGnt;
164
  case (CurrState_HCTxArb)
165
    `START_HARB:
166
      NextState_HCTxArb <= `WAIT_REQ;
167
    `WAIT_REQ:
168
      if (SOFCntlReq == 1'b1)
169
      begin
170
        NextState_HCTxArb <= `SEND_SOF;
171
        next_SOFCntlGnt <= 1'b1;
172
        next_muxCntl <= `SOF_CTRL_MUX;
173
      end
174
      else if (sendPacketReq == 1'b1)
175
      begin
176
        NextState_HCTxArb <= `SEND_PACKET;
177
        next_sendPacketGnt <= 1'b1;
178
        next_muxCntl <= `SEND_PACKET_MUX;
179
      end
180
      else if (directCntlReq == 1'b1)
181
      begin
182
        NextState_HCTxArb <= `DIRECT_CONTROL;
183
        next_directCntlGnt <= 1'b1;
184
        next_muxCntl <= `DIRECT_CTRL_MUX;
185
      end
186
    `SEND_SOF:
187
      if (SOFCntlReq == 1'b0)
188
      begin
189
        NextState_HCTxArb <= `WAIT_REQ;
190
        next_SOFCntlGnt <= 1'b0;
191
      end
192
    `SEND_PACKET:
193
      if (sendPacketReq == 1'b0)
194
      begin
195
        NextState_HCTxArb <= `WAIT_REQ;
196
        next_sendPacketGnt <= 1'b0;
197
      end
198
    `DIRECT_CONTROL:
199
      if (directCntlReq == 1'b0)
200
      begin
201
        NextState_HCTxArb <= `WAIT_REQ;
202
        next_directCntlGnt <= 1'b0;
203
      end
204
  endcase
205 22 sfielding
end
206
 
207
//----------------------------------
208 20 sfielding
// Current State Logic (sequential)
209 22 sfielding
//----------------------------------
210 20 sfielding
always @ (posedge clk)
211 22 sfielding
begin : HCTxArb_CurrentState
212 34 sfielding
  if (rst)
213
    CurrState_HCTxArb <= `START_HARB;
214
  else
215
    CurrState_HCTxArb <= NextState_HCTxArb;
216 20 sfielding
end
217
 
218 22 sfielding
//----------------------------------
219 20 sfielding
// Registered outputs logic
220 22 sfielding
//----------------------------------
221 20 sfielding
always @ (posedge clk)
222 22 sfielding
begin : HCTxArb_RegOutput
223 34 sfielding
  if (rst)
224
  begin
225
    muxCntl <= 2'b00;
226
    SOFCntlGnt <= 1'b0;
227
    sendPacketGnt <= 1'b0;
228
    directCntlGnt <= 1'b0;
229
  end
230
  else
231
  begin
232
    muxCntl <= next_muxCntl;
233
    SOFCntlGnt <= next_SOFCntlGnt;
234
    sendPacketGnt <= next_sendPacketGnt;
235
    directCntlGnt <= next_directCntlGnt;
236
  end
237 20 sfielding
end
238
 
239 2 sfielding
endmodule

powered by: WebSVN 2.1.0

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