1 |
210 |
ja_rd |
\clearpage
|
2 |
|
|
This file contains usage instructions and notes about the Ion CPU core project.
|
3 |
221 |
ja_rd |
The core structure is briefly explained in sections 1 to 5. The rest of this
|
4 |
210 |
ja_rd |
doc describes other aspects of the project: code samples, utility scripts,
|
5 |
|
|
etc.\\
|
6 |
|
|
|
7 |
221 |
ja_rd |
This document is not yet a full reference on the Ion core or a data sheet.
|
8 |
|
|
Instead, it should be taken as a companion and commentary to the source code.\\
|
9 |
210 |
ja_rd |
|
10 |
|
|
This document assumes you know in some depth the MIPS-I architecture. Terms and
|
11 |
|
|
concepts from \cite['See MIPS Run']{see_mips_run} and
|
12 |
|
|
\cite['IDT R3K Reference Manual']{r3k_ref_man} are used throughout the text.\\
|
13 |
|
|
|
14 |
|
|
Last modified: \today
|
15 |
|
|
\clearpage
|
16 |
|
|
|
17 |
|
|
\chapter{Introduction}
|
18 |
|
|
|
19 |
|
|
\section{Features}
|
20 |
|
|
\label{features}
|
21 |
|
|
|
22 |
|
|
This is a MIPS-I compatible CPU, aiming at compatibility with IDT's R3000
|
23 |
|
|
MIPS derivative:\\
|
24 |
|
|
|
25 |
|
|
\begin{framed}
|
26 |
|
|
\subsection{Key features}
|
27 |
|
|
\begin{enumerate}
|
28 |
|
|
\item Binary compatible to R3000 series of CPUs.\\
|
29 |
|
|
Can use regular R3000 toolchains despite a few unimplemented opcodes
|
30 |
|
|
listed below.
|
31 |
|
|
\item Kernel/user mode operation as per the architecture definition.
|
32 |
|
|
\item Exception handling compatible to MIPS-I standard.
|
33 |
|
|
\item 4KB direct-mapped code cache.
|
34 |
|
|
\item 4KB direct-mapped, writethrough data cache.
|
35 |
|
|
\item Simplified CP0, mostly compatible to R3000.
|
36 |
|
|
\item All unimplemented opcodes trigger the proper traps.
|
37 |
|
|
\item Includes minimalistic memory handler with interfaces for external
|
38 |
|
|
SRAM (or FLASH) on 8- and 16-bit data bus.
|
39 |
221 |
ja_rd |
\item Size and speed comparable to other free MIPS cores.
|
40 |
210 |
ja_rd |
\item Fully sinchronous (rising clock edge only). No latches.
|
41 |
221 |
ja_rd |
\item Source HDL is fully vendor independent (Only tested on
|
42 |
210 |
ja_rd |
Xilinx and Altera synthesis tools).
|
43 |
|
|
\end{enumerate}
|
44 |
|
|
\end{framed}
|
45 |
|
|
|
46 |
|
|
|
47 |
|
|
The implementation departs from the standard R3000 in some points:
|
48 |
|
|
|
49 |
|
|
\begin{framed}
|
50 |
|
|
\subsection{Non-standard features}
|
51 |
|
|
\begin{enumerate}
|
52 |
|
|
\item No MMU and no TLB -- meaning no memory address translation at all.
|
53 |
|
|
\item Cache management simplified in an incompatible way.
|
54 |
|
|
\item A number of R3000 opcodes are unimplemented or implemented in an
|
55 |
|
|
incompatible way:\\
|
56 |
|
|
Unaligned load/store instructions (formerly patented).\\
|
57 |
|
|
All CPA instructions.\\
|
58 |
|
|
All CP0 instructions related to TLB and the cache.
|
59 |
|
|
\item Some other R3000 CP0 features have been omitted.\\
|
60 |
|
|
This includes the CP0 timer.
|
61 |
|
|
\item Interrupt mask handling simplified in an incompatible way.
|
62 |
|
|
\end{enumerate}
|
63 |
|
|
\end{framed}
|
64 |
|
|
|
65 |
|
|
Finally, there are some flaws and missing features meant to be fixed in
|
66 |
|
|
subsequent versions:
|
67 |
|
|
|
68 |
|
|
\begin{framed}
|
69 |
|
|
\subsection{Missing features to be implemented eventually}
|
70 |
|
|
\begin{enumerate}
|
71 |
|
|
\item Hardware interrupts not implemented.
|
72 |
|
|
\item Memory handler does not support dynamic RAM.
|
73 |
|
|
\item Caches are not configurable or parametrizable.
|
74 |
221 |
ja_rd |
\item Real documentation (specs doc \& data sheet) missing.
|
75 |
210 |
ja_rd |
\end{enumerate}
|
76 |
|
|
\end{framed}
|
77 |
|
|
|
78 |
|
|
|
79 |
|
|
|