OpenCores
URL https://opencores.org/ocsvn/ion/ion/trunk

Subversion Repositories ion

[/] [ion/] [trunk/] [doc/] [src/] [tex/] [usage.tex] - Blame information for rev 210

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 210 ja_rd
 
2
\chapter{Usage}
3
 
4
\section{Main Modules}
5
\label{main_modules}
6
 
7
The core is split in three main modules:
8
 
9
\begin{enumerate}
10
    \item The CPU (mips\_cpu.vhdl).
11
    \item The cache+memory controller (mips\_cache.vhdl).
12
    \item An 'MCU' entity which combines CPU+Cache (mips\_mpu.vhdl).
13
\end{enumerate}
14
 
15
The entity you should use in your projects is the MCU module. The project
16
includes a 'hardware demo' built around this module (see section
17
~\ref{pregenerated_demo}) which can be used as an usage example.\\
18
 
19
The main modules are briefly described in the following subsections.
20
 
21
 
22
\section{MCU Module}
23
\label{mcu_module}
24
 
25
The MCU module main purpose is to encapsulate the somewhat complex
26
interconnection between the CPU and the Cache module.
27
 
28
If some project demands that some piece of hardware be directly connected to the
29
CPU, bypassing the cache, this is where it should be -- an MMU comes to mind.
30
 
31
Any peripherals deemed common enough that they will be present in all projects
32
might be placed in the MCU module too -- after all, the MCU name has been chosen
33
to imply that 'bundling together' of a CPU and a bunch of peripherals.
34
 
35
In the current version of the MCU module, there is only a peripheral included in
36
it -- a hardwired UART module. There is no penalty for placing peripherals
37
ouside the MCU module, so there is no incentive to place them inside, thus
38
making the interface more complex. This is an implementation option of yours.\\
39
 
40
\subsection{MCU Ports}
41
\label{mcu_ports}
42
 
43
\begin{figure}[h]
44
\makebox[\textwidth]{\framebox[9cm]{\rule{0pt}{9cm}
45
\includegraphics[width=8cm]{img/mpu_symbol.png}}}
46
\caption{MPU module interface\label{mpu_symbol}}
47
\end{figure}
48
 
49
\begin{table}[h]
50
\caption{MCU module interface ports}
51
\begin{tabularx}{\textwidth}{ lll|X }
52
\toprule
53
Name & Type & Width & Description \\
54
\midrule
55
clk                 & in    & 1  & Clock input, active rising edge. \\
56
reset               & in    & 1  & Synchronous global reset. \\
57
\midrule
58
sram\_address       & out   & 16 & Memory word address (bit 0 absent). \\
59
sram\_data\_wr      & out   & 16 & Memory write data. Only valid when one of the \\
60
                    &       &    & memory byte write enable outputs is active.\\
61
sram\_data\_rd      & in    & 16 & Memory read data. Latched when xxx. \\
62
sram\_byte\_we\_n   & out   & 2  & Memory byte write enable, active low.  \\
63
                    &       &    & (0) enables the low byte (7 downto 0) \\
64
                    &       &    & (1) enables the high byte (15 downto 8). \\
65
\midrule
66
io\_rd\_addr        & out   & 30 & I/O port read address (bits 1..0 absent). \\
67
                    &       &    & Only valid when io\_rd\_vma is high. \\
68
io\_wr\_addr        & out   & 30 & I/O port write address (bits 1..0 absent). \\
69
io\_wr\_data        & out   & 32 & I/O write data.  Only valid when one of the \\
70
                    &       &    & i/o byte write enable outputs is active.\\
71
io\_rd\_data        & in    & 32 & I/O read data. Latched when xxx. \\
72
io\_byte\_we        & out   & 4  & I/O byte write enable, active high. \\
73
                    &       &    & (0) enables the low byte (7 downto 0) \\
74
                    &       &    & (3) enables the high byte (31 downto 24). \\
75
io\_rd\_vma         & out   & 1  & Active high on i/o read cycles. \\
76
\midrule
77
uart\_rxd           & in    & 1  & RxD input to internal UART. \\
78
uart\_txd           & out   & 1  & TxD output from internal UART. \\
79
\midrule
80
interrupt           & in    & 8  & Interrupt request inputs, active high. \\
81
\bottomrule
82
\end{tabularx}
83
\end{table}
84
 
85
As you can see in figure~\ref{mpu_symbol} (symbol generated by Xilinx ISE),
86
the MCU has the following interfaces:
87
 
88
\begin{enumerate}
89
    \item Interface to external static asynchronous memory (SRAM, FLASH...).
90
    \item Interface to on-chip peripherals.
91
    \item Interrupt inputs.
92
\end{enumerate}
93
 
94
These interfaces will be explained in the following subsections. The top module
95
for the demo supplied with the project (c2sb\_demo.vhdl) will be used for
96
illustration.
97
 
98
\emph{NOTE}: This section needs a lot of elaboration -- ideally this should be
99
equivalent to
100
a datasheet in thoroughness and detail. This work, like many other parts of this
101
project, will have to wait.
102
 
103
\subsection{MCU interface to static memory}
104
\label{mcu_if_sram}
105
 
106
The interface to external memory in the MCU module is essentially that of the
107
internal cache/memory controller. Its timing is described in section
108
~\ref{cache_state_machine}.\\
109
 
110
The MCU inputs are meant to be connected straight to the FPGA i/o pins. The only
111
trick is the bidirectional memory data bus: as you can see, the MCU data buses
112
are unidirectional and thus you will need to provide an interconnection
113
external to this module. This interconnection shall include the requisite
114
3-state buffers:
115
 
116
\begin{verbatim}
117
sram_databus <= sram_data_wr when sram_byte_we_n/="11" else (others => 'Z');
118
\end{verbatim}
119
 
120
The top level module can be used as a fully tested example of how to use this
121
interface to connect to a common SRAM chip (ISSI IS61LV25616).
122
 
123
In reviewing the top module source, note that I had to adapt the dual
124
byte-write-enable outputs to the SRAM
125
configuration of a single write-enable plus dual byte-enable inputs.
126
 
127
Note too that the static memory bus is used to access both the 16-bit wide SRAM
128
and an 8-bit wide FLASH. These chips are connected to separate buses on the
129
target board, so the top module needs to conflate both buses before connecting
130
them to the MPU. This is why a multiplexor is used in the mpu\_sram\_data\_rd
131
bus. A real-world board would probably have the SRAM and the FLASH connected
132
to the same bus, simplifying the interface logic.
133
 
134
 
135
\subsection{MCU interface to peripherals}
136
\label{mcu_if_io}
137
 
138
    TODO Documentation to be done
139
 
140
\subsection{MCU interrupt inputs}
141
\label{mcu_irqs}
142
 
143
    TODO Documentation to be done

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.