... | ... | @@ -89,16 +89,25 @@ In order to remotely reprogram a Xilinx FPGA using the |
|
|
4. Repeat the previous two steps until the bitstream has been sent
|
|
|
5. Write the MultiBoot bitstream start address and flash chip read
|
|
|
command op-code into the MBBAR register
|
|
|
6. Write the golden bitstream start address and flash chip read command
|
|
|
6. Write the Golden bitstream start address and flash chip read command
|
|
|
op-code into the GBBAR register
|
|
|
7. Unlock the IPROG bit in the FPGA by setting the CR.IPROG\_UNL bit
|
|
|
8. Issue a reprogramming command to the FPGA by setting the CR.IPROG
|
|
|
bit
|
|
|
9. Wait for reprogramming to finish
|
|
|
10. Issue a read from the FPGA programming logic BOOTSTS register, by
|
|
|
setting CR.BOOTSTS
|
|
|
11. Read SR register and make sure no error bits in the BOOTSTS image
|
|
|
are set
|
|
|
|
|
|
In order to check if reprogramming succeeded, a firmware version number
|
|
|
should be implemented in a separate register and read via the Wishbone
|
|
|
interface. This firmware number should be different from the Golden
|
|
|
bitstream version number. By reading this firmware version number and
|
|
|
making sure it is not that of the Golden bitstream address, MultiBoot
|
|
|
can be validated.
|
|
|
|
|
|
Unfortunately, the BOOTSTS register in the Spartan-6 configuration logic
|
|
|
[\[1\]](/xil-multiboot#References) which should be used to detect if
|
|
|
fallback has occured does not get set after an unsuccessful MultiBoot
|
|
|
attempt and therefore cannot be used to detect fallback. The BOOTSTS
|
|
|
register only gets set after a POR, as outlined in [this Xilinx answer
|
|
|
record](http://www.xilinx.com/support/answers/37910.htm).
|
|
|
|
|
|
-----
|
|
|
|
... | ... | @@ -116,17 +125,17 @@ will not try to load the Golden bitstream. |
|
|
|
|
|
Early in the design cycle, map your flash memory into three bitstreams:
|
|
|
|
|
|
* header bitstream **always** starts from **address 0** and is
|
|
|
* the Header bitstream **always** starts from **address 0** and is
|
|
|
*usually 68 bytes long**
|
|
|
|
|
|
* Golden bitstream usually starts from **address 0x44** (68 in hex),
|
|
|
if generated automatically (see below)
|
|
|
* the Golden bitstream usually starts from **address 0x44** (68 in
|
|
|
hex), if generated automatically (see below)
|
|
|
|
|
|
* if generated and changed manually, it should be set on a sector
|
|
|
boundary
|
|
|
|
|
|
* MultiBoot bitstream should be set after the Golden bitstream, on a
|
|
|
sector boundary
|
|
|
* the MultiBoot bitstream should be set after the Golden bitstream,
|
|
|
on a sector boundary
|
|
|
|
|
|
As an example, using the M25P32 flash chip to store the three bitstreams
|
|
|
for a Spartan-6 X6SLX45T. The M25P32 has 256-byte pages packed into
|
... | ... | |