summaryrefslogtreecommitdiffstats
path: root/picorv32/picosoc/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'picorv32/picosoc/README.md')
-rw-r--r--picorv32/picosoc/README.md114
1 files changed, 0 insertions, 114 deletions
diff --git a/picorv32/picosoc/README.md b/picorv32/picosoc/README.md
deleted file mode 100644
index 1708709..0000000
--- a/picorv32/picosoc/README.md
+++ /dev/null
@@ -1,114 +0,0 @@
-
-PicoSoC - A simple example SoC using PicoRV32
-=============================================
-
-![](overview.svg)
-
-This is a simple PicoRV32 example design that can run code directly from an SPI
-flash chip. It can be used as a turn-key solution for simple control tasks in
-ASIC and FPGA designs.
-
-An example implementation targeting the Lattice iCE40-HX8K Breakout Board is
-included.
-
-The flash is mapped to the memory regions starting at 0x00000000 and
-0x01000000, with the SRAM overlayed for the mapping at 0x00000000. The SRAM
-is just a small scratchpad memory (default 256 words, i.e. 1 kB).
-
-The reset vector is set to 0x00100000, i.e. at 1MB into in the flash memory.
-
-See the included demo firmware and linker script for how to build a firmware
-image for this system.
-
-Run `make hx8ksim` or `make icebsim` to run the test bench (and create `testbench.vcd`).
-
-Run `make hx8kprog` to build the configuration bit-stream and firmware images
-and upload them to a connected iCE40-HX8K Breakout Board.
-
-Run `make icebprog` to build the configuration bit-stream and firmware images
-and upload them to a connected iCEBreaker Board.
-
-| File | Description |
-| ----------------------------------- | --------------------------------------------------------------- |
-| [picosoc.v](picosoc.v) | Top-level PicoSoC Verilog module |
-| [spimemio.v](spimemio.v) | Memory controller that interfaces to external SPI flash |
-| [simpleuart.v](simpleuart.v) | Simple UART core connected directly to SoC TX/RX lines |
-| [start.s](start.s) | Assembler source for firmware.hex/firmware.bin |
-| [firmware.c](firmware.c) | C source for firmware.hex/firmware.bin |
-| [sections.lds](sections.lds) | Linker script for firmware.hex/firmware.bin |
-| [hx8kdemo.v](hx8kdemo.v) | FPGA-based example implementation on iCE40-HX8K Breakout Board |
-| [hx8kdemo.pcf](hx8kdemo.pcf) | Pin constraints for implementation on iCE40-HX8K Breakout Board |
-| [hx8kdemo\_tb.v](hx8kdemo_tb.v) | Testbench for implementation on iCE40-HX8K Breakout Board |
-| [icebreaker.v](icebreaker.v) | FPGA-based example implementation on iCEBreaker Board |
-| [icebreaker.pcf](icebreaker.pcf) | Pin constraints for implementation on iCEBreaker Board |
-| [icebreaker\_tb.v](icebreaker_tb.v) | Testbench for implementation on iCEBreaker Board |
-
-### Memory map:
-
-| Address Range | Description |
-| ------------------------ | --------------------------------------- |
-| 0x00000000 .. 0x00FFFFFF | Internal SRAM |
-| 0x01000000 .. 0x01FFFFFF | External Serial Flash |
-| 0x02000000 .. 0x02000003 | SPI Flash Controller Config Register |
-| 0x02000004 .. 0x02000007 | UART Clock Divider Register |
-| 0x02000008 .. 0x0200000B | UART Send/Recv Data Register |
-| 0x03000000 .. 0xFFFFFFFF | Memory mapped user peripherals |
-
-Reading from the addresses in the internal SRAM region beyond the end of the
-physical SRAM will read from the corresponding addresses in serial flash.
-
-Reading from the UART Send/Recv Data Register will return the last received
-byte, or -1 (all 32 bits set) when the receive buffer is empty.
-
-The UART Clock Divider Register must be set to the system clock frequency
-divided by the baud rate.
-
-The example design (hx8kdemo.v) has the 8 LEDs on the iCE40-HX8K Breakout Board
-mapped to the low byte of the 32 bit word at address 0x03000000.
-
-### SPI Flash Controller Config Register:
-
-| Bit(s) | Description |
-| -----: | --------------------------------------------------------- |
-| 31 | MEMIO Enable (reset=1, set to 0 to bit bang SPI commands) |
-| 30:23 | Reserved (read 0) |
-| 22 | DDR Enable bit (reset=0) |
-| 21 | QSPI Enable bit (reset=0) |
-| 20 | CRM Enable bit (reset=0) |
-| 19:16 | Read latency (dummy) cycles (reset=8) |
-| 15:12 | Reserved (read 0) |
-| 11:8 | IO Output enable bits in bit bang mode |
-| 7:6 | Reserved (read 0) |
-| 5 | Chip select (CS) line in bit bang mode |
-| 4 | Serial clock line in bit bang mode |
-| 3:0 | IO data bits in bit bang mode |
-
-The following settings for CRM/DDR/QSPI modes are valid:
-
-| CRM | QSPI | DDR | Read Command Byte | Mode Byte |
-| :-: | :--: | :-: | :-------------------- | :-------: |
-| 0 | 0 | 0 | 03h Read | N/A |
-| 0 | 0 | 1 | BBh Dual I/O Read | FFh |
-| 1 | 0 | 1 | BBh Dual I/O Read | A5h |
-| 0 | 1 | 0 | EBh Quad I/O Read | FFh |
-| 1 | 1 | 0 | EBh Quad I/O Read | A5h |
-| 0 | 1 | 1 | EDh DDR Quad I/O Read | FFh |
-| 1 | 1 | 1 | EDh DDR Quad I/O Read | A5h |
-
-The following plot visualizes the relative performance of the different configurations:
-
-![](performance.png)
-
-Consult the datasheet for your SPI flash to learn which configurations are supported
-by the chip and what the maximum clock frequencies are for each configuration.
-
-For Quad I/O mode the QUAD flag in CR1V must be set before enabling Quad I/O in the
-SPI master. Either set it by writing the corresponding bit in CR1NV once, or by writing
-it from your device firmware at every bootup. (See `set_flash_qspi_flag()` in
-`firmware.c` for an example for the latter.)
-
-Note that some changes to the Lattice iCE40-HX8K Breakout Board are required to support
-the faster configurations: (1) The flash chip must be replaced with one that supports the
-faster read commands and (2) the IO2 and IO3 pins on the flash chip must be connected to
-the FPGA IO pins T9 and T8 (near the center of J3).
-