Skip to content

ultraembedded/fpga_test_soc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FPGA Test SoC

Github: https://github.com/ultraembedded/fpga_test_soc

A small test SoC for various soft-CPUs (Cortex-M0, RISC-V).

Cloning

This repo contains submodules.
Make sure to clone them with the following command;

git clone --recursive https://github.com/ultraembedded/fpga_test_soc.git

Features

  • Support for RISC-V or ARM Cortex-M0 CPU
  • Load SW via UART/USB serial.
  • Multi-channel timer peripheral.
  • UART peripheral.
  • SPI (master mode) peripheral with 8 chip selects.
  • 32 I/O GPIO controller.
  • Interrupt controller (combines peripheral IRQs into single IRQ).

Memory Map

Range Description
0x0000_0000 - 0x0000_ffff 64-KB Memory (RISC-V)
0x0000_0000 - 0x0000_7fff 32-KB Instruction Memory (Cortex-M0)
0x2000_0000 - 0x2000_7fff 32-KB Data Memory (Cortex-M0)
0x9000_0000 - 0x90ff_ffff Peripheral - IRQ controller
0x9100_0000 - 0x91ff_ffff Peripheral - Timer
0x9200_0000 - 0x92ff_ffff Peripheral - UART
0x9300_0000 - 0x93ff_ffff Peripheral - SPI
0x9400_0000 - 0x94ff_ffff Peripheral - GPIO

Project Files

This project is constructed from various sub-projects;

├── cpu
│   ├── cortex_m0
│   │   └── src_v
│   │       ├── ahb_dport.v
│   │       ├── cortexm0ds_logic.v       [NOT SUPPLIED]
│   │       ├── CORTEXM0INTEGRATION.v    [NOT SUPPLIED]
│   │       ├── cortex_m0.v
│   │       ├── cortex_m0_wrapper.v
│   │       ├── dport_axi.v
│   │       ├── dport_mem_pmem.v
│   │       ├── dport_mem_ram13.v
│   │       ├── dport_mem.v
│   │       └── dport_mux.v
│   └── riscv
│       ├── core
│       │   ├── rv32i
│       │   │   ├── riscv_alu.v
│       │   │   ├── riscv_core.v
│       │   │   ├── riscv_csr.v
│       │   │   ├── riscv_decode.v
│       │   │   ├── riscv_defs.v
│       │   │   ├── riscv_exec.v
│       │   │   ├── riscv_fetch.v
│       │   │   ├── riscv_lsu.v
│       │   │   └── riscv_regfile.v
│       │   ├── rv32im
│       │   │   ├── riscv_alu.v
│       │   │   ├── riscv_core.v
│       │   │   ├── riscv_csr.v
│       │   │   ├── riscv_decode.v
│       │   │   ├── riscv_defs.v
│       │   │   ├── riscv_exec.v
│       │   │   ├── riscv_fetch.v
│       │   │   ├── riscv_lsu.v
│       │   │   ├── riscv_muldiv.v
│       │   │   └── riscv_regfile.v
│       │   ├── rv32imsu
│       │   │   ├── riscv_alu.v
│       │   │   ├── riscv_core.v
│       │   │   ├── riscv_csr.v
│       │   │   ├── riscv_decode.v
│       │   │   ├── riscv_defs.v
│       │   │   ├── riscv_exec.v
│       │   │   ├── riscv_fetch.v
│       │   │   ├── riscv_lsu.v
│       │   │   ├── riscv_mmu_arb.v
│       │   │   ├── riscv_mmu.v
│       │   │   ├── riscv_muldiv.v
│       │   │   └── riscv_regfile.v
│       │   └── rv32i_spartan6
│       │       ├── riscv_alu.v
│       │       ├── riscv_core.v
│       │       ├── riscv_csr.v
│       │       ├── riscv_decode.v
│       │       ├── riscv_defs.v
│       │       ├── riscv_exec.v
│       │       ├── riscv_fetch.v
│       │       ├── riscv_lsu.v
│       │       └── riscv_regfile.v
│       └── top_tcm_wrapper
│           ├── dport_axi.v
│           ├── dport_mux.v
│           ├── riscv_tcm_wrapper.v
│           ├── tcm_mem_pmem.v
│           ├── tcm_mem_ram.v
│           └── tcm_mem.v
├── fpga
│   ├── arty_a7
│   │   ├── artix7_pll.v
│   │   ├── arty_revb.xdc
│   │   ├── makefile
│   │   └── top.v
│   ├── common
│   │   ├── axi4_axi4lite_conv.v
│   │   ├── fpga_top.v
│   │   ├── makefile.fpga_ise
│   │   ├── makefile.fpga_vivado
│   │   └── reset_gen.v
│   ├── minispartan6
│   │   ├── fpga.ucf
│   │   ├── makefile
│   │   └── top.v
│   └── qmtech_a7
│       ├── makefile
│       ├── top.v
│       └── xc7m.xdc
└── soc
    ├── core_soc
    │   └── src_v
    │       ├── axi4lite_dist.v
    │       ├── core_soc.v
    │       ├── gpio_defs.v
    │       ├── gpio.v
    │       ├── irq_ctrl_defs.v
    │       ├── irq_ctrl.v
    │       ├── spi_lite_defs.v
    │       ├── spi_lite.v
    │       ├── timer_defs.v
    │       ├── timer.v
    │       ├── uart_lite_defs.v
    │       └── uart_lite.v
    └── dbg_bridge
        └── src_v
            ├── dbg_bridge_fifo.v
            ├── dbg_bridge_uart.v
            └── dbg_bridge.v

Getting Started

Building a FPGA target (RISC-V)

# Choose target board
cd fpga/arty_a7

# Make sure Vivado environmental variables setup
source /opt/Xilinx/Vivado/XXXX.X/settings64.sh

# Build bitstream
make CPU=riscv

# Load bitstream onto target board
make run

Building a FPGA target (Cortex-M0)


# Download ARM Cortex-M0 DesignStart from ARM

# Copy CPU core files into this project
cp CORTEXM0INTEGRATION.v cpu/cortex_m0/src_v/
cp cortexm0ds_logic.v cpu/cortex_m0/src_v/

# Choose target board
cd fpga/arty_a7

# Make sure Vivado environmental variables setup
source /opt/Xilinx/Vivado/XXXX.X/settings64.sh

# Build bitstream
make CPU=armv6m

# Load bitstream onto target board
make run

Running helloworld on the target


# Find correct tty port (replace /dev/ttyUSB1 as appropriate)...

# Run FW on target
./run.py -d /dev/ttyUSB1 -f prebuilt/helloworld_riscv.elf 
ELF: Loading 0x0 - size 15KB
 |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| 100.0% 
helloworld!
helloworld!
helloworld!
helloworld!
helloworld!
helloworld!
helloworld!
helloworld!

About

A small test SoC for various soft-CPUs (Cortex-M0, RISC-V)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Contributors 2

  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy