8800c0ea5c65e36879f0e6faa09629ae10ea5750
[mw/milkymist.git] / doc / csr.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{float}
12 \usepackage{url}
13 \usepackage{tabularx}
14
15 \title{Configuration and Status Register (CSR) bus specifications}
16 \author{S\'ebastien Bourdeauducq}
17 \date{October 2009}
18 \begin{document}
19 \setlength{\parindent}{0pt}
20 \setlength{\parskip}{5pt}
21 \maketitle{}
22 \section{Introduction}
23 The CSR bus is designed to provide a lightweight interface to the configuration and status registers (CSRs) of peripherals.
24
25 It is built on the following principles:
26 \begin{itemize}
27 \item Synchronism. The bus is meant to be used in FPGA-based devices, whose architectures are designed for synchronous (clock-driven) systems.
28 \item Low signal count. There is no need for signals that take care of variable latency and qualification of accesses; since CSRs are often actual registers (D flip-flops) that can always be read or written at anytime within one cycle. There is no need for a large address bus; a fairly complicated SoC only contains about a thousand CSRs.
29 \item Low performance. Performance and associated complications are not needed for CSRs.
30 \item High routability. The CSR bus must often span several devices in the chip that can be physically separated by a large distance, resulting in large routing and load delays. To avoid creating critical paths on the bus, the protocol must ease implementations with little combinatorial logic at endpoints.
31 \end{itemize}
32
33 \section{Specifications}
34 \subsection{Signals}
35 A CSR interface is made up of the following signals:
36
37 \begin{tabularx}{\textwidth}{|l|l|l|X|}
38 \hline
39 \bf{Signal} & \bf{Width} & \bf{Direction} & \bf{Description} \\
40 \hline
41 a & 14 & Master to slave & Address signals. The upper 4 bits are used to select a slave, and the lower 10 to select a register within that slave. \\
42 \hline
43 we & 1 & Master to slave & Write enable signal. \\
44 \hline
45 dw & 32 & Master to slave & Write data. \\
46 \hline
47 dr & 32 & Slave to master & Read data. \\
48 \hline
49 \end{tabularx}\\
50
51 The operation is the same as that of a synchronous SRAM; except that it only responds when the upper 4 address bits are set to a particular value. The read and write cycles are detailed below.
52
53 \subsection{Read cycle}
54 The master initiates a read cycle by positioning the address lines in accordance with the device and register it wants to read. The write enable signal is set to 0.
55
56 The upper 4 address bits are used to select a slave. A single CSR bus can span up to 16 slaves. The lower 10 bits are used to select a register within a slave. Each slave can have up to 1024 registers.
57
58 The slave responds at the next clock cycle by positioning the contents of the requested register on the read data lines. The operation is pipelined, ie. while the slave responds, the master can position the address lines to read a register again at the next cycle.
59
60 If the slave is not selected (the upper 4 bits are not set to its address), it must assert 0 on all data read lines.
61
62 Here is an example timing diagram of read cycles to a slave responding to address 6:
63
64 \begin{tabular}{|l|c|c|c|c|c|c|c|}
65 \hline
66 a & 5.2 & 3.1 & 6.1 & 3.1 & 6.42 & 6.12 & 12.321 \\
67 \hline
68 we & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
69 \hline
70 dw & X & X & X & X & X & X & X \\
71 \hline
72 dr & 0 & 0 & 0 & Reg 1 & 0 & Reg 42 & Reg 12 \\
73 \hline
74 \end{tabular}
75
76 X = don't care
77
78 a.b = bit vector made by concatening the binary representations of a (4-bit) and b (10-bit)
79
80 \subsection{Write cycle}
81 The master initiates a write cycle by presenting valid data on \verb!dw!, asserting \verb!we!, and positioning the address lines in accordance with the slave and register it wants to write to.
82
83 As for read cycles, the upper 4 bits are used to select a slave, and the lower 10 bits are used to select a register within that slave.
84
85 If the slave is not selected, it ignores the write cycle. If it is selected, it writes its register at the next cycle.
86
87 After a write cycle (\verb!we=1!), the data read lines are invalid, no matter whether a slave was selected or not.
88
89 It is possible to issue two or more consecutive write cycles.
90
91 Here is an example timing diagram of write and read cycles to a slave responding to address 6:
92
93 \begin{tabular}{|l|c|c|c|c|c|c|c|}
94 \hline
95 a & 5.2 & 3.1 & 6.1 & 3.1 & 6.42 & 6.12 & 12.321 \\
96 \hline
97 we & 1 & 0 & 1 & 0 & 1 & 0 & 0 \\
98 \hline
99 dw & 32 & X & 12 & X & 143 & X & X \\
100 \hline
101 dr & 0 & X & 0 & X & 0 & X & Reg 12 \\
102 \hline
103 Writes & -- & -- & -- & $12\to1$ & -- & $143\to42$ & -- \\
104 \hline
105 \end{tabular}
106
107 \section{Bus topology}
108
109 \begin{figure}[H]
110 \centering
111 \includegraphics[height=80mm]{csr_topology.eps}
112 \caption{Example CSR bus topology}
113 \end{figure}
114
115 To combine several CSR buses so that many slaves can be accessed by a single master, the following connections should be made:
116 \begin{itemize}
117 \item connect all \verb!a!, \verb!we! and \verb!dw! signals together (master to slave path).
118 \item perform a bitwise OR on all \verb!dr! outputs of the slaves, and connect the output of the OR to the \verb!dr! input of the master (slave to master path).
119 \end{itemize}
120 With these connections, the master can access multiple slaves as if it it was connected to only one.
121 This topology is similar to the ``distributed OR'' topology of the DCR bus in the IBM CoreConnect architecture, and has the same advantages.
122
123 \end{document}