... | ... | @@ -18,8 +18,9 @@ Its main features are: |
|
|
- a finite-state machine (FSM) controls writing to the flash chip and
|
|
|
sending the IPROG command to the FPGA
|
|
|
- modular, easily modifiable design
|
|
|
- flash chip is controlled by software, so virtually any SPI flash
|
|
|
chip is supported
|
|
|
- flash chip is controlled by software, so virtually any 8-bit SPI
|
|
|
flash chip is supported by writing software to send the various
|
|
|
commands to the chip
|
|
|
- Wishbone interface can easily be replaced by some other
|
|
|
interconnect (e.g., AXI) by implementing the **multiboot\_regs**
|
|
|
module
|
... | ... | @@ -47,17 +48,30 @@ fails |
|
|
|
|
|
![](/uploads/4a0d89b5a42ebbf0152df6a74e7710ed/multiboot.png)
|
|
|
|
|
|
A strike count is used to select which bitstream gets loaded; it
|
|
|
increments every time there is an error:
|
|
|
A strike count is used to select which bitstream gets loaded. In Xilinx
|
|
|
FPGAs, two kinds of errors can exist when loading a bitstream:
|
|
|
|
|
|
- CRC error - the CRC at the end of the bitstream does not correspond
|
|
|
to what is calculated by the programming logic
|
|
|
- Watchdog timer timeout - the Watchdog timer used to detect the
|
|
|
configuration synchronization word
|
|
|
[\[1\]](/xil-multiboot#References) counts to its maximum value
|
|
|
|
|
|
The strike count increments on either of these two errors and bitstreams
|
|
|
are selected based on this count as below:
|
|
|
|
|
|
- if it is 0..2, the MultiBoot bitstream gets loaded
|
|
|
- if it is 3..5, the golden bitstream gets loaded
|
|
|
- if it is 6..8, the header bitstream gets loaded
|
|
|
- if it is 6..8, the header bitstream gets loaded, and multiboot and
|
|
|
golden bitstreams are attempted three more times
|
|
|
- if it is 9, configuration is halted
|
|
|
|
|
|
This strike count can **only be reset** by power-down or pulling low the
|
|
|
special PROGRAM\_B pin of the FPGA, so once the strike count hits three,
|
|
|
one cannot go back into reprogramming the MultiBoot bitstream.
|
|
|
Note that for this scheme to work, the flag **-g reset\_on\_error** must
|
|
|
be set when running **bitgen**.
|
|
|
|
|
|
This strike count can **only be reset** by power-on reset or pulling low
|
|
|
the special PROGRAM\_B pin of the FPGA, so once the strike count hits
|
|
|
three, one cannot go back into reprogramming the MultiBoot bitstream.
|
|
|
|
|
|
-----
|
|
|
|
... | ... | |