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

Subversion Repositories usbhostslave

[/] [usbhostslave/] [tags/] [rel_00_04_alpha/] [RTL/] [busInterface/] [wishBoneBI.v] - Blame information for rev 40

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 5 sfielding
// $Id: wishBoneBI.v,v 1.2 2004-12-18 14:36:08 sfielding Exp $
45 2 sfielding
//
46
// CVS Revision History
47
//
48
// $Log: not supported by cvs2svn $
49 5 sfielding
// Revision 1.1.1.1  2004/10/11 04:00:51  sfielding
50
// Created
51 2 sfielding
//
52 5 sfielding
//
53 2 sfielding
 
54
`include "wishBoneBus_h.v"
55
 
56
 
57
module wishBoneBI (
58
  address, dataIn, dataOut, writeEn,
59
  strobe_i,
60
  ack_o,
61
  clk, rst,
62 5 sfielding
  hostControlSel,
63 2 sfielding
  hostRxFifoSel, hostTxFifoSel,
64
  slaveControlSel,
65
  slaveEP0RxFifoSel, slaveEP1RxFifoSel, slaveEP2RxFifoSel, slaveEP3RxFifoSel,
66
  slaveEP0TxFifoSel, slaveEP1TxFifoSel, slaveEP2TxFifoSel, slaveEP3TxFifoSel,
67
  hostSlaveMuxSel,
68
  dataFromHostControl,
69
  dataFromHostRxFifo,
70
  dataFromHostTxFifo,
71
  dataFromSlaveControl,
72
  dataFromEP0RxFifo, dataFromEP1RxFifo, dataFromEP2RxFifo, dataFromEP3RxFifo,
73
  dataFromEP0TxFifo, dataFromEP1TxFifo, dataFromEP2TxFifo, dataFromEP3TxFifo,
74
  dataFromHostSlaveMux
75 5 sfielding
   );
76 2 sfielding
input clk;
77
input rst;
78
input [7:0] address;
79
input [7:0] dataIn;
80
output [7:0] dataOut;
81
input strobe_i;
82
output ack_o;
83
input writeEn;
84
output hostControlSel;
85
output hostRxFifoSel;
86
output hostTxFifoSel;
87
output slaveControlSel;
88
output slaveEP0RxFifoSel, slaveEP1RxFifoSel, slaveEP2RxFifoSel, slaveEP3RxFifoSel;
89
output slaveEP0TxFifoSel, slaveEP1TxFifoSel, slaveEP2TxFifoSel, slaveEP3TxFifoSel;
90
output hostSlaveMuxSel;
91
input [7:0] dataFromHostControl;
92
input [7:0] dataFromHostRxFifo;
93
input [7:0] dataFromHostTxFifo;
94
input [7:0] dataFromSlaveControl;
95
input [7:0] dataFromEP0RxFifo, dataFromEP1RxFifo, dataFromEP2RxFifo, dataFromEP3RxFifo;
96
input [7:0] dataFromEP0TxFifo, dataFromEP1TxFifo, dataFromEP2TxFifo, dataFromEP3TxFifo;
97
input [7:0] dataFromHostSlaveMux;
98
 
99
 
100
wire clk;
101
wire rst;
102
wire [7:0] address;
103
wire [7:0] dataIn;
104
reg [7:0] dataOut;
105
wire writeEn;
106
wire strobe_i;
107
reg ack_o;
108
reg hostControlSel;
109
reg hostRxFifoSel;
110
reg hostTxFifoSel;
111
reg slaveControlSel;
112
reg slaveEP0RxFifoSel, slaveEP1RxFifoSel, slaveEP2RxFifoSel, slaveEP3RxFifoSel;
113
reg slaveEP0TxFifoSel, slaveEP1TxFifoSel, slaveEP2TxFifoSel, slaveEP3TxFifoSel;
114
reg hostSlaveMuxSel;
115
wire [7:0] dataFromHostControl;
116
wire [7:0] dataFromHostRxFifo;
117
wire [7:0] dataFromHostTxFifo;
118
wire [7:0] dataFromSlaveControl;
119
wire [7:0] dataFromEP0RxFifo, dataFromEP1RxFifo, dataFromEP2RxFifo, dataFromEP3RxFifo;
120
wire [7:0] dataFromEP0TxFifo, dataFromEP1TxFifo, dataFromEP2TxFifo, dataFromEP3TxFifo;
121
wire [7:0] dataFromHostSlaveMux;
122
 
123
//internal wires and regs
124
reg ack_delayed;
125
reg ack_immediate;
126
 
127
//address decode and data mux
128
always @(address or
129
  dataFromHostControl or
130
  dataFromHostRxFifo or
131
  dataFromHostTxFifo or
132
  dataFromSlaveControl or
133
  dataFromEP0RxFifo or
134
  dataFromEP1RxFifo or
135
  dataFromEP2RxFifo or
136
  dataFromEP3RxFifo or
137
  dataFromHostSlaveMux or
138
  dataFromEP0TxFifo or
139
  dataFromEP1TxFifo or
140
  dataFromEP2TxFifo or
141
  dataFromEP3TxFifo)
142
begin
143
  hostControlSel <= 1'b0;
144
  hostRxFifoSel <= 1'b0;
145
  hostTxFifoSel <= 1'b0;
146
  slaveControlSel <= 1'b0;
147
  slaveEP0RxFifoSel <= 1'b0;
148
  slaveEP0TxFifoSel <= 1'b0;
149
  slaveEP1RxFifoSel <= 1'b0;
150
  slaveEP1TxFifoSel <= 1'b0;
151
  slaveEP2RxFifoSel <= 1'b0;
152
  slaveEP2TxFifoSel <= 1'b0;
153
  slaveEP3RxFifoSel <= 1'b0;
154
  slaveEP3TxFifoSel <= 1'b0;
155
  hostSlaveMuxSel <= 1'b0;
156
  case (address & `ADDRESS_DECODE_MASK)
