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

Subversion Repositories pci

[/] [pci/] [tags/] [rel_7/] [bench/] [verilog/] [pci_blue_options.vh] - Blame information for rev 154

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 15 mihad
//===========================================================================
2 106 mihad
// $Id: pci_blue_options.vh,v 1.3 2003-08-03 18:04:44 mihad Exp $
3 15 mihad
//
4
// Copyright 2001 Blue Beaver.  All Rights Reserved.
5
//
6
// Summary:  Constants which select various configuration options used
7
//           throughout the pci_blue_interface.  The user will have to
8
//           make several choices to select these options for each
9
//           particular use of this IP.
10
//
11
// This library is free software; you can distribute it and/or modify it
12
// under the terms of the GNU Lesser General Public License as published
13
// by the Free Software Foundation; either version 2.1 of the License, or
14
// (at your option) any later version.
15
//
16
// This library is distributed in the hope that it will be useful, but
17
// WITHOUT ANY WARRANTY; without even the implied warranty of
18
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19
// See the GNU Lesser General Public License for more details.
20
//
21
// You should have received a copy of the GNU Lesser General Public License
22
// along with this library.  If not, write to
23
// Free Software Foundation, Inc.
24
// 59 Temple Place, Suite 330
25
// Boston, MA 02111-1307 USA
26
//
27
// Author's note about this license:  The intention of the Author and of
28
// the Gnu Lesser General Public License is that users should be able to
29
// use this code for any purpose, including combining it with other source
30
// code, combining it with other logic, translated it into a gate-level
31
// representation, or projected it into gates in a programmable or
32
// hardwired chip, as long as the users of the resulting source, compiled
33
// source, or chip are given the means to get a copy of this source code
34
// with no new restrictions on redistribution of this source.
35
//
36
// If you make changes, even substantial changes, to this code, or use
37
// substantial parts of this code as an inseparable part of another work
38
// of authorship, the users of the resulting IP must be given the means
39
// to get a copy of the modified or combined source code, with no new
40
// restrictions on redistribution of the resulting source.
41
//
42
// Seperate parts of the combined source code, compiled code, or chip,
43
// which are NOT derived from this source code do NOT need to be offered
44
// to the final user of the chip merely because they are used in
45
// combination with this code.  Other code is not forced to fall under
46
// the GNU Lesser General Public License when it is linked to this code.
47
// The license terms of other source code linked to this code might require
48
// that it NOT be made available to users.  The GNU Lesser General Public
49
// License does not prevent this code from being used in such a situation,
50
// as long as the user of the resulting IP is given the means to get a
51
// copy of this component of the IP with no new restrictions on
52
// redistribution of this source.
53
//
54
// This code was developed using VeriLogger Pro, by Synapticad.
55
// Their support is greatly appreciated.
56
//
57
// NOTE:  This code has only been tested and might be functional with the
58
//          following set of options:
59
//
60
//===========================================================================
61
 
62
// Include to cause the Monitor Device to report activity.
63
//`define VERBOSE_MONITOR_DEVICE
64
 
65
// define this to get the PCI model to do normal consistency checking
66
// undefine this if simulation speed is more important than correctness.
67
`define NORMAL_PCI_CHECKS
68
 
69
// define this to get the monitor to create a PCI Bus Activity Transcript
70
`define MONITOR_CREATE_BUS_ACTIVITY_TRANSCRIPT
71
 
72
// define to cause the Test Device to report top-level activity.
73
`define REPORT_TEST_DEVICE
74
 
75
// define in addition to the above to cause the Test Device to
76
// report detailed activity.
77
//`define VERBOSE_TEST_DEVICE
78
 
79
// Indicate whether the PCI Bus will be 64-bit or 32-bit
80
// Comment this out if the bus size is 32 bits
81
// `define PCI_BUS_SIZE_64
82
 
83
// Indicate whether the PCI Blue Interface FIFOs are 64-bit or 32-bit
84
// Comment this out of the FIFO size is 32 bits
85
// `define PCI_FIFO_SIZE_64
86
 
87
// Indicate whether the intended application is 33 MHz or 66 MHz.
88
// If 33 MHz is desired, simply comment out the define line.
89
//`define PCI_CLK_66
90
 
