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

Subversion Repositories spi_boot

[/] [spi_boot/] [trunk/] [README] - Blame information for rev 77

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 10 arniml
 
2
README for the spi_boot core
3
============================
4 77 arniml
Version: $Id: README 77 2009-04-01 19:53:14Z arniml $
5 10 arniml
 
6
 
7
Description
8
-----------
9
 
10 11 arniml
The SD/MMC Bootloader is a CPLD design that manages configuration and
11
bootstrapping of FPGAs. It is able to retrieve the required data from
12
SecureDigital (SD) cards or MultiMediaCards (MMC) and manages the FPGA
13
configuration process. SD cards as well as MMCs are operated in SPI mode which
14
is part of both standards thus eliminating the need for dedicated
15
implementations. The SD/MMC Bootloader fits both. Beyond configuration, this
16 18 arniml
core supports a bootstrapping strategy where multiple images are stored on one
17 11 arniml
single memory card.
18
For example consider a system completely based on SRAM. The bootloader
19 39 arniml
provides the initial configuration data from the first image to the FPGA. This
20 18 arniml
image contains a design which pulls the next image from the memory card and
21
transfers this data to SRAM. In the third step the final FPGA design is loaded
22
from the third image.
23 39 arniml
These images are clustered in sets which can be selected by external switches
24
for example. Several configuration sets can be stored on one memory card
25
allowing you to provide a number of applications which are downloaded quickly
26
to the FPGA.
27
The schematic (rev. B) shows how the core can be used with an FPGA board. I
28 22 arniml
use it to configure/boot the Xilinx Spartan IIe on BurchED's B5-X300
29
board. SV2 fits the "SERIAL MODE" connector on this board but you will have to
30
add a separate wire from R6 to attach INIT. Please check the proper use of the
31
pull-up resistors for your specific board.
32 10 arniml
 
33 23 arniml
 
34 11 arniml
Features
35
--------
36 10 arniml
 
37 26 arniml
* Configuration mode: configures SRAM based FPGAs via slave serial mode
38 11 arniml
  (Xilinx and Altera)
39
* Data mode: provides stored data over a simple synchronous serial interface
40 18 arniml
* Broad compatability using SPI mode
41 11 arniml
    + SecureDigital cards using dedicated initialization command
42 18 arniml
    + MultiMediaCards (see below)
43 11 arniml
* Operation triggerd by power-up or card insertion
44 39 arniml
* Multiple configuration sets stored on on single memory card
45 11 arniml
 
46
 
47 18 arniml
Compatability
48
-------------
49
 
50
These cards have been tested with the SD/MMC Bootloader:
51
 
52 24 arniml
  * Hama 64 MB SD
53 18 arniml
  * SanDisk 128 MB SD
54
  * SanDisk 64 MB MMC
55
  * Panasonic 32 MB SD
56
 
57
Some MMC might fail with this core as not all cards support CMD18
58
(READ_MULTIPLE_BLOCK). Please consult the data sheet of your specific
59
model. In case your MMC does not implement CMD18 you might want to have a look
60
at the FPGA MMC-Card Config project.
61
 
62
 
63 25 arniml
Tools
64
-----
65
 
66
Downloading the configuration data to the card is a straight forward
67
process. The images have to be written starting at dedicated locations. For
68
the provided toplevel designs, these locations are multiples of 256 K. I.e. 0,
69
0x40000, 0x80000 and so forth.
70
 
71
dd (part of the GNU coreutils) serves this purpose:
72
$ dd if=ram_loader.bin of=/dev/sdX bs=512
73
$ dd if=pongrom_6.bin of=/dev/sdX bs=512 seek=512
74
$ dd if=pacman.bin of=/dev/sdX bs=512 seek=1024
75
 
76
The name of the device node depends on how the card reader is attached to the
77 26 arniml
kernel. For Linux systems this is most often something like /dev/sdX with X
78 25 arniml
ranging from a-z. Please note that it is essential to use the device without
79
any trailing numbers as they refer to partitions leading to wrong offsets for
80
data written to the card.
81
All this works perfectly for my Spartan IIe device as this FPGA expects the
82
configuration data as it is delivered from the card: Consecutive bytes each
83
with its most significant bit first. Altera devices like the FLEX family are
84
different here. They expect the bytes with least significant bit
85
first. Therefore, the configuration data has to be swapped bitwise before it
86 72 arniml
is written to the card. Michael Libeskind kindly provided a program that
87
accimplishes this task. Find it in sw/misc/bit_reverse.c.
88 25 arniml
 
89
 
90 10 arniml
Verification
91
------------
92
 
93
The spi_boot core comes with a simple testbench that simulates an SD/MMC
94
card. All four implementations of the core are verified there in parallel
95
while transferring the data for several sets.
96
You should normally not need to run the testbench. But in case you modified
97
the VHDL code the testbench gives some hints if the design has been broken.
98
 
99
 
100
Directory Structure
101
-------------------
102
 
103
The core's directory structure follows the proposal of OpenCores.org.
104
 
105
spi_boot
106
 |
107 49 arniml
 \--+-- doc                 : Documentation
108 10 arniml
    |    |
109 49 arniml
    |    \-- src            : Source files of documentation
110
    |
111
    +-- rtl
112
    |    |
113 10 arniml
    |    \-- vhdl           : VHDL code containing the RTL description
114
    |                         of the core.
115
    |
116
    +-- bench
117
    |    |
118
    |    \-- vhdl           : VHDL testbench code.
119
    |
120
    \-- sim
121
         |
122
         \-- rtl_sim        : Directory for running simulations.
123
 
124
 
125 21 arniml
RAM Loader
126
----------
127
 
128
Directory rtl/vhdl/ram_loader contains the sample design which loads the next
129
image from the card and stores its contents to external asynchronous
130
RAM. After reading 64 KB it triggers a new configuration process for the final
131
FPGA design.
132
Refer to the code for the mechanisms involved.
133
 
134
 
135 10 arniml
Compiling the VHDL Code
136
-----------------------
137
 
138
VHDL compilation and simulation tasks take place inside in sim/rtl_sim
139
directory. The project setup supports only the GHDL simulator (see
140
http://ghdl.free.fr).
141
 
142
To compile the code simply type at the shell
143
 
144
$ make
145
 
146
This should result in a file called tb_behav_c0 which can be executed as any
147
other executable.
148
 
149
The basic simple sequence list can be found in COMPILE_LIST. This can be
150
useful to quickly set up the analyze stage of any compiler or
151
synthesizer. Especially when synthesizing the code, you want to skip the VHDL
152
configurations in *-c.vhd and everything below the bench/ directory.
153
 
154
 
155
References
156
----------
157
 
158
  * SanDisk SD Card Product Manual
159
    http://www.sandisk.com/pdf/oem/ProdManualSDCardv1.9.pdf
160
 
161
  * SanDisk MMC Product Manual
162
    http://www.sandisk.com/pdf/oem/manual-rs-mmcv1.0.pdf
163
 
164
  * Toshiba SD Card Specification
165
    http://i.cmpnet.com/chipcenter/memory/images/prod055.pdf
166 18 arniml
 
167 22 arniml
  * BurchED
168
    http://burched.biz/
169
 
170 18 arniml
  * FPGA MMC-Card Config project
171
    http://www.opencores.org/projects.cgi/web/mmcfpgaconfig/overview

powered by: WebSVN 2.1.0

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