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

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [busInterface/] [wishBoneBI.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 sfielding
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
//// wishBoneBI.v                                                 ////
4
////                                                              ////
5
//// This file is part of the usbhostslave opencores effort.
6
//// <http://www.opencores.org/cores//>                           ////
7
////                                                              ////
8
//// Module Description:                                          ////
9
//// 
10
////                                                              ////
11
//// To Do:                                                       ////
12
//// 
13
////                                                              ////
14
//// Author(s):                                                   ////
15
//// - Steve Fielding, sfielding@base2designs.com                 ////
16
////                                                              ////
17
//////////////////////////////////////////////////////////////////////
18
////                                                              ////
19
//// Copyright (C) 2004 Steve Fielding and OPENCORES.ORG          ////
20
////                                                              ////
21
//// This source file may be used and distributed without         ////
22
//// restriction provided that this copyright statement is not    ////
23
//// removed from the file and that any derivative work contains  ////
24
//// the original copyright notice and the associated disclaimer. ////
25
////                                                              ////
26
//// This source file is free software; you can redistribute it   ////
27
//// and/or modify it under the terms of the GNU Lesser General   ////
28
//// Public License as published by the Free Software Foundation; ////
29
//// either version 2.1 of the License, or (at your option) any   ////
30
//// later version.                                               ////
31
////                                                              ////
32
//// This source is distributed in the hope that it will be       ////
33
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
34
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
35
//// PURPOSE. See the GNU Lesser General Public License for more  ////
36
//// details.                                                     ////
37
////                                                              ////
38
//// You should have received a copy of the GNU Lesser General    ////
39
//// Public License along with this source; if not, download it   ////
40
//// from <http://www.opencores.org/lgpl.shtml>                   ////
41
////                                                              ////
42
//////////////////////////////////////////////////////////////////////
43
//
44
// $Id: wishBoneBI.v,v 1.1.1.1 2004-10-11 04:00:51 sfielding Exp $
45
//
46
// CVS Revision History
47
//
48
// $Log: not supported by cvs2svn $
49
//
50
 
51
`include "wishBoneBus_h.v"
52
 
53
 
54
module wishBoneBI (
55
  address, dataIn, dataOut, writeEn,
56
  strobe_i,
57
  ack_o,
58
  clk, rst,
59
        hostControlSel,
60
  hostRxFifoSel, hostTxFifoSel,
61
  slaveControlSel,
62
  slaveEP0RxFifoSel, slaveEP1RxFifoSel, slaveEP2RxFifoSel, slaveEP3RxFifoSel,
63
  slaveEP0TxFifoSel, slaveEP1TxFifoSel, slaveEP2TxFifoSel, slaveEP3TxFifoSel,
64
  hostSlaveMuxSel,
65
  dataFromHostControl,
66
  dataFromHostRxFifo,
67
  dataFromHostTxFifo,
68
  dataFromSlaveControl,
69
  dataFromEP0RxFifo, dataFromEP1RxFifo, dataFromEP2RxFifo, dataFromEP3RxFifo,
70
  dataFromEP0TxFifo, dataFromEP1TxFifo, dataFromEP2TxFifo, dataFromEP3TxFifo,
71
  dataFromHostSlaveMux
72
         );
73
input clk;
74
input rst;
75
input [7:0] address;
76
input [7:0] dataIn;
77
output [7:0] dataOut;
78
input strobe_i;
79
output ack_o;
80
input writeEn;
81
output hostControlSel;
82
output hostRxFifoSel;
83
output hostTxFifoSel;
84
output slaveControlSel;
85
output slaveEP0RxFifoSel, slaveEP1RxFifoSel, slaveEP2RxFifoSel, slaveEP3RxFifoSel;
86
output slaveEP0TxFifoSel, slaveEP1TxFifoSel, slaveEP2TxFifoSel, slaveEP3TxFifoSel;
87
output hostSlaveMuxSel;
88
input [7:0] dataFromHostControl;
89
input [7:0] dataFromHostRxFifo;
90
input [7:0] dataFromHostTxFifo;
91
input [7:0] dataFromSlaveControl;
92
input [7:0] dataFromEP0RxFifo, dataFromEP1RxFifo, dataFromEP2RxFifo, dataFromEP3RxFifo;
93
input [7:0] dataFromEP0TxFifo, dataFromEP1TxFifo, dataFromEP2TxFifo, dataFromEP3TxFifo;
94
input [7:0] dataFromHostSlaveMux;
95
 
96
 
97
wire clk;
98
wire rst;
99
wire [7:0] address;
100
wire [7:0] dataIn;
101
reg [7:0] dataOut;
102
wire writeEn;
103
wire strobe_i;
104
reg ack_o;
105
reg hostControlSel;
106
reg hostRxFifoSel;
107
reg hostTxFifoSel;
108
reg slaveControlSel;
109
reg slaveEP0RxFifoSel, slaveEP1RxFifoSel, slaveEP2RxFifoSel, slaveEP3RxFifoSel;
110
reg slaveEP0TxFifoSel, slaveEP1TxFifoSel, slaveEP2TxFifoSel, slaveEP3TxFifoSel;
111
reg hostSlaveMuxSel;
112
wire [7:0] dataFromHostControl;
113
wire [7:0] dataFromHostRxFifo;
114
wire [7:0] dataFromHostTxFifo;
115
wire [7:0] dataFromSlaveControl;
116
wire [7:0] dataFromEP0RxFifo, dataFromEP1RxFifo, dataFromEP2RxFifo, dataFromEP3RxFifo;
117
wire [7:0] dataFromEP0TxFifo, dataFromEP1TxFifo, dataFromEP2TxFifo, dataFromEP3TxFifo;
118
wire [7:0] dataFromHostSlaveMux;
119
 
120
//internal wires and regs
121
reg ack_delayed;
122
reg ack_immediate;
123
 
124
//address decode and data mux
125
always @(address or
126
  dataFromHostControl or
127
  dataFromHostRxFifo or
128
  dataFromHostTxFifo or
129
  dataFromSlaveControl or
130
  dataFromEP0RxFifo or
131
  dataFromEP1RxFifo or
132
  dataFromEP2RxFifo or
133
  dataFromEP3RxFifo or
134
  dataFromHostSlaveMux or
135
  dataFromEP0TxFifo or
136
  dataFromEP1TxFifo or
137
  dataFromEP2TxFifo or
138
  dataFromEP3TxFifo)
139
begin
140
  hostControlSel <= 1'b0;
141
  hostRxFifoSel <= 1'b0;
142
  hostTxFifoSel <= 1'b0;
143
  slaveControlSel <= 1'b0;
144
  slaveEP0RxFifoSel <= 1'b0;
145
  slaveEP0TxFifoSel <= 1'b0;
146
  slaveEP1RxFifoSel <= 1'b0;
147
  slaveEP1TxFifoSel <= 1'b0;
148
  slaveEP2RxFifoSel <= 1'b0;
149
  slaveEP2TxFifoSel <= 1'b0;
150
  slaveEP3RxFifoSel <= 1'b0;
151
  slaveEP3TxFifoSel <= 1'b0;
152
  hostSlaveMuxSel <= 1'b0;
153
  case (address & `ADDRESS_DECODE_MASK)
