update
[libreriscv.git] / pinmux / pinmux_chennai_2018.tex
1 \documentclass[slidestop]{beamer}
2 \usepackage{beamerthemesplit}
3 \usepackage{graphics}
4 \usepackage{pstricks}
5
6 \title{Pin Multiplexer}
7 \author{Rishabh Jain}
8 \author{Luke Kenneth Casson Leighton}
9
10
11 \begin{document}
12
13 \frame{
14 \begin{center}
15 \huge{Pin Multiplexer}\\
16 \vspace{32pt}
17 \Large{Auto-generating documentation, code \\
18 and resources for a Pinmux}\\
19 \vspace{16pt}
20 \Large{Saving time and money for SoC / EC designers\\
21 in the RISC-V Ecosystem and beyond}\\
22 \vspace{24pt}
23 \Large{[proposed for] Chennai 9th RISC-V Workshop}\\
24 \vspace{16pt}
25 \large{\today}
26 \end{center}
27 }
28
29
30 \frame{\frametitle{Credits and Acknowledgements}
31
32 \begin{itemize}
33 \item TODO\vspace{10pt}
34 \end{itemize}
35 }
36
37
38 \frame{\frametitle{Glossary}
39
40 \begin{itemize}
41 \item GPIO: general-purpose reconfigureable I/O (Input/Output).
42 \item Pin: an I/O pad. May be driven (input) or may drive (output).
43 \item FN: term for a single-wire "function", such as UART\_TX,
44 I2C\_SDA, SDMMC\_D0 etc. may be an input, output or both
45 (bi-directional case: two wires are {\bf always} allocated, one
46 for input to the function and one for output from the function).
47 \item Bus: a group of bi-directional functions (SDMMC D0 to D3)
48 where the direction is ganged and {\bf under the Bus's control}
49 \item Input Priority Muxer: a multiplexer with N selector
50 wires and N associated inputs. The lowest (highest?) indexed
51 "selector" enabled results in its
52 input being routed to the output.
53 \item Output Muxer: a many-to-one "redirector" where any one
54 output "routed" to the input, based on a selector "address".
55 \end{itemize}
56 }
57
58
59 \frame{\frametitle{Why, How and What is a Pinmux?}
60
61 \begin{itemize}
62 \item Why? To save cost, increase yield, and to target multiple
63 markets with the same design, thereby increasing uptake
64 and consequently taking advantage of volume pricing.\vspace{4pt}
65 \\
66 Summary: it's all about making more money!\vspace{4pt}
67 \item How? By multiplexing many more functions (100 to 1,200) than there
68 are actual available pins (48 to 500), the required chip package
69 is far less costly and the chip more desirable\vspace{4pt}
70 \item What? A many-to-many dynamically-configureable router of
71 I/O functions to I/O pins\vspace{4pt}
72 \item \bf{Note: actual muxing is deceptively simple, but like
73 a DRAM cell it's actually about the ancillaries / extras}
74 \end{itemize}
75 }
76
77
78 \frame{\frametitle{What options are available?}
79
80 \begin{itemize}
81 \item Commercial licensed. Cost: unknown. Flexibility: unknown.
82 Language: unknown. Capability for auto-generation of Docs:
83 unknown. Capability for auto-generation of ancillary
84 resources: unknown.
85 Suitability for wide range of systems: unknown.
86 \vspace{4pt}
87 \\
88 Suitability for saving RISC-V ecosystem money: { \bf NONE }\\
89 Suitability for collaboration: {\bf ZERO} (i.e. don't bother)
90 \item SiFive IOF. License: Good! Flexibility: not so good.
91 Language: chisel3. Capability for auto-generation of Docs:
92 none. Capability for auto-generation of ancillary resources: partial.
93 Suitability for wide range of systems: not so good.
94 \vspace{4pt}
95 \\
96 Suitability for saving RISC-V ecosystem money: { \bf Low }\\
97 Suitability for collaboration: {\bf GOOD} (but: written in Chisel3)
98 \item \bf{Summary: NO suitable Libre-licensed pinmux code exists}
99
100 \end{itemize}
101 }
102
103
104 \frame{\frametitle{Associated Extras}
105
106 \begin{itemize}
107 \item Design Specification (what markets to target)
108 \item Scenario analysis ({\bf whether} the chip will fit "markets")
109 \item Documentation: Summary sheet, Technical Reference Manual.
110 \item Test suites
111 \item Control Interface (AXI4 / Wishbone / TileLink / other)
112 \item Simulation
113 \item Linux kernel drivers, DTB, libopencm3, Arduino libraries etc.
114 \end{itemize}
115 Example context:
116 \begin{itemize}
117 \item Shakti M-Class has 160 pins with a 99.5\% full 4-way mux
118 \item Almost 640-way routing, 6 "scenarios" (7th TBD),
119 100+ page Manual needed,
120 \bf{17,500 lines of auto-generated code}
121 \end{itemize}
122 }
123
124
125 \frame{
126 \vspace{30pt}
127 \begin{center}
128 {\Huge
129 ALL of these\vspace{20pt}\\
130 can be\vspace{20pt}\\
131 auto-generated\vspace{30pt}
132 }
133 \\
134 (from the Design Specification, after Scenario Analysis)
135 \end{center}
136
137 }
138
139
140 \frame{\frametitle{Example: 7 banks, 4-way mux, 160 pins}
141 \begin{center}
142 \includegraphics[height=1.7in]{example_pinmux.jpg}
143 \end{center}
144 \begin{itemize}
145 \item { \bf 17,500 lines of auto-generated HDL (and climbing)}
146 \item { \bf 12,500 lines of auto-generated Summary/Analysis}
147 \item Technical Reference Manual expected to be 100+ pages
148 \end{itemize}
149 }
150
151
152 \frame{\frametitle{Reduce workload, reduce duplication, reduce risk and cost}
153
154 \begin{itemize}
155 \item Auto-generate everything: documentation, code, libraries etc.
156 \vspace{10pt}
157 \item Standardise: similar to PLIC, propose GPIO and Pinmux\\
158 saves engineering effort, design effort and much more
159 \vspace{10pt}
160 \item Standardise format of configuration registers:
161 saves code duplication effort (multiple software environments)
162 \vspace{10pt}
163 \item Add support for multiple code formats: Chisel3 (SiFive IOF),
164 BSV (Bluespec), Verilog, VHDL, MyHDL.
165 \vspace{10pt}
166 \item Multiple auto-generated code-formats permits cross-validation:\\
167 auto-generated test suite in one HDL can validate a muxer
168 generated for a different target HDL.
169 \vspace{10pt}
170 \end{itemize}
171 }
172
173
174 \frame{\frametitle{Design Spec and Scenario Analysis}
175
176 \begin{itemize}
177 \item Analyse the target markets that the chip will sell in\\
178 (multiple markets increases sales volume, reduces chip cost)
179 \vspace{4pt}
180 \item Create a formal (python-based) specification for the pinmux
181 \vspace{4pt}
182 \item Add scenarios then check that they meet the requirements\\
183 { \bf (before spending money on hardware engineers!) }
184 \vspace{4pt}
185 \item Scenarios represent target markets: ICs to be connected\\
186 (GPS, NAND IC, WIFI etc. May require draft schematics
187 drawn up, or client-supplied schematics analysed).
188 \vspace{4pt}
189 \item Analyse the scenarios: if pins are missing, alter and repeat.\\
190 \vspace{4pt}
191 \item Eventually the pinmux meets all requirements...\\
192 { \bf without spending USD \$5-50m to find out it doesn't!}
193 \end{itemize}
194 }
195
196
197
198 \frame{\frametitle{Muxer cases to handle (One/Many to One/Many) etc.}
199
200 \begin{itemize}
201 \item One FN outputs to Many Pins: no problem\\
202 (weird configuration by end-user, but no damage to ASIC)
203 \item One Pin to Many FN inputs: no problem\\
204 (weird configuration by end-user, but no damage to ASIC)
205 \item Many Pins to One FN input: {\bf Priority Mux needed}\\
206 No priority mux: Pin1 = HI, Pin0 = LO, ASIC is damaged
207 \item Many FN outputs simultaneously to one Pin: {\bf does not occur}\\
208 (not desirable and not possible, as part of the pinmux design)
209 \item Some FNs (I2C\_SDA, SD\_D0..3) are I/O Buses\\
210 Bi-directional control of the Pin must be handed to the
211 FN
212 \item Nice to have: Bus sets pintype, signal strength etc.\\
213 e.g. selecting SD/MMC doesn't need manual pin-config.\\
214 \bf{caveat: get that wrong and the ASIC can't be sold}
215 \end{itemize}
216 }
217
218
219 \frame{\frametitle{Pin Configuration, input and output}
220
221 In/out: {\bf Note: these all require multiplexing }
222 \begin{itemize}
223 \item Output-Enable (aka Input disable): switches pad to In or Out
224 \item Output (actually an input wire controlling pin's level, HI/LO)
225 \item Input (actually an output wire set based on pin's driven level)
226 \end{itemize}
227 Characteristics: {\bf Note: these do not require multiplexing }
228 \begin{itemize}
229 \item Output current level: 10mA / 20mA / 30mA / 40mA
230 \item Input hysteresis: low / middle / high. Stops signal noise
231 \item Pin characteristics: CMOS Push-Push / Open-Drain
232 \item Pull-up enable: built-in 10k (50k?) resistor
233 \item Pull-down enable: built-in 10k (50k?) resistor
234 \item Muxing and IRQ Edge-detection not part of the I/O pin
235 \item Other? (impedance? not normally part of commercial pinmux)
236 \end{itemize}
237 }
238
239
240 \frame{\frametitle{Standard GPIO 4-way in/out Mux and I/O pad}
241 \begin{center}
242 \includegraphics[height=2.5in]{../shakti/m_class/mygpiomux.jpg}\\
243 {\bf 4-in, 4-out, pullup/down, hysteresis, edge-detection (EINT)}
244 \end{center}
245 }
246
247 \frame{\frametitle{Separating Pin Configuration, input and output}
248
249 \begin{itemize}
250 \item Standard Mux design {\bf cannot deal with many-to-one inputs}\\
251 (SiFive IOF source code from Freedom U310 cannot, either)
252 \vspace{4pt}
253 \item I/O pad configuration conflated with In-Muxer conflated with
254 Out-Muxer conflated with GPIO conflated with EINT.
255 \vspace{4pt}
256 \end{itemize}
257 {\bf IMPORTANT to separate all of these out:
258 \vspace{4pt}}
259 \begin{itemize}
260 \item EINTs to be totally separate FNs. managed by RISC-V PLIC\\
261 (If every GPIO was an EINT it would mean 100+ IRQs)
262 \vspace{4pt}
263 \item GPIO In/Out/Direction treated just like any other FN\\
264 (but happen to have AXI4 - or other - memory-mapping)
265 \vspace{4pt}
266 \item Pad configuration separated and given one-to-one Registers\\
267 (SRAMs set by AXI4 to control mux, pullup, current etc.)
268 \end{itemize}
269 }
270
271 \frame{\frametitle{Register-to-pad "control" settings}
272 \begin{center}
273 \includegraphics[height=2.5in]{reg_gpio_cap_ctrl.jpg}\\
274 {\bf pullup/down, hysteresis, current, edge-detection}
275 \end{center}
276 }
277
278
279 \frame{\frametitle{GPIO (only): Simplified I/O pad Diagram (FN only)}
280 \begin{center}
281 \includegraphics[height=2.5in]{reg_gpio_pinblock.jpg}\\
282 {\bf 3 wires: IN, OUT, OUTEN (also = !INEN) }
283 \end{center}
284 }
285
286
287 \frame{\frametitle{Output Muxer (very simple)}
288 \begin{center}
289 \includegraphics[height=1.1in]{reg_gpio_out_mux.jpg}\\
290 {\bf Ouput Muxer using 2-bit address selection}\\
291 \end{center}
292 \begin{itemize}
293 \item Very straightforward (deceptively so, like SRAM cells)
294 \item Used in both OUT routing and Direction-control routing\\
295 (same address for each, connected to same FNs)
296 \item More complex pinmux will have 3-bit addressing (8 FNs)\\
297 (Note: not all outputs will be connected, depends on pinmux)
298 \end{itemize}
299 }
300
301
302 \frame{\frametitle{In/Out muxing, direction control: GPIO just a FN}
303 \begin{center}
304 \includegraphics[height=2.5in]{reg_gpio_fn_ctrl.jpg}\\
305 {\bf Note: function can control I/O direction (bus)}
306 \end{center}
307 }
308
309
310 \frame{\frametitle{Direction Control: Function not bi-directional (bus)}
311 \begin{center}
312 \includegraphics[height=2.5in]{reg_gpio_fn_ctrl2.jpg}\\
313 Note: Function {\bf does not} control I/O direction
314 \end{center}
315 }
316
317
318 \frame{\frametitle{Output (and OUTEN) Wiring. 2 pins, 2 GPIO, 2 Fns}
319 \begin{center}
320 \includegraphics[height=2.5in]{reg_gpio_out_wiring.jpg}\\
321 {\bf Reg0 for Pin0, Reg1 for Pin1, Output and OUTEN same mux }
322 \end{center}
323 }
324
325
326 \frame{\frametitle{Input Selection and Priority Muxing}
327 \begin{center}
328 \includegraphics[height=0.75in]{reg_gpio_comparator.jpg}\\
329 {\bf Muxer enables input selection}\\
330 \vspace{10pt}
331 \includegraphics[height=1.25in]{reg_gpio_in_prioritymux.jpg}\\
332 {\bf However multiple inputs must be prioritised }
333 \end{center}
334 }
335
336
337 \frame{\frametitle{Input Priority-Mux Wiring: very different from Out-Mux}
338 \begin{center}
339 \includegraphics[height=2.5in]{reg_gpio_in_wiring.jpg}\\
340 {\bf Pin Mux selection vals NOT same as FN selection vals}
341 \end{center}
342 }
343
344
345 \frame{\frametitle{Input Priority-Mux Wiring}
346
347 \begin{itemize}
348 \item In-Muxer selection number (0,1,2,3) obviously has to match
349 with Out-Muxer order (otherwise a bi-directional FN
350 needs different Mux-register settings for
351 selecting either IN or OUT)
352 \vspace{6pt}
353 \item Priority-mux selection values do not actually matter,
354 and have nothing to do with the actual Muxer settings.
355 \vspace{6pt}
356 \item GPIO FN's input muxer is nothing more than an AND gate\\
357 (you never route more than one pin to one GPIO)
358 \vspace{6pt}
359 \item Any other FN with only 1:1 on its IN also just an AND gate \\
360 (this just always happens to be true for GPIO)
361 \vspace{6pt}
362 \item Not all FNs have input capability: clearly they will not
363 be included in the In-Muxing.
364 \end{itemize}
365 }
366
367
368 \frame{\frametitle{Summary}
369
370 \begin{itemize}
371 \item Value of Libre/Open pimux dramatically underestimated\\
372 (and does not presently exist: SiFive IOF not suitable as-is)
373 \item {\bf Only current option: license a commercial Pinmux }
374 \item Actual muxing, like SRAM cells, is deceptively simple
375 \item Actual pinmuxes are enormous: auto-generation essential
376 \item HDLs completely unsuited to auto-generation task\\
377 (TRM, docs): {\bf Modern OO language features needed}
378 \item Scenario Analysis / Verification and auto-generation of
379 different HDLs far easier in a Modern OO language
380 \item Standardisation for RISC-V saves implementors from huge
381 duplication cost (HDL, firmware, docs, maintenance)
382 \item { \bf Ultimately it's about saving money and reducing risk }
383 \end{itemize}
384 }
385
386
387 \frame{
388 \begin{center}
389 {\Huge The end\vspace{20pt}\\
390 Thank you\vspace{20pt}\\
391 Questions?\vspace{20pt}
392 }
393 \end{center}
394
395 \begin{itemize}
396 \item http://libre-riscv.org/shakti/m\_class/pinmux/
397 \end{itemize}
398 }
399
400
401 \end{document}