874214e1e75596ae8a6cb230e928b1c754377d68
[litex.git] / litex / soc / cores / cpu / __init__.py
1 # This file is Copyright (c) 2015-2020 Florent Kermarrec <florent@enjoy-digital.fr>
2 # This file is Copyright (c) 2017-2018 Tim 'mithro' Ansell <me@mith.ro>
3 # License: BSD
4
5 from migen import *
6
7 # CPU ----------------------------------------------------------------------------------------------
8
9 class CPU(Module):
10 name = None
11 data_width = None
12 endianness = None
13 gcc_triple = None
14 gcc_flags = None
15 clang_triple = None
16 clang_flags = None
17 linker_output_format = None
18 interrupts = {}
19 mem_map = {}
20 io_regions = {}
21 use_rom = False
22
23 def __init__(self, *args, **kwargs):
24 pass
25
26 class CPUNone(CPU):
27 variants = ["standard"]
28 data_width = 32
29 endianness = "little"
30 reset_address = 0x00000000
31 io_regions = {0x00000000: 0x100000000} # origin, length
32 periph_buses = []
33 memory_buses = []
34 mem_map = {"csr": 0x00000000}
35
36 CPU_GCC_TRIPLE_RISCV32 = (
37 "riscv64-unknown-elf",
38 "riscv32-unknown-elf",
39 "riscv64-elf",
40 "riscv32-elf",
41 "riscv-none-embed",
42 "riscv64-linux",
43 "riscv64-linux-gnu-gcc",
44 "riscv-sifive-elf",
45 "riscv64-none-elf",
46 )
47
48 CPU_GCC_TRIPLE_RISCV64 = (
49 "riscv64-unknown-elf",
50 "riscv64-elf",
51 "riscv64-linux",
52 "riscv64-linux-gnu-gcc",
53 "riscv-sifive-elf",
54 "riscv64-none-elf",
55 )
56
57 # CPUS ---------------------------------------------------------------------------------------------
58
59 # LM32
60 from litex.soc.cores.cpu.lm32 import LM32
61
62 # OpenRisc
63 from litex.soc.cores.cpu.mor1kx import MOR1KX
64
65 # OpenPower
66 from litex.soc.cores.cpu.microwatt import Microwatt
67
68 # RISC-V (32-bit)
69 from litex.soc.cores.cpu.serv import SERV
70 from litex.soc.cores.cpu.picorv32 import PicoRV32
71 from litex.soc.cores.cpu.minerva import Minerva
72 from litex.soc.cores.cpu.vexriscv import VexRiscv
73 from litex.soc.cores.cpu.cv32e40p import CV32E40P
74
75 # RISC-V (64-bit)
76 from litex.soc.cores.cpu.rocket import RocketRV64
77 from litex.soc.cores.cpu.blackparrot import BlackParrotRV64
78
79 # Zynq
80 from litex.soc.cores.cpu.zynq7000 import Zynq7000
81
82
83 CPUS = {
84 # None
85 "None" : CPUNone,
86
87 # LM32
88 "lm32" : LM32,
89
90 # OpenRisc
91 "mor1kx" : MOR1KX,
92
93 # OpenPower
94 "microwatt" : Microwatt,
95
96 # RISC-V (32-bit)
97 "serv" : SERV,
98 "picorv32" : PicoRV32,
99 "minerva" : Minerva,
100 "vexriscv" : VexRiscv,
101 "cv32e40p" : CV32E40P,
102
103 # RISC-V (64-bit)
104 "rocket" : RocketRV64,
105 "blackparrot" : BlackParrotRV64,
106
107 # Zynq
108 "zynq7000" : Zynq7000,
109 }