91
// These are the delays that the PCI Pad Drivers in the Test verilog exhibit.
92
// They delays are from the PCI Local Bus Spec Revision 2.2 section 7.6.4.2
93
`ifdef PCI_CLK_66
94
`define PCI_CLK_PERIOD                         15.0
95
`define PAD_MIN_DATA_DLY                        2.0
96
`define PAD_MAX_DATA_DLY                        6.0
97
`define PAD_MIN_OE_DLY                          2.0
98
`define PAD_MAX_OE_DLY                         14.0
99
`define PAD_DATA_SETUP                          3.0
100
`define PAD_DATA_HOLD                           0.0
101
`define PROP_PLUS_SKEW                          6.0
102
`else  // PCI_CLK_66
103
`define PCI_CLK_PERIOD                         30.0
104
`define PAD_MIN_DATA_DLY                        2.0
105
`define PAD_MAX_DATA_DLY                       11.0
106
`define PAD_MIN_OE_DLY                          2.0
107
`define PAD_MAX_OE_DLY                         11.0
108
`define PAD_DATA_SETUP                          7.0
109
`define PAD_DATA_HOLD                           0.0
110
`define PROP_PLUS_SKEW                         12.0
111
`endif  // PCI_CLK_66
112
 
113
// Derive Bus Definitions based on declared interface sizes
114
// The FIFOs and the PCI Bus are the same width.
115
`ifdef PCI_BUS_SIZE_64
116
  parameter PCI_BUS_DATA_RANGE  = 63;
117
`define PCI_BUS_DATA_X            64'hXXXXXXXX_XXXXXXXX
118
`define PCI_BUS_DATA_Z            64'hZZZZZZZZ_ZZZZZZZZ
119
`define PCI_BUS_DATA_ZERO         64'h00000000_00000000
120
  parameter PCI_BUS_CBE_RANGE   =  7;
121
`define PCI_BUS_CBE_X              8'hXX
122
`define PCI_BUS_CBE_Z              8'hZZ
123
`define PCI_BUS_CBE_ZERO           8'h00
124
`define PCI_BUS_Address_Mask      64'hFFFFFFFF_FFFFFFF8
125
`define PCI_BUS_Address_Step      64'h00000000_00000008
126
`else  // PCI_BUS_SIZE_64
127
  parameter PCI_BUS_DATA_RANGE  = 31;
128
`define PCI_BUS_DATA_X            32'hXXXXXXXX
129
`define PCI_BUS_DATA_Z            32'hZZZZZZZZ
130
`define PCI_BUS_DATA_ZERO         32'h00000000
131
  parameter PCI_BUS_CBE_RANGE   =  3;
132
`define PCI_BUS_CBE_X              4'hX
133
`define PCI_BUS_CBE_Z              4'hZ
134
`define PCI_BUS_CBE_ZERO           4'h0
135
`define PCI_BUS_CBE_F              4'hF
136
`define PCI_BUS_Address_Mask      32'hFFFFFFFC
137
`define PCI_BUS_Address_Step      32'h00000004
138
`endif  // PCI_BUS_SIZE_64
139
 
140
// Define SIMULTANEOUS_MASTER_TARGET if a single interface needs
141
//   do master references to it's own target interface.
142
// Also define SIMULTANEOUS_MASTER_TARGET if there will be several
143
//   PCI interfaces sharing a single set of IO pads.
144
// See the PCI Local Bus Spec Revision 2.2 section 3.10 item 9.
145
// Do NOT need to be defined if there is only a single PCI
146
//   interface or a single multi-function PCI interface on-chip
147
//   which never talks from it's master to it's target.  This
148
//   paramater makes it harder to meet PCI timing, and makes it
149
//   impossible to use the nice Xilinx IO pads.
150
// NOTE: NOT DEBUGGED.  MAYBE SHOULD BE DONE ABOVE IO PADS
151
`define SIMULTANEOUS_MASTER_TARGET
152
 
153
// Define SUPPORT_MULTIPLE_ONCHIP_INTERFACES if several totally
154
//   independent PCI interfaces will exist on-chip which will take
155
//   turns using a single set of IO pads.  When this option is selected,
156
//   it is necessary to also define SIMULTANEOUS_MASTER_TARGET.  The
157
//   interface assumes that one master may want to talk to another target.
158
// `define SUPPORT_MULTIPLE_ONCHIP_INTERFACES
159
 
160
 
161
// The PCI Controller communicates with the Host Controller bu sending
162
//   and receiving data through 3 FIFOs.  These FIFOs are all the same depth,
163
//   set here.  Allowable depths are 3 entries, 5 entries, 7 entries, and
164
//   15 entries.  Only one define should be uncommented to choose the size.
165
// `define HOST_FIFO_DEPTH_3
166
 `define HOST_FIFO_DEPTH_5
167
// `define HOST_FIFO_DEPTH_7
168
// `define HOST_FIFO_DEPTH_15
169
 
