| 1 |
14 |
mjlyons |
TABLE OF CONTENTS
|
| 2 |
|
|
1) Peripheral Summary
|
| 3 |
|
|
2) Description of Generated Files
|
| 4 |
|
|
3) Description of Used IPIC Signals
|
| 5 |
|
|
4) Description of Top Level Generics
|
| 6 |
|
|
|
| 7 |
|
|
|
| 8 |
|
|
================================================================================
|
| 9 |
|
|
* 1) Peripheral Summary *
|
| 10 |
|
|
================================================================================
|
| 11 |
|
|
Peripheral Summary:
|
| 12 |
|
|
|
| 13 |
|
|
XPS project / EDK repository : C:\Users\mjlyons\workspace\vSPI\projnav\xps
|
| 14 |
|
|
logical library name : spiifc_v1_00_a
|
| 15 |
|
|
top name : spiifc
|
| 16 |
|
|
version : 1.00.a
|
| 17 |
|
|
type : PLB (v4.6) slave
|
| 18 |
|
|
features : slave attachment
|
| 19 |
|
|
interrupt control
|
| 20 |
|
|
user s/w registers
|
| 21 |
|
|
user memory spaces
|
| 22 |
|
|
|
| 23 |
|
|
Address Block for User Logic and IPIF Predefined Services
|
| 24 |
|
|
|
| 25 |
|
|
user logic slave space : C_BASEADDR + 0x00000000
|
| 26 |
|
|
: C_BASEADDR + 0x000000FF
|
| 27 |
|
|
interrupt control space : C_BASEADDR + 0x00000100
|
| 28 |
|
|
: C_BASEADDR + 0x000001FF
|
| 29 |
|
|
User logic memory space 0 : C_MEM0_BASEADDR
|
| 30 |
|
|
: C_MEM0_HIGHADDR
|
| 31 |
|
|
User logic memory space 1 : C_MEM1_BASEADDR
|
| 32 |
|
|
: C_MEM1_HIGHADDR
|
| 33 |
|
|
|
| 34 |
|
|
|
| 35 |
|
|
================================================================================
|
| 36 |
|
|
* 2) Description of Generated Files *
|
| 37 |
|
|
================================================================================
|
| 38 |
|
|
- HDL source file(s)
|
| 39 |
|
|
|
| 40 |
|
|
hdl/vhdl/spiifc.vhd
|
| 41 |
|
|
|
| 42 |
|
|
This is the template file for your peripheral's top design entity. It
|
| 43 |
|
|
configures and instantiates the corresponding design units in the way you
|
| 44 |
|
|
indicated in the wizard GUI and hooks it up to the stub user logic where
|
| 45 |
|
|
the actual functionalites should get implemented. You are not expected to
|
| 46 |
|
|
modify this template file except certain marked places for adding user
|
| 47 |
|
|
specific generics and ports.
|
| 48 |
|
|
|
| 49 |
|
|
verilog/user_logic.v
|
| 50 |
|
|
|
| 51 |
|
|
This is the template file for the stub user logic design entity, either in
|
| 52 |
|
|
VHDL or Verilog, where the actual functionalities should get implemented.
|
| 53 |
|
|
Some sample code snippet may be provided for demonstration purpose.
|
| 54 |
|
|
|
| 55 |
|
|
- XPS interface file(s)
|
| 56 |
|
|
|
| 57 |
|
|
data/spiifc_v2_1_0.mpd
|
| 58 |
|
|
|
| 59 |
|
|
This Microprocessor Peripheral Description file contains information of the
|
| 60 |
|
|
interface of your peripheral, so that other EDK tools can recognize your
|
| 61 |
|
|
peripheral.
|
| 62 |
|
|
|
| 63 |
|
|
data/spiifc_v2_1_0.pao
|
| 64 |
|
|
|
| 65 |
|
|
This Peripheral Analysis Order file defines the analysis order of all the HDL
|
| 66 |
|
|
source files that are used to compile your peripheral.
|
| 67 |
|
|
|
| 68 |
|
|
- ISE project file(s)
|
| 69 |
|
|
|
| 70 |
|
|
devl/projnav/spiifc.ise
|
| 71 |
|
|
|
| 72 |
|
|
This is the ProjNavigator project file. It sets up the needed logical
|
| 73 |
|
|
libraries and dependent library files for you to help you develop your
|
| 74 |
|
|
peripheral using ProjNavigator.
|
| 75 |
|
|
|
| 76 |
|
|
devl/projnav/spiifc.cli
|
| 77 |
|
|
|
| 78 |
|
|
This is the TCL command line file used to generate the .ise file.
|
| 79 |
|
|
|
| 80 |
|
|
- XST synthesis file(s)
|
| 81 |
|
|
|
| 82 |
|
|
devl/synthesis/spiifc_xst.scr
|
| 83 |
|
|
|
| 84 |
|
|
This is the XST synthesis script file to compile your peripheral.
|
| 85 |
|
|
Note: you may want to modify the device part option for your target.
|
| 86 |
|
|
|
| 87 |
|
|
devl/synthesis/spiifc_xst.prj
|
| 88 |
|
|
|
| 89 |
|
|
This is the XST synthesis project file used by the above script file to
|
| 90 |
|
|
compile your peripheral.
|
| 91 |
|
|
|
| 92 |
|
|
- Driver source file(s)
|
| 93 |
|
|
|
| 94 |
|
|
src/spiifc.h
|
| 95 |
|
|
|
| 96 |
|
|
This is the software driver header template file, which contains address offset of
|
| 97 |
|
|
software addressable registers in your peripheral, as well as some common masks and
|
| 98 |
|
|
simple register access macros or function declaration.
|
| 99 |
|
|
|
| 100 |
|
|
src/spiifc.c
|
| 101 |
|
|
|
| 102 |
|
|
This is the software driver source template file, to define all applicable driver
|
| 103 |
|
|
functions.
|
| 104 |
|
|
|
| 105 |
|
|
src/spiifc_selftest.c
|
| 106 |
|
|
|
| 107 |
|
|
This is the software driver self test example file, which contain self test example
|
| 108 |
|
|
code to test various hardware features of your peripheral.
|
| 109 |
|
|
|
| 110 |
|
|
src/Makefile
|
| 111 |
|
|
|
| 112 |
|
|
This is the software driver makefile to compile drivers.
|
| 113 |
|
|
|
| 114 |
|
|
- Driver interface file(s)
|
| 115 |
|
|
-user needs to add these to repositories path in SDK (Xilinx Tools-->Repositories)
|
| 116 |
|
|
|
| 117 |
|
|
data/spiifc_v2_1_0.mdd
|
| 118 |
|
|
|
| 119 |
|
|
This is the Microprocessor Driver Definition file.
|
| 120 |
|
|
|
| 121 |
|
|
data/spiifc_v2_1_0.tcl
|
| 122 |
|
|
|
| 123 |
|
|
This is the Microprocessor Driver Command file.
|
| 124 |
|
|
|
| 125 |
|
|
- Other misc file(s)
|
| 126 |
|
|
|
| 127 |
|
|
devl/ipwiz.opt
|
| 128 |
|
|
|
| 129 |
|
|
This is the option setting file for the wizard batch mode, which should
|
| 130 |
|
|
generate the same result as the wizard GUI mode.
|
| 131 |
|
|
|
| 132 |
|
|
devl/README.txt
|
| 133 |
|
|
|
| 134 |
|
|
This README file for your peripheral.
|
| 135 |
|
|
|
| 136 |
|
|
devl/ipwiz.log
|
| 137 |
|
|
|
| 138 |
|
|
This is the log file by operating on this wizard.
|
| 139 |
|
|
|
| 140 |
|
|
|
| 141 |
|
|
================================================================================
|
| 142 |
|
|
* 3) Description of Used IPIC Signals *
|
| 143 |
|
|
================================================================================
|
| 144 |
|
|
For more information (usage, timing diagrams, etc.) regarding the IPIC signals
|
| 145 |
|
|
used in the templates, please refer to the following specifications:
|
| 146 |
|
|
proc_common_v3_00_a
|
| 147 |
|
|
No documentation for this library
|
| 148 |
|
|
|
| 149 |
|
|
plbv46_slave_burst_v1_01_a
|
| 150 |
|
|
C:\Users\mjlyons\workspace\vSPI\projnav\xps\C:\Xilinx\13.2\ISE_DS\EDK\hw\XilinxProcessorIPLib\pcores\plbv46_slave_burst_v1_01_a\doc\plbv46_slave_burst.pdf
|
| 151 |
|
|
|
| 152 |
|
|
interrupt_control_v2_01_a
|
| 153 |
|
|
C:\Users\mjlyons\workspace\vSPI\projnav\xps\C:\Xilinx\13.2\ISE_DS\EDK\hw\XilinxProcessorIPLib\pcores\interrupt_control_v2_01_a\doc\interrupt_control.pdf
|
| 154 |
|
|
|
| 155 |
|
|
Bus2IP_Clk
|
| 156 |
|
|
Synchronization clock provided to the user logic. All IPIC signals are
|
| 157 |
|
|
synchronous to this clock. It is identical to the input _Clk signal of
|
| 158 |
|
|
the peripheral. No additional buffering is provided on the clock; it is
|
| 159 |
|
|
passed through as is.
|
| 160 |
|
|
|
| 161 |
|
|
Bus2IP_Reset
|
| 162 |
|
|
Active high reset used by the user logic. It is asserted whenever the
|
| 163 |
|
|
_Rst signal asserts or whenever there is a software-programmed reset
|
| 164 |
|
|
(if the soft reset block is included).
|
| 165 |
|
|
|
| 166 |
|
|
Bus2IP_Addr
|
| 167 |
|
|
Address bus to the user logic. It indicates the address of the requested
|
| 168 |
|
|
read or write operation. It can be used for additional address decoding or
|
| 169 |
|
|
as input to addressable memory devices.
|
| 170 |
|
|
|
| 171 |
|
|
Bus2IP_CS
|
| 172 |
|
|
Active high chip select bus. Assertion of a chip select indicates an active
|
| 173 |
|
|
transaction request to the chip select's target address space. This is
|
| 174 |
|
|
typically used for user logic memory space selection.
|
| 175 |
|
|
|
| 176 |
|
|
Bus2IP_RNW
|
| 177 |
|
|
Input signal to the user logic. It indicates the sense of a requested
|
| 178 |
|
|
operation with the user logic. High is a read and low is a write. It is
|
| 179 |
|
|
valid whenever at least one of the Bus2IP_CS bits is active.
|
| 180 |
|
|
|
| 181 |
|
|
Bus2IP_Data
|
| 182 |
|
|
Write data bus to the user logic. Write data is accepted by the user logic
|
| 183 |
|
|
during a write operation by assertion of the write acknowledgement signal
|
| 184 |
|
|
and the rising edge of the Bus2IP_Clk.
|
| 185 |
|
|
|
| 186 |
|
|
Bus2IP_BE
|
| 187 |
|
|
Byte Enable qualifiers for the requested read or write operation to the user
|
| 188 |
|
|
logic. A bit in the Bus2IP_BE set to '1' indicates that the associated byte
|
| 189 |
|
|
lane contains valid data. For example, if Bus2IP_BE = 0011, this indicates
|
| 190 |
|
|
that byte lanes 2 and 3 contain valid data.
|
| 191 |
|
|
|
| 192 |
|
|
Bus2IP_RdCE
|
| 193 |
|
|
Active high chip enable bus to the user logic. These chip enables are only
|
| 194 |
|
|
asserted during active read transaction requests with the target address
|
| 195 |
|
|
space and in conjunction with the corresponding sub-address within the
|
| 196 |
|
|
space. These are typically used for user logic readable registers selection.
|
| 197 |
|
|
|
| 198 |
|
|
Bus2IP_WrCE
|
| 199 |
|
|
Active high chip enable bus to the user logic. These chip enables are
|
| 200 |
|
|
asserted only during active write transaction requests with the target
|
| 201 |
|
|
address space and in conjunction with the corresponding sub-address within
|
| 202 |
|
|
the space. Typically used for user logic writable registers selection.
|
| 203 |
|
|
|
| 204 |
|
|
Bus2IP_Burst
|
| 205 |
|
|
Active high signal indicating that the active read or write operation with
|
| 206 |
|
|
the user logic is utilizing bursting protocol. This signal is asserted at
|
| 207 |
|
|
the initiation of a burst transaction with the user logic and de-asserted at
|
| 208 |
|
|
the completion of the second to last data beat of the burst data transfer.
|
| 209 |
|
|
|
| 210 |
|
|
Bus2IP_BurstLength
|
| 211 |
|
|
This value is an indication of the number of bytes being requested for
|
| 212 |
|
|
transfer and is valid when the cycle is of burst type Bus2IP_CS is active.
|
| 213 |
|
|
|
| 214 |
|
|
Bus2IP_RdReq
|
| 215 |
|
|
Active high signal indicating the initiation of a read operation with the
|
| 216 |
|
|
user logic. It is asserted for one Bus2IP_Clk during single data beat
|
| 217 |
|
|
transactions and remains high to completion on burst read operations.
|
| 218 |
|
|
|
| 219 |
|
|
Bus2IP_WrReq
|
| 220 |
|
|
Active high signal indicating the initiation of a write operation with the
|
| 221 |
|
|
user logic. It is asserted for one Bus2IP_Clk during single data beat
|
| 222 |
|
|
transactions and remains high to completion on burst write operations.
|
| 223 |
|
|
|
| 224 |
|
|
IP2Bus_AddrAck
|
| 225 |
|
|
Active high signal that advances the address counter and request state
|
| 226 |
|
|
during multiple data beat transfers, i.e. bursting.
|
| 227 |
|
|
|
| 228 |
|
|
IP2Bus_Data
|
| 229 |
|
|
Output read data bus from the user logic; data is qualified with the
|
| 230 |
|
|
assertion of IP2Bus_RdAck signal and the rising edge of the Bus2IP_Clk.
|
| 231 |
|
|
|
| 232 |
|
|
IP2Bus_RdAck
|
| 233 |
|
|
Active high read data qualifier providing the read acknowledgement from the
|
| 234 |
|
|
user logic. Read data on the IP2Bus_Data bus is deemed valid at the rising
|
| 235 |
|
|
edge of the Bus2IP_Clk and IP2Bus_RdAck asserted high by the user logic. For
|
| 236 |
|
|
immediate acknowledgement (such as for a register read), this signal can be
|
| 237 |
|
|
tied to '1'. Wait states can be inserted in the transaction by delaying the
|
| 238 |
|
|
assertion of the acknowledgement.
|
| 239 |
|
|
|
| 240 |
|
|
IP2Bus_WrAck
|
| 241 |
|
|
Active high write data qualifier providing the write acknowledgement from
|
| 242 |
|
|
the user logic. Write data on the Bus2IP_Data bus is deemed accepted by the
|
| 243 |
|
|
user logic at the rising edge of the Bus2IP_Clk and IP2Bus_WrAck asserted
|
| 244 |
|
|
high by the user logic. For immediate acknowledgement (such as for a
|
| 245 |
|
|
register write), this signal can be tied to '1'. Wait states can be inserted
|
| 246 |
|
|
in the transaction by delaying the assertion of the acknowledgement.
|
| 247 |
|
|
|
| 248 |
|
|
IP2Bus_Error
|
| 249 |
|
|
Active high signal indicating the user logic has encountered an error with
|
| 250 |
|
|
the requested operation. It is asserted in conjunction with the read/write
|
| 251 |
|
|
acknowledgement signal(s).
|
| 252 |
|
|
|
| 253 |
|
|
IP2Bus_IntrEvent
|
| 254 |
|
|
An output from the user logic to the IPIF that consists of interrupt event
|
| 255 |
|
|
signals to be detected and latched inside the IPIF.
|
| 256 |
|
|
|
| 257 |
|
|
================================================================================
|
| 258 |
|
|
* 4) Description of Top Level Generics *
|
| 259 |
|
|
================================================================================
|
| 260 |
|
|
C_BASEADDR/C_HIGHADDR
|
| 261 |
|
|
These two generics are used to define the memory mapped address space for
|
| 262 |
|
|
the peripheral registers, including Soft Reset register, Interrupt Source
|
| 263 |
|
|
Controller registers, Read/Write FIFO control/data registers, user logic
|
| 264 |
|
|
software accessible registers and etc., but excluding those user logic
|
| 265 |
|
|
memory spaces if ever existed. When instantiation, the address space
|
| 266 |
|
|
size determined by these two generics must be a power of 2 (e.g. 2^k =
|
| 267 |
|
|
C_HIGHADDR - C_BASEADDR + 1), a factor of C_BASEADDR and larger than the
|
| 268 |
|
|
minimum size as indicated in the template.
|
| 269 |
|
|
|
| 270 |
|
|
C_SPLB_AWIDTH
|
| 271 |
|
|
This is the slave interface address bus width for Processor Local Bus
|
| 272 |
|
|
version 4.6 (PLBv46). Value can be assigned automatically by EDK
|
| 273 |
|
|
tooling during system creation.
|
| 274 |
|
|
|
| 275 |
|
|
C_SPLB_DWIDTH
|
| 276 |
|
|
This is the slave interface data bus width for Processor Local Bus
|
| 277 |
|
|
version 4.6 (PLBv46). Value can be assigned automatically by EDK
|
| 278 |
|
|
tooling during system creation.
|
| 279 |
|
|
|
| 280 |
|
|
C_SPLB_NUM_MASTERS
|
| 281 |
|
|
This indicates to the slave interface the number of PLBv46 masters
|
| 282 |
|
|
present. Value can be assigned automatically by EDK tooling during
|
| 283 |
|
|
system creation.
|
| 284 |
|
|
|
| 285 |
|
|
C_SPLB_MID_WIDTH
|
| 286 |
|
|
This indicates to the slave interface the number of bits required
|
| 287 |
|
|
for the PLB_masterID input bus. It is an integer value equal to
|
| 288 |
|
|
log2(C_SPLB_NUM_MASTERS). Value will be assigned automatically by
|
| 289 |
|
|
EDK tooling during system creation.
|
| 290 |
|
|
|
| 291 |
|
|
C_SPLB_NATIVE_DWIDTH
|
| 292 |
|
|
This indicates to the slave interface the native bit width of the
|
| 293 |
|
|
internal data bus of the peripheral. Some peripheral will require
|
| 294 |
|
|
the value of this parameter to be fixed, while others might have
|
| 295 |
|
|
selectable native data widths.
|
| 296 |
|
|
|
| 297 |
|
|
C_SPLB_P2P
|
| 298 |
|
|
This indicates to the slave interface when it is exclusively attached
|
| 299 |
|
|
to a PLBv46 bus via a Point to Point interconnect scheme. In this
|
| 300 |
|
|
scenario, the slave interface may be able to reduce resource utilization
|
| 301 |
|
|
by eliminating address decode function and modifying interface behavior
|
| 302 |
|
|
to allow for a reduction in latency.
|
| 303 |
|
|
|
| 304 |
|
|
C_SPLB_SUPPORT_BURSTS
|
| 305 |
|
|
This indicates to the associated PLBv46 bus that this slave interface
|
| 306 |
|
|
support burst transfers to improve performance.
|
| 307 |
|
|
|
| 308 |
|
|
C_SPLB_SMALLEST_MASTER
|
| 309 |
|
|
This indicates the smallest native data width of any master on the
|
| 310 |
|
|
corresponding PLBv46 bus that may access the slave interface. It allows
|
| 311 |
|
|
optimizations within the slave interface logic if narrower masters don't
|
| 312 |
|
|
have to be supported for that application.
|
| 313 |
|
|
|
| 314 |
|
|
C_SPLB_CLK_PERIOD_PS
|
| 315 |
|
|
This is the period of the PLBv46 bus clock (in picoseconds) for the
|
| 316 |
|
|
corresponding PLBv46 slave interface attachment. It has been defined
|
| 317 |
|
|
for use by peripheral that needs to know the bus clock rate to improve
|
| 318 |
|
|
certain functions such as internal timers.
|
| 319 |
|
|
|
| 320 |
|
|
C_INCLUDE_DPHASE_TIMER
|
| 321 |
|
|
This indicates if the data phase timer is used or not. The value of
|
| 322 |
|
|
|
| 323 |
|
|
If C_INCLUDE_DPHASE_TIMER = 1 and after 128 SPLB_Clk cycles, as
|
| 324 |
|
|
measured from the assertion of Sl_AddrAck, the User IP does not
|
| 325 |
|
|
respond with either an IP2Bus_RdAck or IP2Bus_WrAck the
|
| 326 |
|
|
plbv46_slave_single will de-assert the User IP cycle request
|
| 327 |
|
|
signals, Bus2IP_CS and Bus2IP_RdCE or Bus2IP_WrCE, and will assert
|
| 328 |
|
|
Sl_rdDAck with Sl_rdDBus=zero for a read cycle or Sl_wrDAck for
|
| 329 |
|
|
a write cycle. This will gracefully terminate the cycle. Note
|
| 330 |
|
|
that the requesting master will have no knowledge that the data
|
| 331 |
|
|
phase of the PLB request was terminated in this manner.
|
| 332 |
|
|
|
| 333 |
|
|
C_FAMILY
|
| 334 |
|
|
This is to set the target FPGA architecture, s.t. virtex6, etc.
|
| 335 |
|
|
|
| 336 |
|
|
C_MEMn_BASEADDR/C_MEMn_HIGHADDR (n = 0, 1, 2, etc.)
|
| 337 |
|
|
These two generics are used to define the memory mapped address space for
|
| 338 |
|
|
user logic memory space n, which are typically used in peripherals like
|
| 339 |
|
|
memory controllers, bridges, that need to access memory blocks other
|
| 340 |
|
|
than local register space. When instantiation, the address space size
|
| 341 |
|
|
determined by these two generics should be a power of 2 (e.g. 2^k =
|
| 342 |
|
|
C_MEMn_HIGHADDR - C_MEMn_BASEADDR + 1) and a factor of C_MEMn_BASEADDR.
|
| 343 |
|
|
|
| 344 |
|
|
================================================================================
|
| 345 |
|
|
* 5) Location to documentation of dependent libraries *
|
| 346 |
|
|
* *
|
| 347 |
|
|
* In general, the documentation is located under: *
|
| 348 |
|
|
* $XILINX_EDK/hw/XilinxProcessorIPLib/pcores/$libName/doc *
|
| 349 |
|
|
* *
|
| 350 |
|
|
================================================================================
|
| 351 |
|
|
proc_common_v3_00_a
|
| 352 |
|
|
No documentation for this library
|
| 353 |
|
|
|
| 354 |
|
|
plbv46_slave_burst_v1_01_a
|
| 355 |
|
|
C:\Users\mjlyons\workspace\vSPI\projnav\xps\C:\Xilinx\13.2\ISE_DS\EDK\hw\XilinxProcessorIPLib\pcores\plbv46_slave_burst_v1_01_a\doc\plbv46_slave_burst.pdf
|
| 356 |
|
|
|
| 357 |
|
|
interrupt_control_v2_01_a
|
| 358 |
|
|
C:\Users\mjlyons\workspace\vSPI\projnav\xps\C:\Xilinx\13.2\ISE_DS\EDK\hw\XilinxProcessorIPLib\pcores\interrupt_control_v2_01_a\doc\interrupt_control.pdf
|
| 359 |
|
|
|