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

Subversion Repositories usbhostslave

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

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

powered by: WebSVN 2.1.0

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