154
    `HCREG_BASE : begin
155
      hostControlSel <= 1'b1;
156
      dataOut <= dataFromHostControl;
157
    end
158
    `HCREG_BASE_PLUS_0X10 : begin
159
      hostControlSel <= 1'b1;
160
      dataOut <= dataFromHostControl;
161
    end
162
    `HOST_RX_FIFO_BASE : begin
163
      hostRxFifoSel <= 1'b1;
164
      dataOut <= dataFromHostRxFifo;
165
    end
166
    `HOST_TX_FIFO_BASE : begin
167
      hostTxFifoSel <= 1'b1;
168
      dataOut <= dataFromHostTxFifo;
169
    end
170
    `SCREG_BASE : begin
171
      slaveControlSel <= 1'b1;
172
      dataOut <= dataFromSlaveControl;
173
    end
174
    `SCREG_BASE_PLUS_0X10 : begin
175
      slaveControlSel <= 1'b1;
176
      dataOut <= dataFromSlaveControl;
177
    end
178
    `EP0_RX_FIFO_BASE : begin
179
      slaveEP0RxFifoSel <= 1'b1;
180
      dataOut <= dataFromEP0RxFifo;
181
    end
182
    `EP0_TX_FIFO_BASE : begin
183
      slaveEP0TxFifoSel <= 1'b1;
