<!doctype html>
<html>

<head>
	<meta charset="utf-8">

	<title>Fomu: An FPGA in your USB Port</title>

	<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
	<meta name="author" content="Sean &quot;xobs&quot; Cross">

	<meta name="apple-mobile-web-app-capable" content="yes">
	<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

	<link rel="stylesheet" href="css/reveal.css">
	<link rel="stylesheet" href="css/theme/solarized.css" id="theme">

	<!-- Theme used for syntax highlighting of code -->
	<link rel="stylesheet" href="lib/css/zenburn.css">

	<!-- Printing and PDF exports -->
	<script>
		var link = document.createElement('link');
		link.rel = 'stylesheet';
		link.type = 'text/css';
		link.href = window.location.search.match(/print-pdf/gi) ? 'css/print/pdf.css' : 'css/print/paper.css';
		document.getElementsByTagName('head')[0].appendChild(link);
	</script>

	<!--[if lt IE 9]>
		<script src="lib/js/html5shiv.js"></script>
		<![endif]-->

	<style>
		/*********************************************
			* ZOOM REVERSE TRANSITION (i.e. zoom out)
			*********************************************/
			.reveal .slides section[data-transition=zoomrev],
			.reveal.zoomrev .slides section:not([data-transition]) {
				transition-timing-function: ease;
			}

			.reveal .slides > section[data-transition=zoomrev].past,
			.reveal .slides > section[data-transition~=zoomrev-out].past,
			.reveal.zoomrev .slides > section:not([data-transition]).past {
				       visibility: hidden;
				-webkit-transform: scale(0.2);
						transform: scale(0.2);
			}

			.reveal .slides > section[data-transition=zoomrev].future,
			.reveal .slides > section[data-transition~=zoomrev-in].future,
			.reveal.zoomrev .slides > section:not([data-transition]).future {
					   visibility: hidden;
				-webkit-transform: scale(16);
						transform: scale(16);
			}

			.reveal .slides > section > section[data-transition=zoomrev].past,
			.reveal .slides > section > section[data-transition~=zoomrev-out].past,
			.reveal.zoomrev .slides > section > section:not([data-transition]).past {
				-webkit-transform: translate(0, 150%);
						transform: translate(0, 150%);
			}

			.reveal .slides > section > section[data-transition=zoomrev].future,
			.reveal .slides > section > section[data-transition~=zoomrev-in].future,
			.reveal.zoomrev .slides > section > section:not([data-transition]).future {
				-webkit-transform: translate(0, -150%);
						transform: translate(0, -150%);
			}
		</style>

</head>

<body>

	<!-- Start of main presentation -->
	<div class="reveal">
		<div class="footer">
			<a class="url" href="https://p.xobs.io/td19/">p.xobs.io/td19</a>
			<span class="theme">Teardown 2019</span><span class="hashtag"> | #teardown2019</span><span class="twitter"> |
				@teardown</span>
		</div>
		<div class="slides">
			<section>
				<h2>Fomu: an FPGA in your USB Port</h2>
				<img src="img/tomu-fomu-case-superwide.jpg">
				<p>
					Fomu (with case): an FPGA in your USB port. Crowdfunding now! One week to go. <a href="https://t.xobs.io/fomu">t.xobs.io/fomu</a>
				</p>
			</section>

			<section data-background-image="css/theme/lca2019-title-bg-transparent.svg">
				<h1>Fomu: An FPGA in your USB Port</h1>
				<h4>A whirlwind introduction to Fomu and FPGAs</h4>
				<p align="right">
					<small>Sean Cross - <a href="https://xobs.io/">https://xobs.io/</a> - @xobs</small>
				</p>
			</section>

			<section>
				<h3>Outline</h3>
				<ol>
					<li>What is an FPGA?</li>
					<li>What is Fomu?</li>
					<li>What is this PCB?</li>
					<li>
						<ul>
							<li>Modifications made</li>
							<li>Differences to final PCB</li>
						</ul>
					</li>
					<li>Levels of Fomu</li>
					<li>
						<ol>
							<li>Python / Interpreted</li>
							<li>RISC-V</li>
							<li>Verilog / FPGA</li>
						</ol>
					</li>
					<li>Fomu Firmware Layout</li>
					<li>
						<ol>
							<li>Bootloader</li>
							<li>Recovery</li>
							<li>Magic constants</li>
							<li>Interpreters</li>
							<li>Updates</li>
						</ol>
					</li>
					<li>Loading firmware onto Fomu</li>
					<li>Blinkenlights</li>
				</ol>
			</section>
		</div>
	</div> <!-- class="reveal" -->
	<!-- End of main presentation -->

	<!-- Start of configuration section -->
	<script src="lib/js/head.min.js"></script>
	<script src="js/reveal.js"></script>

	<script>
		var presenter = !!Reveal.getQueryHash().s;

		// More info https://github.com/hakimel/reveal.js#configuration
		Reveal.initialize({
			controls: presenter ? false : true,
			progress: true,
			history: true,
			center: true,
			controlsTutorial: presenter ? false : true,

			slideNumber: presenter ? null : 'c/t',

			// The "normal" size of the presentation, aspect ratio will be preserved
			// when the presentation is scaled to fit different resolutions. Can be
			// specified using percentage units.
			width: 960,
			height: 700,

			// Factor of the display size that should remain empty around the content
			margin: 0.1,

			multiplex: {
				url: 'https://p.xobs.io/',
				id: 'cbd6556886c2825d',
				secret: Reveal.getQueryHash().s || null
			},

			// Bounds for smallest/largest possible scale to apply to content
			minScale: 0.02,
			maxScale: 5.5,

			transition: 'slide', // none/fade/slide/convex/concave/zoom

			// More info https://github.com/hakimel/reveal.js#dependencies
			dependencies: [
				{ src: 'lib/js/classList.js', condition: function () { return !document.body.classList; } },
				{ src: 'plugin/markdown/marked.js', condition: function () { return !!document.querySelector('[data-markdown]'); } },
				{ src: 'plugin/markdown/markdown.js', condition: function () { return !!document.querySelector('[data-markdown]'); } },
				{ src: 'plugin/highlight/highlight.js', async: true, callback: function () { hljs.initHighlightingOnLoad(); } },
				{ src: 'plugin/search/search.js', async: true },
				{ src: 'plugin/zoom-js/zoom.js', async: true },
				{ src: 'plugin/notes/notes.js', async: true },

				{ src: 'lib/js/socket.io.js', async: true },
				{
					src: presenter ?
						'plugin/multiplex/master.js' :
						'plugin/multiplex/client.js', async: true
				},
			]
		});
	</script>
</body>

</html>