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

Subversion Repositories usbhostslave

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

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 20 sfielding
 
2 22 sfielding
// File        : ../RTL/hostController/hctxportarbiter.v
3
// Generated   : 10/06/06 19:35:28
4
// 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
        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
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
        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
        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.