5 from minerva
.core
import Minerva
9 parser
= argparse
.ArgumentParser(formatter_class
=argparse
.ArgumentDefaultsHelpFormatter
)
11 parser
.add_argument("--reset-addr",
12 type=lambda s
: int(s
, 16), default
="0x00000000",
13 help="reset vector address")
15 parser
.add_argument("--with-icache",
16 default
=False, action
="store_true",
17 help="enable the instruction cache")
18 parser
.add_argument("--with-dcache",
19 default
=False, action
="store_true",
20 help="enable the data cache")
21 parser
.add_argument("--with-muldiv",
22 default
=False, action
="store_true",
23 help="enable RV32M support")
24 parser
.add_argument("--with-debug",
25 default
=False, action
="store_true",
26 help="enable the Debug Module")
27 parser
.add_argument("--with-trigger",
28 default
=False, action
="store_true",
29 help="enable the Trigger Module")
30 parser
.add_argument("--with-rvfi",
31 default
=False, action
="store_true",
32 help="enable the riscv-formal interface")
34 icache_group
= parser
.add_argument_group("icache options")
35 icache_group
.add_argument("--icache-nways",
36 type=int, choices
=[1, 2], default
=1,
37 help="number of ways")
38 icache_group
.add_argument("--icache-nlines",
39 type=int, default
=128,
40 help="number of lines")
41 icache_group
.add_argument("--icache-nwords",
42 type=int, choices
=[4, 8, 16], default
=4,
43 help="number of words in a line")
44 icache_group
.add_argument("--icache-base",
45 type=lambda s
: int(s
, 16), default
="0x00000000",
47 icache_group
.add_argument("--icache-limit",
48 type=lambda s
: int(s
, 16), default
="0x80000000",
51 dcache_group
= parser
.add_argument_group("dcache options")
52 dcache_group
.add_argument("--dcache-nways",
53 type=int, choices
=[1, 2], default
=1,
54 help="number of ways")
55 dcache_group
.add_argument("--dcache-nlines",
56 type=int, default
=128,
57 help="number of lines")
58 dcache_group
.add_argument("--dcache-nwords",
59 type=int, choices
=[4, 8, 16], default
=4,
60 help="number of words in a line")
61 dcache_group
.add_argument("--dcache-base",
62 type=lambda s
: int(s
, 16), default
="0x00000000",
64 dcache_group
.add_argument("--dcache-limit",
65 type=lambda s
: int(s
, 16), default
="0x80000000",
68 trigger_group
= parser
.add_argument_group("trigger options")
69 trigger_group
.add_argument("--nb-triggers",
71 help="number of triggers")
73 cli
.main_parser(parser
)
75 args
= parser
.parse_args()
77 if args
.with_debug
and not args
.with_trigger
:
78 warnings
.warn("Support for hardware breakpoints requires --with-trigger")
80 cpu
= Minerva(args
.reset_addr
,
81 args
.with_icache
, args
.icache_nways
, args
.icache_nlines
, args
.icache_nwords
,
82 args
.icache_base
, args
.icache_limit
,
83 args
.with_dcache
, args
.dcache_nways
, args
.dcache_nlines
, args
.dcache_nwords
,
84 args
.dcache_base
, args
.dcache_limit
,
87 args
.with_trigger
, args
.nb_triggers
,
91 cpu
.external_interrupt
, cpu
.timer_interrupt
, cpu
.software_interrupt
,
92 cpu
.ibus
.ack
, cpu
.ibus
.adr
, cpu
.ibus
.bte
, cpu
.ibus
.cti
, cpu
.ibus
.cyc
, cpu
.ibus
.dat_r
,
93 cpu
.ibus
.dat_w
, cpu
.ibus
.sel
, cpu
.ibus
.stb
, cpu
.ibus
.we
, cpu
.ibus
.err
,
94 cpu
.dbus
.ack
, cpu
.dbus
.adr
, cpu
.dbus
.bte
, cpu
.dbus
.cti
, cpu
.dbus
.cyc
, cpu
.dbus
.dat_r
,
95 cpu
.dbus
.dat_w
, cpu
.dbus
.sel
, cpu
.dbus
.stb
, cpu
.dbus
.we
, cpu
.dbus
.err
99 ports
+= [cpu
.jtag
.tck
, cpu
.jtag
.tdi
, cpu
.jtag
.tdo
, cpu
.jtag
.tms
]
103 cpu
.rvfi
.valid
, cpu
.rvfi
.order
, cpu
.rvfi
.insn
, cpu
.rvfi
.trap
, cpu
.rvfi
.halt
,
104 cpu
.rvfi
.intr
, cpu
.rvfi
.mode
, cpu
.rvfi
.ixl
, cpu
.rvfi
.rs1_addr
, cpu
.rvfi
.rs2_addr
,
105 cpu
.rvfi
.rs1_rdata
, cpu
.rvfi
.rs2_rdata
, cpu
.rvfi
.rd_addr
, cpu
.rvfi
.rd_wdata
,
106 cpu
.rvfi
.pc_rdata
, cpu
.rvfi
.pc_wdata
, cpu
.rvfi
.mem_addr
, cpu
.rvfi
.mem_rmask
,
107 cpu
.rvfi
.mem_wmask
, cpu
.rvfi
.mem_rdata
, cpu
.rvfi
.mem_wdata
110 cli
.main_runner(parser
, args
, cpu
, name
="minerva_cpu", ports
=ports
)
113 if __name__
== "__main__":