184
      dataOut <= dataFromEP0TxFifo;
185
    end
186
    `EP1_RX_FIFO_BASE : begin
187
      slaveEP1RxFifoSel <= 1'b1;
188
      dataOut <= dataFromEP1RxFifo;
189
    end
190
    `EP1_TX_FIFO_BASE : begin
191
      slaveEP1TxFifoSel <= 1'b1;
192
      dataOut <= dataFromEP1TxFifo;
193
    end
194
    `EP2_RX_FIFO_BASE : begin
195
      slaveEP2RxFifoSel <= 1'b1;
196
      dataOut <= dataFromEP2RxFifo;
197
    end
198
    `EP2_TX_FIFO_BASE : begin
199
      slaveEP2TxFifoSel <= 1'b1;
200
      dataOut <= dataFromEP2TxFifo;
201
    end
202
    `EP3_RX_FIFO_BASE : begin
203
      slaveEP3RxFifoSel <= 1'b1;
204
      dataOut <= dataFromEP3RxFifo;
205
    end
206
    `EP3_TX_FIFO_BASE : begin
207
      slaveEP3TxFifoSel <= 1'b1;
208
      dataOut <= dataFromEP3TxFifo;
209
    end
210
    `HOST_SLAVE_CONTROL_BASE : begin
211
      hostSlaveMuxSel <= 1'b1;
212
      dataOut <= dataFromHostSlaveMux;
213
    end
214
    default:
215
      dataOut <= 8'h00;
216
        endcase
217
end
218
 
219
//delayed ack
220
always @(posedge clk) begin
221
  ack_delayed <= strobe_i;
222
end
223
 
224
//immediate ack
225
always @(strobe_i) begin
226
  ack_immediate <= strobe_i;
227
end
228
 
229
//select between immediate and delayed ack
230
always @(writeEn or address or ack_delayed or ack_immediate) begin
231
  if (writeEn == 1'b0 &&
232
      (address == `HOST_RX_FIFO_BASE + `FIFO_DATA_REG ||
233
       address == `HOST_TX_FIFO_BASE + `FIFO_DATA_REG ||
234
       address == `EP0_RX_FIFO_BASE + `FIFO_DATA_REG ||
235
       address == `EP0_TX_FIFO_BASE + `FIFO_DATA_REG ||
236
       address == `EP1_RX_FIFO_BASE + `FIFO_DATA_REG ||
237
       address == `EP1_TX_FIFO_BASE + `FIFO_DATA_REG ||
238
       address == `EP2_RX_FIFO_BASE + `FIFO_DATA_REG ||
239
       address == `EP2_TX_FIFO_BASE + `FIFO_DATA_REG ||
240
       address == `EP3_RX_FIFO_BASE + `FIFO_DATA_REG ||
241
       address == `EP3_TX_FIFO_BASE + `FIFO_DATA_REG) )
242
  begin
243
    ack_o <= ack_delayed;
244
  end
245
  else
246
  begin
247
    ack_o <= ack_immediate;
248
  end
249
end
250
 
251
endmodule

powered by: WebSVN 2.1.0

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