SoC Architecture Overview

Overview

RVCom is a System-on-Chip (SoC) that implements the RISC-V ISA (RV32IMAZicsr_Zifencei). This SoC is a fully functional system integrating a CPU, Memory Management Unit (MMU), cache hierarchy, peripherals, and a DRAM controller.

System Configuration

Module Hierarchy

soc (soc/soc.v)
├── axi_interconnect (soc/axi_interconnect.v)  # AXI bus interconnect
│
├── clint (clint/clint.v)                      # Core-local interrupt controller
│
├── cpu (cpu/cpu.v)   ├── alu (cpu/alu.v)                        # Arithmetic Logic Unit   ├── bimodal (cpu/bimodal.v)                # Branch predictor   ├── bru (cpu/bru.v)                        # Branch resolution unit   ├── csr_regfile (cpu/csr_regfile.v)        # CSR register file   ├── csralu (cpu/csralu.v)                  # CSR operation ALU   ├── decoder (cpu/decoder.v)                # Instruction decoder   ├── divider (cpu/divider.v)                # Divider   ├── ifu (cpu/ifu.v)                        # Instruction fetch unit   ├── imm_gen (cpu/imm_gen.v)                # Immediate generator   ├── lsu (cpu/lsu.v)                        # Load/store unit      ├── amo_decoder (cpu/amo_decoder.v)    # Atomic instruction decoder      └── amoalu (cpu/amoalu.v)              # Atomic operation ALU   ├── multiplier (cpu/multiplier.v)          # Multiplier   └── regfile (cpu/regfile.v)                # General-purpose register file
│
├── dram_controller (dram/dram_controller.v)   # DRAM controller   ├── async_fifo (dram/async_fifo.v)         # Asynchronous FIFO   └── synchronizer (synchronizer.v) ×3       # Clock domain synchronization   └── mig_7series_0 (Xilinx IP)              # MIG DDR2/DDR3 controller
│
├── l2_cache (cache/l2_cache.v)                # L2 unified cache
│
├── mmu (mmu/mmu.v)   ├── dtlb (mmu/dtlb.v)                      # Data TLB   ├── itlb (mmu/itlb.v)                      # Instruction TLB   ├── l1_dcache (cache/l1_dcache.v)          # L1 data cache   ├── l1_icache (cache/l1_icache.v)          # L1 instruction cache   └── ptw (mmu/ptw.v)                        # Page table walker
│
├── plic (plic/plic.v)                         # Platform-level interrupt controller
│
└── uart (uart/uart.v)                         # UART controller
    ├── fifo (uart/fifo.v)                     # FIFO buffer
    ├── uart_rx (uart/uart_rx.v)               # UART receiver
    └── uart_tx (uart/uart_tx.v)               # UART transmitter

Component Details

1. CPU

A 5-stage pipeline RISC-V CPU core. Supports the RV32IMA instruction set and implements Machine/Supervisor/User privilege modes. Branch performance is enhanced by a branch predictor (Bimodal + BTB).

2. MMU

SV32 virtual memory management unit. Implements fast address translation via ITLB/DTLB and TLB miss handling through a hardware page table walker (PTW).

3. L2 Cache

A 4-way set-associative unified cache. Caches both instructions and data, managed with a PLRU replacement algorithm. Uses PIPT (Physically Indexed, Physically Tagged) addressing.

4. AXI Interconnect

AXI4-compliant bus interconnect. Arbitrates memory and I/O accesses from the CPU and routes them to appropriate peripherals.

5. Peripherals

CLINT

Core-Local Interrupt Controller. Features a 64-bit timer (mtime) and timer compare register (mtimecmp), generating timer interrupts and software interrupts (IPI).

PLIC

Platform-Level Interrupt Controller. Arbitrates external interrupts based on priority and delivers interrupts to M-mode and S-mode contexts.

UART

RS-232 serial communication controller. Equipped with transmit/receive FIFOs and configurable baud rate. Used for system debugging and program loading during boot.

Boot ROM

8KB boot ROM. Stores initialization code and bootloader executed after reset. Supports program loading via UART or execution from DRAM.

DRAM Controller

DDR2/DDR3 controller using Xilinx MIG (Memory Interface Generator). Converts AXI protocol to DRAM commands and manages main memory access.

Configuration Files

Project configuration is managed through the following files:

Hardware Configuration

  • config.vh (src/config.vh)

    • Cache sizes (L0/L1/L2)

    • TLB entry counts (ITLB/DTLB)

    • Branch predictor depth

    • Auto-generated by setting.py

System Constants

  • rvcom.vh (src/rvcom.vh)

    • Memory map definitions

    • CSR address definitions

    • Exception code definitions

    • Interrupt definitions

    • Bus width definitions

Bus Protocol

  • axi.vh (src/axi.vh)

    • AXI4 protocol definitions

    • AWADDR, WDATA, BRESP, RRESP

    • AWPROT, ARSIZE, etc.