Copyright notices in docs
[mw/milkymist.git] / cores / sysctl / doc / sysctl.tex
1 \documentclass[a4paper,11pt]{article}
2 \usepackage{fullpage}
3 \usepackage[latin1]{inputenc}
4 \usepackage[T1]{fontenc}
5 \usepackage[normalem]{ulem}
6 \usepackage[english]{babel}
7 \usepackage{listings,babel}
8 \lstset{breaklines=true,basicstyle=\ttfamily}
9 \usepackage{graphicx}
10 \usepackage{moreverb}
11 \usepackage{url}
12 \usepackage{tabularx}
13
14 \title{System controller}
15 \author{S\'ebastien Bourdeauducq}
16 \date{December 2009}
17 \begin{document}
18 \setlength{\parindent}{0pt}
19 \setlength{\parskip}{5pt}
20 \maketitle{}
21 \section{Overview}
22
23 The system controller includes basic functionality that is found on most SoC designs :
24 \begin{itemize}
25 \item a \textbf{GPIO controller}, which can be used for software-driven low-speed communication with peripherals and for simple user interaction like controlling LEDs and detecting keypresses.
26 \item two \textbf{timers} with a precision of one clock cycle.
27 \item a 32-bit \textbf{system identification} value.
28 \end{itemize}
29
30 \section{GPIO controller}
31
32 The GPIO controller can support a maximum of 32 inputs and 32 outputs. Bidirectional signals are not supported. The \verb!ninputs! and \verb!noutputs! control the actual number of input and outputs.
33
34 It is possible to generate an interrupt when an input changes. The interrupt will be generated on both rising and falling edges of the input.
35
36 \begin{tabularx}{\textwidth}{|l|l|l|X|}
37 \hline
38 \bf{Offset} & \bf{Read/Write} & \bf{Default} & \bf{Description} \\
39 \hline
40 0x00 & R & N/A & Inputs. \\
41 \hline
42 0x04 & RW & 0 & Outputs. \\
43 \hline
44 0x08 & RW & 0 & Interrupt enable. Lists the input pins whose level changes (bit set in the 0x08 register) generate an interrupt. \\
45 \hline
46 \end{tabularx}\\
47
48 \section{Dual timer}
49 The system controller provides two independent timers. Timer 0 uses registers 0x10, 0x14 and 0x18, while timer 1 uses registers 0x20, 0x24 and 0x28.
50
51 \subsection{Timer control register, offset 0x10/0x20}
52 \begin{tabularx}{\textwidth}{|l|l|l|X|}
53 \hline
54 \bf Bits & \bf Access & \bf Default & \bf Description \\
55 \hline
56 0 & RW & 0 & (Enable bit). If this bit is set, the counter register counts upwards until it reaches the value stored in the compare register. \\
57 \hline
58 1 & RW & 0 & If this bit is set, the counter will automatically restart from 1 when the compare value is reached, otherwise the counter will be disabled. \\
59 \hline
60 31 -- 2 & --- & 0 & Reserved. \\
61 \hline
62 \end{tabularx}
63
64 \subsection{Compare register, offset 0x14/0x24}
65 This register holds the value to which the counter is compared to, in order to stop/restart the timer and generate an interrupt.
66
67 \subsection{Counter register, offset 0x18/0x28}
68 This register holds the current value of the timer counter. It can be read or written at any time.
69 Writing it does not clear the trigger bit (bit 0 of the timer control register). The trigger bit should always be manually reset.
70
71 \section{System identification}
72 The system controller provides a 32-bit value defined at synthesis time that can be used to identify bitstreams or boards. The value is set by the \verb!systemid! Verilog parameter and read using the register 0x2c.
73
74 \section*{Copyright notice}
75 Copyright \copyright 2007-2009 S\'ebastien Bourdeauducq. \\
76 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the LICENSE.FDL file at the root of the Milkymist source distribution.
77
78 \end{document}