170
// The user also gets to specify here whether the FIFOs are made out of
171
//   individual Flip-Flops, or whether they use a vendor-supplied Dual Port
172
//   SRAM primitive.
173
// If the FIFOs are 15 entries deep, the FIFOs MUST be made out of SRAMs.
174
`define HOST_FIFOS_ARE_MADE_FROM_FLOPS
175
 
176
// Events made in the PCI Interface are synchronized into the Host clock domain.
177
// Synchronizer Flops are prone to metastability, and these Flops are no exception.
178
// In order to cross between clock domains, signals must be latched and then have
179
//   enough time to settle to a safe value.
180
// This interface assumes that the Host Clock is significantly faster than the
181
//   PCI Clock.  It is possible that the Host Clock is SO FAST that it is
182
//   difficult to sychronize a PCI Signal and have it settle to a safe value
183
//   in 1 Host clock period.
184
// This interface tries to assure that the control information has plenty of
185
//   time to settle by having special constraints on the signals which cross
186
//   the clock barrier.  The target is to have the clock-to-data, plus the
187
//   delay through any following combinational logic, plus the setup to
188
//   the next flops, together add up to AT LEAST 2 nSec less than the Host
189
//   clock period.
190
// If the Synchronizers will need more than 1 clock to settle, then the
191
//   interface has to be compiled with DOUBLE_SYNC_PCI_HOST_SYNCHRONIZERS
192
//   defined to have the value 1'b1.
193
// If the Synchronizers have enough time to settle, define it to 1'b0
194
`define DOUBLE_SYNC_PCI_HOST_SYNCHRONIZERS     (1'b0)
195
 
196
// Defines to connect up specific AD lines to IDSEL inputs.  Note that
197
//   the only valid address lines are AD[31:25], because the lower
198
//   addresses down through AD11 are used to tell the target how to behave.
199
`define NO_DEVICE_IDSEL_ADDR                   (32'h00000000)
200
`define REAL_DEVICE_IDSEL_INDEX                24                               // NOT used,see SYSTEM.V file
201
`define REAL_DEVICE_CONFIG_ADDR                (32'h01000000)   // NOT used,see SYSTEM.V file
202
`define TEST_DEVICE_0_IDSEL_INDEX              25                               // NOT used,see SYSTEM.V file
203
`define TEST_DEVICE_0_CONFIG_ADDR              (32'h02000000)   // NOT used,see SYSTEM.V file
204
`define TEST_DEVICE_1_IDSEL_INDEX              26                               // NOT used,see SYSTEM.V file
205
`define TEST_DEVICE_1_CONFIG_ADDR              (32'h04000000)   // NOT used,see SYSTEM.V file
206
 
207
 
208
// Config Register Area consists of:
209
//    31  24 23  16 15   8  7   0
210
//   |  Device ID  |  Vendor ID  | 0x00
211
//   |   Status    |   Command   | 0x04
212
//   |       Class Code   | Rev  | 0x08
213
//   | BIST | HEAD | LTCY | CSize| 0x0C
214
//   |      Base Address 0       | 0x10
215
//   |      Base Address 1       | 0x14
216
//   |          Unused           | 0x18
217
//   |          Unused           | 0x1C
218
//   |          Unused           | 0x20
219
//   |          Unused           | 0x24
220
//   |      Cardbus Pointer      | 0x28
221
//   |  SubSys ID  |  SubVnd ID  | 0x2C
222
//   |   Expansion ROM Pointer   | 0x30
223
//   |    Reserved        | Cap  | 0x34
224
//   |          Reserved         | 0x38
225
//   | MLat | MGnt | IPin | ILine| 0x3C
226
//
227
 
228
// Device ID's are allocated by a particular Vendor.
229
// See the PCI Local Bus Spec Revision 2.2 section 6.2.1.
230
  parameter PCI_DEVICE_ID                         = 16'h1234;
231
// Vendor Types are allocated by the PCI SIG.
232
// See the PCI Local Bus Spec Revision 2.2 section 6.2.1.
233
  parameter PCI_VENDOR_ID                         = 16'h5678;
234
// Header Type says Normal, Single Function.
235
// See the PCI Local Bus Spec Revision 2.2 Appendix D.
236
  parameter PCI_CLASS_CODE                        = 24'hFF_00_00;
237
// Revision Numbers are allocated by a particular Vendor.
238
// See the PCI Local Bus Spec Revision 2.2 section 6.2.1.
239
  parameter PCI_REV_NUM                           = 8'h00;
240
// Header Type says Normal, Single Function.
241
// See the PCI Local Bus Spec Revision 2.2 section 6.2.1.
242
  parameter PCI_HEAD_TYPE                         = 8'h00;
243
// Minimum Grane and Maximum Latency need to be set based
244
// on the expected activity of the device.  The unit of
245
// time is 1/4th uSeconds.
246
// See the PCI Local Bus Spec Revision 2.2 section 6.2.4.
247
  parameter PCI_MIN_GRANT                         = 8'h01;
248
  parameter PCI_MAX_LATENCY                       = 8'h0C;
249
 
250
// The code to support multiple Base Address Registers is in pci_blue_target.v
251
// Match as few bits as needed.  This example maps 16 MBytes.
252
`define PCI_BASE_ADDR0_MATCH_RANGE             31:20
253
`define PCI_BASE_ADDR0_ALL_ZEROS               8'h00
254
// Match plus Fill plus Qual must together be 32 bits
255 45 mihad
`define PCI_BASE_ADDR0_FILL                    (16'h0000)
256 15 mihad
// Address Map Qualifier, described in the PCI specification,
257
// Revision 2.2, section 6.2.5.1.  The value 0x8 indicates
258
//   that the Base Address size is 32 bits, that it is a Memory
259
//   mapped Base Address Register, and that data is pre-fetchable
260
`define PCI_BASE_ADDR0_MAP_QUAL                (4'h8 )
261
 
262
// Undefine if a second Base Register is not needed
263
`define PCI_BASE_ADDR1_MATCH_ENABLE
264
 
265
`ifdef PCI_BASE_ADDR1_MATCH_ENABLE
266
// Match as few bits as needed.  This example maps 32 MBytes.
267
`define PCI_BASE_ADDR1_MATCH_RANGE             31:20
268
`define PCI_BASE_ADDR1_ALL_ZEROS               7'h00
269
// Match plus Fill plus Qual must together be 32 bits
270 45 mihad
`define PCI_BASE_ADDR1_FILL                    (16'h0000)
271 15 mihad
// Address Map Qualifier, described in the PCI specification,
272 106 mihad
// Revision 2.2, section 6.2.5.1.  The value 0x1 indicates
273
//   that the Base Address size is 32 bits, that it is a IO
274
//   mapped Base Address Register
275 45 mihad
`define PCI_BASE_ADDR1_MAP_QUAL                (4'h1)
276 15 mihad
`endif  // PCI_BASE_ADDR1_MATCH_ENABLE
277
 
278
// nothing checked after this point
279
 
280
// PCI_CONFIG_MASTER is defined if this PCI Code is going to be the root
281
//   of the PCI bus during the configuration process.
282
// The result of this define is that an internal wire will be used as the
283
//   IDSEL wire.  If this verilog is configured to not be the PCI Config
284
//   Master, an external IO Pin will be allocated to serve as the IDSEL pin.
285
// In both cases, several values in the Config Data block will need to be
286
//   initialized before the interface can be initialized for use in a PCI
287
//   environment.  The variables TODO help set up the Config Data.
288
// `define PCI_CONFIG_MASTER    1
289
 
290
// PCI_MASTER is defined if this code is going to serve as a PCI Master as
291
//   well as a PCI Slave.
292
// The result of this define is that a pair of signals used for Request and
293
//   Grant will be made available.  If the interface is designalted the PCI
294
//   Config Master, these two signals will be internal signals.  Otherwise
295
//   they will go to external IO pads.
296
// `define PCI_MASTER           1
297
 
298
// define?
299
 
300
// `define PCI_EXTERNAL_IDSEL      1  // define if IDSEL wire driven from offchip
301
`define PCI_EXTERNAL_MASTER     1  // define if off-chip PCI arbiter to be used
302
// `define PCI_EXTERNAL_INT        1
303
// `define PCI_EXTERNAL_CLOCK      1
304
// `define PCI_MASTER              1
305
 
306
// The Host_Command Fifo and the Host_Reply Fifo have entries which
307
//   contain addresses or data.  In addition, each entry contains a
308
//   tag which explains the meaning of the entry.
309
 
310
 

powered by: WebSVN 2.1.0

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