Copyright notices in docs
[mw/milkymist.git] / doc / fml.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{FastMemoryLink (FML) bus specifications}
16 \author{S\'ebastien Bourdeauducq}
17 \date{December 2009}
18 \begin{document}
19 \setlength{\parindent}{0pt}
20 \setlength{\parskip}{5pt}
21 \maketitle{}
22
23 \section{Introduction}
24 The FastMemoryLink bus is designed to provide a high-performance interface between a DRAM controller and peripherals that need to access large amounts of data.
25
26 FML buses are referred to as \textit{bxw FML}; which means that the bus operates with a burst length of b and that the width (in bits) of each unidirectional data line is w. For example, Milkymist uses a 4x64 FML bus; which means that each transfer with the DRAM controller is made up of four 64-bit chunks.
27
28 Its main features are the following:
29 \begin{itemize}
30 \item Synchronism. The bus is meant to be used in FPGA-based devices, whose architectures are designed for synchronous (clock-driven) systems.
31 \item Burst oriented. Each cycle begins with an address phase, which is then followed by several data chunks  which are transferred on consecutive clock edges (the data phase). The length of the burst is fixed.
32 \item Pipelined transfers. During the data phase of a cycle, the control lines are free and can be used to initiate the address phase of the next cycle.
33 \end{itemize}
34
35 \section{Specifications}
36 \subsection{Signals}
37 A FastMemoryLink interface is made up of the following signals:
38
39 \begin{tabularx}{\textwidth}{|l|l|l|X|}
40 \hline
41 \bf{Signal} & \bf{Width} & \bf{Direction} & \bf{Description} \\
42 \hline
43 a & User-spec. & Master to slave & Address signals. They are used to specify the location in DRAM to be accessed. \\
44 \hline
45 stb & 1 & Master to slave & Strobe signal. This signal qualifies a cycle. Once it has been asserted, it cannot be deasserted until the cycle has been acknowledged by the slave. \\
46 \hline
47 we & 1 & Master to slave & Write enable signal. \\
48 \hline
49 ack & 1 & Slave to master & Acknowledgement signal. This signal is asserted for one cycle by the slave when it is ready to begin the data phase. \\
50 \hline
51 dw & User-spec. (w) & Master to slave & Write data. \\
52 \hline
53 dr & User-spec. (w) & Slave to master & Read data. \\
54 \hline
55 \end{tabularx}
56
57 \subsection{Single read cycle}
58 The master initiates a read cycle by presenting a valid address, deasserting \verb!we!, and asserting \verb!stb!.
59
60 At least one clock cycle later, the slave presents valid data on \verb!dr! and asserts \verb!ack! to mark the beginning of the data phase. During the b-1 subsequent cycles, the slave keeps sending nearby data using the \verb!dr! lines only (see the ``Burst ordering'' section below).
61
62 Here is an example single read timing diagram for a bus using a burst length of 4.
63
64 \begin{tabular}{|l|c|c|c|c|c|c|c|}
65 \hline
66 a & X & A & A & X & X & X & X \\
67 \hline
68 stb & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
69 \hline
70 we & X & 0 & 0 & X & X & X & X \\
71 \hline
72 ack & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\
73 \hline
74 dw & X & X & X & X & X & X & X \\
75 \hline
76 dr & X & X & A+0 & A+1 & A+2 & A+3 & X \\
77 \hline
78 \end{tabular}
79
80 X = don't care
81
82 \subsection{Single write cycle}
83 The master initiates a write cycle by presenting valid address and data, asserting \verb!we!, and asserting \verb!stb!.
84
85 At least one clock cycle later, the slave asserts \verb!ack! to mark the beginning of the data phase. During the b-1 subsequent cycles, the master keeps sending nearby data using the \verb!dw! lines only (see the ``Burst ordering'' section below).
86
87 Here is an example single write timing diagram for a bus using a burst length of 4.
88
89 \begin{tabular}{|l|c|c|c|c|c|c|c|}
90 \hline
91 a & X & A & A & X & X & X & X \\
92 \hline
93 stb & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
94 \hline
95 we & X & 1 & 1 & X & X & X & X \\
96 \hline
97 ack & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\
98 \hline
99 dw & X & A+0 & A+0 & A+1 & A+2 & A+3 & X \\
100 \hline
101 dr & X & X & X & X & X & X & X \\
102 \hline
103 \end{tabular}
104
105 \subsection{General restrictions}
106 While waiting for the \verb!ack! signal to become active, the master must continue to assert \verb!stb! and keep \verb!a! and \verb!we! constant.
107
108 On the cycle following the assertion of the \verb!ack! signal, the slave must deassert \verb!stb! unless it wants to start a new (pipelined) cycle (see below).
109
110 The slave is not allowed to assert \verb!ack! when \verb!stb! has not been asserted for at least one cycle.
111
112 \subsection{Pipelined read cycles}
113 To maximize bus utilisation and reduce latency, the master is allowed to start the address phase of the next cycle during the data phase of the current cycle.
114
115 The slave must not acknowledge the new cycle until all data from the current cycle have been transferred.
116
117 Here is an example timing diagram.
118
119 \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|}
120 \hline
121 a & X & A & A & B & B & B & B & X & X & X & X\\
122 \hline
123 stb & 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
124 \hline
125 we & X & 0 & 0 & 0 & 0 & 0 & 0 & X & X & X & X \\
126 \hline
127 ack & 0 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\
128 \hline
129 dw & X & X & X & X & X & X & X & X & X & X & X \\
130 \hline
131 dr & X & X & A+0 & A+1 & A+2 & A+3 & B+0 & B+1 & B+2 & B+3 & X \\
132 \hline
133 \end{tabular}
134
135 \subsection{Pipelined write cycles}
136 Writes can also be pipelined. However, the master cannot present its data immediately on the write lines since they are already busy. Instead, it must present its data as soon as possible; that is, immediately after the last word of the current cycle has been transferred.
137
138 Here is an example timing diagram.
139
140 \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|}
141 \hline
142 a & X & A & A & B & B & B & B & X & X & X & X\\
143 \hline
144 stb & 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
145 \hline
146 we & X & 1 & 1 & 1 & 1 & 1 & 1 & X & X & X & X \\
147 \hline
148 ack & 0 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\
149 \hline
150 dw & X & A+0 & A+0 & A+1 & A+2 & A+3 & B+0 & B+1 & B+2 & B+3 & X \\
151 \hline
152 dr & X & X & X & X & X & X & X & X & X & X & X \\
153 \hline
154 \end{tabular}
155
156 \subsection{Overlapping reads and writes}
157 The FML bus allows overlapping read and write cycles. This typically requires a relatively complex DRAM controller which implements a write queue.
158
159 The slave must assert the \verb!ack! signal at least two clock cycles after it asserted it to acknowledge the previous bus cycle.
160
161 The following timing diagram shows a read cycle which is overlapped by a write cycle.
162
163 \begin{tabular}{|l|c|c|c|c|c|c|c|c|}
164 \hline
165 a & X & A & A & B & B & X & X & X\\
166 \hline
167 stb & 0 & 1 & 1 & 1 & 1 & 0 & 0 & 0\\
168 \hline
169 we & X & 0 & 0 & 1 & 1 & X & X & X \\
170 \hline
171 ack & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 \\
172 \hline
173 dw & X & X & X & X & B+0 & B+1 & B+2 & B+3 \\
174 \hline
175 dr & X & X & A+0 & A+1 & A+2 & A+3 & X & X \\
176 \hline
177 \end{tabular}
178
179
180 \subsection{Burst ordering}
181 The modulo b of the address is used to specify the burst ordering.
182
183 It is strongly suggested that b should be a power of 2, so that the modulo and quotient can be computed by simply slicing the address bit vector.
184
185 The bus uses a linear wrapping burst ordering. For example, on a bus with a burst length of 4, an access starting at address 128 yields the addresses \verb!128; 129; 130; 131!, and an access starting at address 129 yields the addresses \verb!129; 130; 131; 128!.
186
187 Burst reordering can be used to implement critical-word-first in caches.
188
189 \section*{Copyright notice}
190 Copyright \copyright 2007-2009 S\'ebastien Bourdeauducq. \\
191 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.
192
193 \end{document}