157
    `HCREG_BASE : begin
158
      hostControlSel <= 1'b1;
159
      dataOut <= dataFromHostControl;
160
    end
161
    `HCREG_BASE_PLUS_0X10 : begin
162
      hostControlSel <= 1'b1;
163
      dataOut <= dataFromHostControl;
164
    end
165
    `HOST_RX_FIFO_BASE : begin
166
      hostRxFifoSel <= 1'b1;
167
      dataOut <= dataFromHostRxFifo;
168
    end
169
    `HOST_TX_FIFO_BASE : begin
170
      hostTxFifoSel <= 1'b1;
171
      dataOut <= dataFromHostTxFifo;
172
    end
173
    `SCREG_BASE : begin
174
      slaveControlSel <= 1'b1;
175
      dataOut <= dataFromSlaveControl;
176
    end
177
    `SCREG_BASE_PLUS_0X10 : begin
178
      slaveControlSel <= 1'b1;
179
      dataOut <= dataFromSlaveControl;
180
    end
181
    `EP0_RX_FIFO_BASE : begin
182
      slaveEP0RxFifoSel <= 1'b1;
183
      dataOut <= dataFromEP0RxFifo;
184
    end
185
    `EP0_TX_FIFO_BASE : begin
186
      slaveEP0TxFifoSel <= 1'b1;
187
      dataOut <= dataFromEP0TxFifo;
188
    end
189
    `EP1_RX_FIFO_BASE : begin
190
      slaveEP1RxFifoSel <= 1'b1;
191
      dataOut <= dataFromEP1RxFifo;
192
    end
193
    `EP1_TX_FIFO_BASE : begin
194
      slaveEP1TxFifoSel <= 1'b1;
195
      dataOut <= dataFromEP1TxFifo;
196
    end
197
    `EP2_RX_FIFO_BASE : begin
198
      slaveEP2RxFifoSel <= 1'b1;
199
      dataOut <= dataFromEP2RxFifo;
200
    end
201
    `EP2_TX_FIFO_BASE : begin
202
      slaveEP2TxFifoSel <= 1'b1;
203
      dataOut <= dataFromEP2TxFifo;
204
    end
205
    `EP3_RX_FIFO_BASE : begin
206
      slaveEP3RxFifoSel <= 1'b1;
207
      dataOut <= dataFromEP3RxFifo;
208
    end
209
    `EP3_TX_FIFO_BASE : begin
210
      slaveEP3TxFifoSel <= 1'b1;
211
      dataOut <= dataFromEP3TxFifo;
212
    end
213
    `HOST_SLAVE_CONTROL_BASE : begin
214
      hostSlaveMuxSel <= 1'b1;
215
      dataOut <= dataFromHostSlaveMux;
216
    end
217
    default:
218
      dataOut <= 8'h00;
219 5 sfielding
  endcase
220 2 sfielding
end
221
 
222
//delayed ack
223
always @(posedge clk) begin
224
  ack_delayed <= strobe_i;
225
end
226
 
227
//immediate ack
228
always @(strobe_i) begin
229
  ack_immediate <= strobe_i;
230
end
231
 
232
//select between immediate and delayed ack
233
always @(writeEn or address or ack_delayed or ack_immediate) begin
234
  if (writeEn == 1'b0 &&
235
      (address == `HOST_RX_FIFO_BASE + `FIFO_DATA_REG ||
236
       address == `HOST_TX_FIFO_BASE + `FIFO_DATA_REG ||
237
       address == `EP0_RX_FIFO_BASE + `FIFO_DATA_REG ||
238
       address == `EP0_TX_FIFO_BASE + `FIFO_DATA_REG ||
239
       address == `EP1_RX_FIFO_BASE + `FIFO_DATA_REG ||
240
       address == `EP1_TX_FIFO_BASE + `FIFO_DATA_REG ||
241
       address == `EP2_RX_FIFO_BASE + `FIFO_DATA_REG ||
242
       address == `EP2_TX_FIFO_BASE + `FIFO_DATA_REG ||
243
       address == `EP3_RX_FIFO_BASE + `FIFO_DATA_REG ||
244
       address == `EP3_TX_FIFO_BASE + `FIFO_DATA_REG) )
245
  begin
246
    ack_o <= ack_delayed;
247
  end
248
  else
249
  begin
250
    ack_o <= ack_immediate;
251
  end
252
end
253
 
254
endmodule

powered by: WebSVN 2.1.0

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