Atom2K18 Multiboot Capabilities - hoglet67/AtomFpga GitHub Wiki

Introduction

Atom 2K18 now has more features and options than will fit into the relatively small Xilinx XC6SLX9 FPGA:

  • 6502 or 65C02 processor
  • Atom2K15 RAM/ROM support
  • ICE Debugger (latest version - 0.985 - with upto 8 breakpoints)
  • AtoMMC2 (latest verion - 2D)
  • Extended 6847 Graphics (e.g. 2x2 block graphics)
  • Soft Character RAM
  • VGA80x40 mode
  • SID audio
  • Hardware Scrolling
  • Double Buffered Video Memory
  • Mouse
  • UART
  • Integrated 6522 (runs at upto 8 MHz)
  • LEDs (Knight-Rider Mode + debugging options)
  • Profiling counters
  • Real time clock
  • Serial Access Memory (SAM)
  • Page Access Memory (PAM)
  • Programmable Palette

To allow a choice of features, we have pre-built multiple versions of the Atom 2K18 Core.

To save having to keep re-programming the FPGA EEPROM, we have also added a multiboot capability, which allows switching to another core on-the-fly using a poke from the Atom.

Details of each Core

The current multi-boot FPGA image includes 8 cores:

The cores are organized into pairs, where the even number core uses a 6502 processor and the odd numbered core uses a 65C02 processor. There are no other differences between the cores in a pair.

Here is a brief summary of what's excluded in each core pair:

Core 0 / 1

  • 6502 processor (Core 0) or 65C02 processor (Core 1)
  • excludes the ICE Debugger

Core 2 / 3

  • 6502 processor (Core 2) or 65C02 processor (Core 3)
  • excludes the SID
  • excludes the Mouse

Core 4 / 5

  • 6502 processor (Core 4) or 65C02 processor (Core 5)
  • excludes the AtoMMC2

Core 6 / 7

  • 6502 processor (Core 6) or 65C02 processor (Core 7)
  • excludes the Mouse
  • excludes the UART
  • excludes the Hardware Scrolling
  • excludes the Double Buffered Video Memory
  • excludes the Profiling Counters
  • excludes the RTC

Usage Notes

On power up, core 0 is selected.

The user can select core N as follows:

?#BFFB=#80 + N

For example, to select core 5:

?#BFFB=#85

To check the core that is currently selected:

PRINT ?#BFFB

When a core is selected, the Atom will immediately reboot into that core. Any programs in main memory will remain, but video memory (#8000-#9FFF) will be wiped (as this resides with the FPGA).

When the ICE Debugger is present, it is used by connecting a USB cable between a PC and the FPGA board, and then running a terminal program at 115,200 baud.

When the AtoMMC2 is missing, accesses to #B4xx are redirected to the expansion bus. It's possible, using Roland's FPGAtom I/O Expansion board, to add a AtoMMC externally.

[ Future: another option might be to use AtoMMC Pi on the internal Raspberry Pi ]

FPGA Utilization

20200616_1228 Release

CORE 0
  Number of Slice Registers:                 3,192 out of  11,440   27%
  Number of Slice LUTs:                      4,371 out of   5,720   76%
  Number of RAMB16BWERs:                        22 out of      32   68%
  Number of RAMB8BWERs:                          8 out of      64   12%
CORE 1
  Number of Slice Registers:                 3,203 out of  11,440   27%
  Number of Slice LUTs:                      4,346 out of   5,720   75%
  Number of RAMB16BWERs:                        23 out of      32   71%
  Number of RAMB8BWERs:                          7 out of      64   10%
CORE 2
  Number of Slice Registers:                 3,728 out of  11,440   32%
  Number of Slice LUTs:                      5,098 out of   5,720   89%
  Number of RAMB16BWERs:                        31 out of      32   96%
  Number of RAMB8BWERs:                          1 out of      64    1%
CORE 3
  Number of Slice Registers:                 3,706 out of  11,440   32%
  Number of Slice LUTs:                      5,123 out of   5,720   89%
  Number of RAMB16BWERs:                        31 out of      32   96%
  Number of RAMB8BWERs:                          1 out of      64    1%
CORE 4
  Number of Slice Registers:                 3,771 out of  11,440   32%
  Number of Slice LUTs:                      5,237 out of   5,720   91%
  Number of RAMB16BWERs:                        22 out of      32   68%
  Number of RAMB8BWERs:                          8 out of      64   12%
CORE 5
  Number of Slice Registers:                 3,774 out of  11,440   32%
  Number of Slice LUTs:                      5,092 out of   5,720   89%
  Number of RAMB16BWERs:                        23 out of      32   71%
  Number of RAMB8BWERs:                          7 out of      64   10%
CORE 6
  Number of Slice Registers:                 4,108 out of  11,440   35%
  Number of Slice LUTs:                      5,562 out of   5,720   97%
  Number of RAMB16BWERs:                        29 out of      32   90%
  Number of RAMB8BWERs:                          2 out of      64    3%
CORE 7
  Number of Slice Registers:                 4,077 out of  11,440   35%
  Number of Slice LUTs:                      5,505 out of   5,720   96%
  Number of RAMB16BWERs:                        30 out of      32   93%
  Number of RAMB8BWERs:                          2 out of      64    3%

Note: The RAMB8BWERs and the RAMB16BWERs cannot be used at the same time.